动画未通过 jQuery TransitionEnd 事件完成

Animation doesn't complete with jQuery TransitionEnd event

情况

问题

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.IO link 的现场测试:http://codepen.io/nygter/pen/QbpegM

看看这个解决方案,也许(确定)它不理想,但应该按预期工作。正如我在评论中提到的,我已将 animationjQuery 移至 @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.