【问题标题】:Weird behavior while adding and removing class using jquery使用 jquery 添加和删除类时的奇怪行为
【发布时间】:2012-10-23 18:46:17
【问题描述】:

我有一组预定义的 css 类,使用它们我可以为 div 设置动画。场景是我正在尝试使用“幻灯片效果”为 div 设置动画。只需在 div 中添加 'slide in' 类,就会使 div 滑入。但是第二次这样做时问题就来了。第二次,div 已经有了“滑入”类,所以我要删除“滑入”类,并再次添加相同的类来制作动画。但是动画没有发生,但是当我在删除“滑入”类之后添加“滑入”类之前添加 10ms 延迟时,动画就会发生。

演示,仅适用于 webkit 浏览器

演示一,(不加延时,第二次动画不生效)

Demo1 尝试两次滑入按钮。

演示二,(添加延时,动画作品)

Demo2尝试滑入按钮两次。

我想知道,如何在不依赖时间延迟的情况下做到这一点

【问题讨论】:

标签: jquery css css-animations


【解决方案1】:

对于演示 1 - 将幻灯片功能替换为:

function slide(){
  $('#tg').addClass('slide in');
 var t= setTimeout(function(){$('#tg').removeClass('slide in');},600);
}

动画完成后我删除了这个类。演示:http://jsbin.com/eyerot/12/edit

对于自动滚动: 用这个替换你的js:

function slide(){
  interval = setInterval(function(){slide_me();},2000);
}

function slide_me(){
  $('#tg').addClass('slide in');
    t= setTimeout(function(){$('#tg').removeClass('slide in');},600);
}

【讨论】:

    【解决方案2】:

    最好的办法是将动画元素绑定到 CSS 动画完成时触发的 animationend 回调。

    以下是我将如何重写您的 JS:

    // Bind your element to animationend callbacks from all supporting browsers
    $('#tg').bind('webkitAnimationEnd mozAnimationEnd msAnimationEnd oAnimationEnd animationEnd', function(event){
      // Each time this callback is called the "slide in" classes are removed.
      $('#tg').removeClass('slide in');
    });
    
    // Each time the button is clicked the classes are re-added
    function slide() {
      $('#tg').addClass('slide in');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-06
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 2018-04-20
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多