悬停时使用向上滑动和向下滑动的 JQuery 下拉菜单是跳跃式的

发布于 2024-09-19 01:31:15 字数 405 浏览 12 评论 0原文

我使用 jQuery Slideup 和 Slidedown 制作了一个非常简单的下拉菜单,但如果将鼠标快速移动到其上,或者将鼠标按住,它会变得非常跳跃(我使用的是 Firefox 3.6.8)子菜单项之一。

我在以下链接中制作了一个工作示例:

http://jsfiddle.net/jUraw/19/

如果没有 .stop(true, true) 函数,情况会更糟。我还尝试添加悬停意图,但因为我在同一 div 中有一个悬停触发的幻灯片,所以它与幻灯片的功能冲突。

我有什么遗漏的吗?我听说clearqueue可能有效,或者可能超时,但不知道在哪里添加它们。

谢谢大家。

I've made a very simple dropdown menu using jQuery slideup and slidedown for the functions - but it gets very jumpy (I'm using Firefox 3.6.8) if the mouse is moved to quickly over it, or if the mouse is held on one of the submenu items.

I've made a working example at the following link:

http://jsfiddle.net/jUraw/19/

Without the .stop(true, true) function it is even worse. I've also tried adding hover-intent, but because I have a hover-triggered slideshow in the same div it conflicts with the slideshow's functionality.

Is there something I'm missing? I have heard clearqueue might work, or maybe timeout, but can't figure out where to add them.

Thanks all.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

野の 2024-09-26 01:31:16

您可以稍微延迟构建,例如 200 毫秒让动画完成,这样它就不会跳跃,但保留 .stop() 这样它仍然不会构建,如下所示:

$(function () {    
  $('#nav li').hover(function () {
     clearTimeout($.data(this, 'timer'));
     $('ul', this).stop(true, true).slideDown(200);
  }, function () {
    $.data(this, 'timer', setTimeout($.proxy(function() {
      $('ul', this).stop(true, true).slideUp(200);
    }, this), 200));
  });
});

你可以在这里尝试一下,这种方法使用 $.data() 存储每个元素的超时,以便每个菜单独立处理(如果您有的话)许多菜单项这应该会产生很好的效果。

You could build in a slight delay, say 200ms for the animation to complete so it's not jumpy, but leave .stop() so it still won't build up, like this:

$(function () {    
  $('#nav li').hover(function () {
     clearTimeout($.data(this, 'timer'));
     $('ul', this).stop(true, true).slideDown(200);
  }, function () {
    $.data(this, 'timer', setTimeout($.proxy(function() {
      $('ul', this).stop(true, true).slideUp(200);
    }, this), 200));
  });
});

You can give it a try here, this approach uses $.data() to store the timeout per element so each menu's handled independently, if you have many menu items this should give a nice effect.

殊姿 2024-09-26 01:31:16

这会在打开时增加一点延迟 - 因此快速运行它不会弹出菜单。

$(function () {    
  $('#nav li').hover(function () {
    $('ul', this).stop(true, true).delay(200).slideDown(200);
  }, function () {
    $('ul', this).stop(true, true).slideUp(200);
  });
});

This one adds a slight delay on open - so running over it quickly won't pop out the menu.

$(function () {    
  $('#nav li').hover(function () {
    $('ul', this).stop(true, true).delay(200).slideDown(200);
  }, function () {
    $('ul', this).stop(true, true).slideUp(200);
  });
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文