javascript - 我简单的 jquery 下拉功能有问题和故障

标签 javascript jquery css drop-down-menu

我正在尝试创建一个简单的 jquery 下拉函数,它可以让我在悬停在菜单元素上时显示信息 block 。在这一点上,如果您将鼠标悬停得太快,我到目前为止所做的就会出现错误和故障。此外,下拉菜单似乎仅在将鼠标悬停在元素上而不是在其子元素上时保持可见。

也许有人可以快速查看代码并建议如何实现某种标志,这样菜单就不会轻易消失,也不会在多次鼠标悬停时出现故障。

你可能会问为什么我不用纯 css 来做,不幸的是我需要旧浏览器的支持并且更喜欢将它包装成一个函数。

jsbin: http://jsbin.com/inedoy/1

代码如下:

<!DOCTYPE html>
<html class="no-js">
<head>
<meta charset="utf-8">

<style>
    body {margin:60px; font-family: sans-serif; font-size:12px;}
    ul {margin:0;padding:0;} 
    ul li {
        position:relative;
        list-style-type: none;
        padding:5px 0;
        border-bottom:1px solid #ddd;
    }
    .dropdown {
        display:none;
        position:absolute;
        width:200px;
        border:1px solid #ddd;
        padding:20px;
        top:40px;
        left:0;
    }
</style>
</head>
<body>

<ul>
    <li class="drop">Some link
        <div class="dropdown">
            <ul>
                <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
                <li>Aliquam tincidunt mauris eu risus.</li>
                <li>Vestibulum auctor dapibus neque.</li>
                <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
                <li>Aliquam tincidunt mauris eu risus.</li>
                <li>Vestibulum auctor dapibus neque.</li>
                <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
                <li>Aliquam tincidunt mauris eu risus.</li>
                <li>Vestibulum auctor dapibus neque.</li>
            </ul>

        </div>
    </li>
</ul>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<script>

dropdown('.drop','.dropdown');

function dropdown(hoverElement,toShow){ 
    $(hoverElement).hover(function(){                       
        $(toShow).stop().slideDown();                   
    },function(){       
        setTimeout(function(){
            $(toShow).stop().hide();    
        },300);     
    });
}
</script>

</body>
</html>

最佳答案

一个技巧是当鼠标还在里面时重置计时器,当鼠标在外面时启动计时器。

$(function() {
  var myTimer;
  $(document).on("mouseenter", ".drop", function() {
    parent = this;

    // Close the other dropdowns except this one..
    $(".drop").not(parent).find(".dropdown").hide();

    // Show dropdown
    $(".dropdown", parent).show();

    // Clear the timer so it doesnt close.
    clearTimeout(myTimer);

   }).on("mouseleave", ".drop", function() {
    parent = this;

    // Start the timer
    myTimer = setTimeout(function(){
        $(".dropdown").hide();
    },560)
  });
});

演示:http://jsbin.com/inedoy/42/

关于javascript - 我简单的 jquery 下拉功能有问题和故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12840042/

相关文章:

javascript - 如何在html中在小屏幕上显示图像和在大屏幕上显示视频

javascript - 单击 d3 中的 svg 文本在鼠标位置上打开 div

html - 将div拉伸(stretch)成固定宽度的div

javascript - 如何在具体情况下停止隐藏下拉内容?

javascript - jQuery 的 jsfiddle 示例不适用于 jQuery 代码

javascript - Geocomplete 在 Rails 5 中不起作用

javascript - 使用 focusout 和 focusin 以及 Click 事件时无法检测按钮按下情况

javascript - 动态行创建影响其他创建的下拉值 Angular 6

javascript - 如果已选择,则禁用选择选项

asp.net - 压缩 CSS 的 IIS 内容类型错误