2

以这个片段为例,如何在鼠标光标离开下拉菜单区域后自动隐藏下拉菜单?

Amazon.com 就是一个很好的例子。如果您将鼠标悬停在“按部门购物”上,然后将光标移开,并在约 0.5 秒内将其移回,下拉菜单仍然可见。

引导片段https ://bootsnipp.com/snipps/user-preferences-in-nav-bar

我想我可以做一个setTimeout,但它会隐藏它,即使我决定在这 2 秒内将光标移回下拉列表。也许我可以清除setTimeout鼠标悬停来克服这个问题?

在这种情况下,人们通常会做什么?

4

2 回答 2

3

您需要附加var x = setTimeout('hideme()',2000)mouseout 事件并取消clearTimeout(x)mousein 回调

于 2013-06-29T19:52:06.130 回答
1

另一个建议...

用函数处理悬停,里面有元素和事件。所以你知道你什么时候在 mouseenter 什么时候在 mouseleave 上。您可以使用函数属性来保存计时器,并在需要时将其清除。

http://jsfiddle.net/blackjim/jw7Uz/3/

var handleHover = function(evObj){
    var $this = $(this);

    if(!$this.hasClass('open')){
        return true;
    }

    if(evObj.type === 'mouseleave'){
        //    on mouseleave...
        handleHover.timer = setTimeout(function(){
            $this.removeClass('open');
        },2000);

    } else if(evObj.type === 'mouseenter'){
        //    on mouseenter...
        if(handleHover.timer){    //    find timer and clear it
            clearTimeout(handleHover.timer);
            delete handleHover.timer;
        }
    }
};


$('#myDropDown').hover(handleHover);
于 2013-06-29T20:10:50.763 回答