JQuery下拉,保持向下,同时将鼠标悬停在下拉列表上

时间:2010-07-15 14:57:13

标签: javascript jquery html drop-down-menu

我设置了一个完美的jquery下拉菜单。当用户滚动链接时,它会下降。问题是,当用户滚动下拉菜单的内容区域时,它会向上滑动。我需要设置代码,以便当用户的光标仍在其上时,滑动框保持在向下位置。

这是我的HTML:

<ul id="tabnav"> 
<li class="tab2"><a href="index2.html" class="btn-slide">My Leases</a></li> 
</ul>   

<div id="leases"> 
<!-- slide down content here --> 
</div>

JS触发器:

<script type="text/javascript"> 
$(document).ready(function(){
  $(".btn-slide").hover(function(){
    $("#leases").slideToggle("medium");
    $(this).toggleClass("active"); 
    return false;
  });
});
</script>

有什么想法吗?

编辑:以下是相关网页的链接:http://designvillain.com/testbed/600/601.html

3 个答案:

答案 0 :(得分:2)

.hover()绑定两个事件,mouseenter和mouseleave。

我会改为使用.btn-slide上的mouseenter()和.leases上的mouseleave()

$(function()
{    
    $(".btn-slide").mouseenter(function(){ 
        $("#leases").slideToggle("medium"); 
        $(this).toggleClass("active");
    });
    $("#leases").mouseleave(function(){
      $(".btn-slide").toggleClass("active");
      $(this).slideToggle("medium"); 
    });
});

编辑:注意,如果鼠标从不进入#leases div,它将无法获得mouseleave,您可能需要考虑这一点。

EDIT2:修复我的不良手指输入功能

答案 1 :(得分:2)

我不确定这是不是你想要的,但我会把它放在这里。在向上滑动#leases之前等待500毫秒,并且仅在适当时

var isMousedOver;

var hideDropdown = function(a) {
        setTimeout( function() {
            if (isMousedOver) return;
            $("#leases").slideUp("medium");
            $(a).removeClass("active");
        }, 500);
}

$(".btn-slide").hover(
    function(){
        $("#leases").stop(true,true).slideDown("medium");
        isMousedOver = true;
        $(".btn-slide").removeClass("active");
        $(this).addClass("active");
        var that = this;
        $("#leases").data("mouseoutfn", function() { hideDropdown(that) });
    },
    function(){
        isMousedOver = false;
        hideDropdown(this);
    }
);

$("#leases").hover(
    function() {
        isMousedOver = true;
    },
    function() {
        isMousedOver = false;
        $(this).data("mouseoutfn")();
    }
);

以下是演示:http://jsfiddle.net/mMRZc/

答案 2 :(得分:0)

我认为div在页面加载时是隐藏的,你希望它显示在你将鼠标悬停在链接上时?将切换更改为向下...

$(document).ready(function(){
$("#leases").hide();
$(".btn-slide").hover(function(){
    $("#leases").slideDown("medium");
    $(this).toggleClass("active"); 
return false;
});
});

是否需要在某个时候退回?