动画并没有完成jQuery TransitionEnd事件

时间:2015-06-05 23:17:12

标签: javascript jquery css css-transitions transitionend

情况

    单击
  • .rightnav.front进行DIV1。
  • DIV1向右移动,不透明度降低
  • DIV1向左移动,完成时不透明度为0
  • DIV1获取类.hidden和.offset来隐藏它并将其移出屏幕,因此它不再可点击了..
  • 下一个DIV(ID为2的DIV用于测试目的)删除了它的隐藏和偏移类,并且是下一个点击事件的目标。

问题

DIV向右移动,但在隐藏之前不会向左移动(向后移动)。请参阅底部的Codepen以进行试用。

我只在这里发布JavaScript代码..您可以在代码中找到CSS和HTML。

这是jQuery代码

$(document.body).on('click','.rightnav.front', function () {
      var x = $(this).parent().parent();
      x.addClass('moveright')
      .one('transitionend', function() {
        x.removeClass('moveright')
      })
      .one('transitionend', function(){
        x.addClass('moveleft');
      })
      .one('transitionend', function() {
        x.addClass('hidden').addClass('offset');
        $('.rightnav.front').removeClass('front');
        var nextId = Number(x.attr('id')) + 1;
        var nextWidget = $('#' + nextId);
        nextWidget.removeClass('hidden');
        nextWidget.children().find('.rightnav').addClass('front');
      }) 
    });

CodePen

以下是实时测试的CodePen.IO链接:http://codepen.io/nygter/pen/QbpegM

1 个答案:

答案 0 :(得分:1)

看看这个解决方案,也许(肯定)它不理想,但应该按预期工作。正如我在评论中提到的,我已将动画 jQuery 移至@ keyframes

魔术来自:

.widget.moveright{
  left:450px;
  margin-left:-100px;
  opacity:0.5;
}

x.addClass('moveright')
      .one('transitionend', function() {
        x.removeClass('moveright')
      })
      .one('transitionend', function(){
        x.addClass('moveleft');
      }) //...

转化为:

@keyframes moveright{
  50% {
    left:450px;
    margin-left:-100px;
    opacity:0.5;
  }
  100% {
    opacity: 0;
  }  
}

.widget.moveright{
  animation: moveright 1s ease;
  -webkit-animation: moveright 1s ease;
}

x.addClass('moveright')
      .one('animationend', function() {
        $(this)
          .removeClass('moveright')
          .addClass('hidden offset');
        //...

Codepen见到它。 要了解CSS动画take a look