javascript - 过渡结束不触发

标签 javascript css css-transitions transition transitionend

我有一个想法,使用动画隐藏和显示方法创建模态窗口,并且我希望它能够与 CSS 过渡一起使用。

我创建原型(prototype)https://jsfiddle.net/7bkvcvqq/and一切看起来都很好,但是当我单击“快速”按钮时立即触发显示和隐藏时,事件 Transitionend 不会触发,模式窗口仍然在页面上。您可以检查这一点,只需尝试在单击快速按钮后用鼠标选择页面上的一些文本即可。

var modal = (function () {

  var $modal    = $('.modal'),
      openClass = 'modal_open',
      hide,
      show;

  hide = function () {
    // force a redraw/repaint
    $modal.height();

    $modal.removeClass(openClass);
  };

  show = function () {
    $modal.show();

    // force a redraw/repaint
    $modal.height();

    $modal.addClass(openClass);
  };

  $(document).on('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function (e) {
    if ($modal.is(e.target) && !$modal.hasClass(openClass)) {
      $modal.hide();
    }
  });

  return {
    hide: hide,
    show: show
  }

}());
例如,在实际代码中,当我将此逻辑用于预加载器时,可能会发生这种情况。我发现的一种解决方案是在隐藏函数中使用setTimeout,但是在不同的计算机上setTimeout的延迟不同。也许这取决于CPU,我不知道。

为什么会发生这种情况以及如何防止这种情况?

最佳答案

过渡应该位于具有过渡属性的元素中:

$('.modal').on('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function (e) {

查看更多信息

https://developer.mozilla.org/en-US/docs/Web/Events/transitionend

关于javascript - 过渡结束不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34085617/

相关文章:

javascript - JavaScript 表单中的边框颜色不会覆盖

javascript - 试图涂黑可移动 div 之外的所有内容

php - 通过 ajax onchange 事件传递选定的值

javascript - 从多个数组创建对象的多维数组

javascript - 手动修复 NPM 中的漏洞

html - 是否可以动态屏蔽/裁剪 html 元素组?

html - 图像悬停缩放过渡的问题

javascript - 未使用转换的 CSS3 转换?

css - 如何在 Webkit 中使用 CSS3 过渡和垂直滚动条避免无限循环?

javascript - JSX 中的多个 if/else