使用stop()延迟()或超时?

mat*_*att 20 javascript jquery delay hover

$('.file a').live('mouseenter', function() {
    $('#download').stop(true, true).fadeIn('fast');
}).live('mouseleave', function() {
    $('#download').stop(true, true).fadeOut('fast');
});
Run Code Online (Sandbox Code Playgroud)

我希望mouseenter函数有stop()1秒的延迟.所以,如果我将鼠标悬停在#downloadfadeIn应延迟1秒后启动.如果我同时将鼠标移出,fadeIn则不应该开始.抓住我?

我真的不知道怎么做,有什么想法吗?

Nic*_*ver 25

setTimeout()在这种情况下,您需要使用,因为它的.delay()工作方式(以及您无法取消它).

$('.file a').live('mouseenter', function() {
  $.data(this, 'timer', setTimeout(function() {
      $('#download').stop(true, true).fadeIn('fast');
  }, 1000));
}).live('mouseleave', function() {
  clearTimeout($.data(this, 'timer'));
  $('#download').stop(true, true).fadeOut('fast');
});
Run Code Online (Sandbox Code Playgroud)

你可以在这里尝试一下.

如果您使用.delay()它将为该元素出列下一个动画,无论您是否先清除该队列.所以你需要一个你可以取消的超时,上面通过手动调用setTimeout()和存储结果来实现,$.data()所以你可以稍后通过它来清除它clearTimeout().

  • 从doco:_作为jQuery 1.7,不推荐使用`.live()`方法.使用`.on()`来附加事件处理程序._ (2认同)