jQuery 帮助跳转滑动菜单

发布于 2024-10-21 11:16:58 字数 442 浏览 7 评论 0原文

我用 jQuery 编写了这段代码,以获得一个简单的悬停滑动菜单。它有效,但有时非常不稳定。当您在某个位置或稍快地将鼠标滑过它时,它会跳开/关闭并闪烁......不知道如何解决这个问题?

这是我当前的代码:

this.navLi = jQuery('nav ul li').children('ul').css("display","block").hide().end();
this.navLi.hover(function() {
    // mouseover
    jQuery(this).find('> ul').stop(true, true).slideDown(100);
}, function() {
    // mouseout
    jQuery(this).find('> ul').stop(true, true).slideUp(100);
});

I have this code written in jQuery to have a simple on hover slide down menu. It works, however it is sometimes very jumpy. When you slide your mouse over it at a certain spot or a bit fast, it will jump open/close and flicker...not sure how to remedy that?

Here is my current code:

this.navLi = jQuery('nav ul li').children('ul').css("display","block").hide().end();
this.navLi.hover(function() {
    // mouseover
    jQuery(this).find('> ul').stop(true, true).slideDown(100);
}, function() {
    // mouseout
    jQuery(this).find('> ul').stop(true, true).slideUp(100);
});

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

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

发布评论

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

评论(2

慕巷 2024-10-28 11:16:58

我建议您尝试 hoverIntent 插件。它对于这样的事情非常有效。

这是 jsFiddle 上的示例。它非常适合您设置代码的方式。

请注意,您的第一个选择器正在寻找标签

示例
HTML

<div id="nav">
    <ul>
        <li class="head">
            First
            <ul>
                <li>1.1</li>
                <li>1.2</li>
            </ul>
        </li>
        <li class="head">
            Second
            <ul>
                <li>2.1</li>
                <li>2.2</li>
            </ul>
        </li>

    </ul>
</div>

Javascript

jQuery(function() {
    this.navLi = jQuery('#nav ul li').children('ul').css("display","block").hide().end();
    this.navLi.hoverIntent(function() {
        // mouseover
        jQuery(this).find('> ul').slideDown(100);
    }, function() {
        // mouseout
        jQuery(this).find('> ul').slideUp(100);
    });
});

CSS

#nav, #nav ul { list-style: none; }
#nav, #nav * { padding: 0; margin: 0; }
li.head { width: 100px; float: left; border: 1px black solid; }

I recommend you try out the hoverIntent plugin. It works quite well for things like this.

Here's an example on jsFiddle. It fits quite well into how you've set up your code.

And just a note, your first selector is looking for a tag <nav> is that correct?

Example
HTML

<div id="nav">
    <ul>
        <li class="head">
            First
            <ul>
                <li>1.1</li>
                <li>1.2</li>
            </ul>
        </li>
        <li class="head">
            Second
            <ul>
                <li>2.1</li>
                <li>2.2</li>
            </ul>
        </li>

    </ul>
</div>

Javascript

jQuery(function() {
    this.navLi = jQuery('#nav ul li').children('ul').css("display","block").hide().end();
    this.navLi.hoverIntent(function() {
        // mouseover
        jQuery(this).find('> ul').slideDown(100);
    }, function() {
        // mouseout
        jQuery(this).find('> ul').slideUp(100);
    });
});

CSS

#nav, #nav ul { list-style: none; }
#nav, #nav * { padding: 0; margin: 0; }
li.head { width: 100px; float: left; border: 1px black solid; }
十六岁半 2024-10-28 11:16:58

这就是 中的 second true (参数)的效果stop 方法,来自文档:

.stop([clearQueue],[jumpToEnd])
clearQueueA 布尔值,指示是否
也可以删除排队的动画。
默认为 false。 jumpToEndA
指示是否完成的布尔值
立即播放当前动画。
默认为 false。

只需删除第二个参数,看看这是否是您想要的。

That's the effect of the second true (parameter) in the stop method, from the documentation:

.stop( [ clearQueue ], [ jumpToEnd ] )
clearQueueA Boolean indicating whether
to remove queued animation as well.
Defaults to false. jumpToEndA
Boolean indicating whether to complete
the current animation immediately.
Defaults to false.

Just remove the second parameter and see if this is what you want.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文