jQuery:添加delay() 和removeClass() 后代码停止工作

标签 jquery

这是我的代码...

 $('nav ul li').hover(function() {

    $(this).addClass('hoverIn');


  },
  function() {

    $(this).addClass('hoverOut');


  });

效果很好。

但是当我添加delay()和removeClass()时它不起作用,如下......

 $('nav ul li').hover(function() {

    $(this).addClass('hoverIn').delay(800).removeClass('hoverIn');


  },
  function() {

    $(this).addClass('hoverOut').delay(800).removeClass('hoverOut');


  });

我在这里做错了什么吗?

任何帮助将不胜感激。谢谢。

最佳答案

正如其他人提到的,.removeClass() 不是动画函数,因此不受任何排队效果的影响。

最简单的解决方案是使用 .queue() 将调用插入动画队列:

$(this).addClass('hoverIn').delay(800).queue(function() {
    $(this).removeClass('hoverIn').dequeue();
});

.dequeue() 调用对于确保任何其他排队操作仍然发生非常重要。

请注意,使用动画队列还意味着您可以使用 .stop() 来取消尚未发生的操作。使用计时器会使事情变得更加复杂。

<小时/>

如果你想要真正喜欢,我刚刚淘汰的这个插件将允许你将任何任意 jQuery 函数添加到动画队列中:

(function($) {
    $.fn.queued = function() {
        var self = this;
        var func = arguments[0];
        var args = [].slice.call(arguments, 1);
        return this.queue(function() {
            $.fn[func].apply(self, args).dequeue();
        });
    }
}(jQuery));

这样,上面的行将变成:

$(this).addClass('hoverIn').delay(800).queued('removeClass', 'hoverIn');

演示地址:http://jsfiddle.net/alnitak/h5nWw/

关于jQuery:添加delay() 和removeClass() 后代码停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10972961/

相关文章:

Jquery 图像叠加库参数问题

javascript - 如何将单击对象的文本传递给变量

javascript - 在 Django 中处理模式窗口

javascript - jquery dataTable分页未出现

javascript - 如何在循环中提取表单元素值?

javascript - 并排显示选择框中的两个选项

jquery - 无法将焦点移至控件 jQuery 1.7 ie8

javascript - jQuery - 未获取元素 :enabled properly

javascript - jQuery 单击跳转到 Safari 上的页面顶部

javascript - JS 多函数执行