繁体   English   中英

动画未完成jQuery TransitionEnd事件

[英]Animation doesn't complete with jQuery TransitionEnd event

情况

  • 单击.rightnav.front以获取DIV1。
  • DIV1向右移动,不透明度降低
  • DIV1向左移动,完成时不透明度为0
  • DIV1获取类.hidden和.offset来隐藏它并将其移出屏幕,因此它不再可单击。
  • 下一个DIV(用于测试目的的IDV为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

看一下这个解决方案,也许(确保)它不是理想的,但应该可以按预期工作。 正如我在评论中提到的,我已经将动画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动画, 请看一看

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM