滚动菜单中jQuery stop()的奇怪效果/闪烁

滚动菜单中jQuery stop()的奇怪效果/闪烁,jquery,Jquery,我使用jQuery滚动菜单创建了此网站: 碰巧它工作不好。请尝试将鼠标从“服务”按钮上方的空白处快速移动到图像中间。当出现条纹效果时,菜单开始“闪烁”,直到你将鼠标移出时才会停止 这是我的jQuery代码: $('#main_navi li').hover( function () { //show its submenu $('ul', this).stop(true,true).slideDown(200); }

我使用jQuery滚动菜单创建了此网站:

碰巧它工作不好。请尝试将鼠标从“服务”按钮上方的空白处快速移动到图像中间。当出现条纹效果时,菜单开始“闪烁”,直到你将鼠标移出时才会停止

这是我的jQuery代码:

$('#main_navi li').hover(
        function () {
            //show its submenu
            $('ul', this).stop(true,true).slideDown(200);
       }, 
        function () {
            //hide its submenu
            $('ul', this).stop(true,true).slideUp(200);
        }
    );

有人能告诉我为什么会这样,我能做些什么吗?我在stop()中尝试了真与假的所有组合,但都没有成功。

我无法真正确定,但在我看来,这是时间问题。当你将鼠标快速移动到菜单项上时,会发生什么情况?你的菜单项会得到mouseover事件,它会展开菜单,但在菜单展开之前,它会稍后接收mouseout事件并将其折叠,但因为鼠标现在在展开的菜单上,它会再次接收mouseover事件(在这一点上,我并不是真正的舒尔,因为看起来很奇怪,即使鼠标不移动,也会发送mouseover/out事件)。 请记住,浏览器每隔几毫秒发送一次mousemove事件,而不是针对它移动的每一个像素。同样,mousemove和-out事件也不一定在实际发生的时间发送。如果我对事件狂热的假设是正确的,应该可以通过
stop()解决
在滑梯之前,尽管你说你已经试过了。这样滑梯应该在鼠标滑出时立即缩回


Edit做了一个

谢谢你的回答!好吧,但这不是应该做的正确方式吗?否则我怎么能在jQuery中完成这个滚动菜单?你认为毫秒内的更改可以解决问题吗?这种方式没有错,我也会这样做。正如我所说的,你应该替换
 停止(true,true)
使用
stop(false,false)
或简单地使用
stop()
(两者相同,)。这样闪烁应该消失,因为菜单将很好地从鼠标输出的当前范围中收回。如果使用
stop(true,true)
你没有停止鼠标滑出时的向下滑动,这会造成所有的麻烦。如果你完全省略
stop
,它甚至可以工作。如果我只使用
stop()
子菜单在我用鼠标做了我所描述的操作后就不会再打开了。所以我只是删除了
stop()
。看看现在发生了什么……或者如果你在不同的菜单项上快速移动鼠标会发生什么。这正是我想用
stop()
方法避免的效果。我能做些什么吗?再次感谢你的帮助,我非常感谢!我制作了一个JSFIDLE(见答案),向您展示我的本意。在我看来,如果您快速进出菜单,不打开或只是部分打开菜单是完全可以的。这种情况并不经常发生。如果您打开所有悬停的菜单(我猜这就是您的意思),如果鼠标已经离开,你想如何关闭它?反复移动并不是一个令人满意的解决方案,这将削弱而不是帮助用户体验。这个解决方案正是我想要实现的,它是完美的!但当我在我的网站上尝试时,它不起作用。我想你弄错了,当我使用
stop()
在我的网站上,将鼠标快速移动到某个按钮上后,它再也不会打开其子菜单,直到我重新加载整个页面。我不明白为什么,因为我正在做示例中所做的一切,但对我来说,它不起作用…(我无法向您显示它,因为这样用户就不能再使用该网站了)