我試圖讓鼠標懸停在某個元素上一段時間後出現一個菜單。如果您將鼠標懸停在此元素上,但在設定的時間之前彈出鼠標,菜單將不會顯示。這個想法是防止用戶在快速移動鼠標時偶然激活菜單。激活定時鼠標懸停後的彈出式菜單,然後在鼠標懸停後取消激活
默認情況下,我的CSS中的菜單設置爲display:none;
。然後,當他們成功地徘徊足夠長的時間,我想補充一類.active
將其設置顯示器block.
我的問題是,一旦鼠標懸停在元素足夠長的時間(在我的測試情況下,我已經將它設置爲1秒),將鼠標移到新顯示的菜單上作爲鼠標移動,我就失去了菜單。我曾假設,因爲菜單是我聽到的元素的一個子元素,它仍然算作元素上的元素。我猜錯了!
Amazon.com's main menu是我試圖實現的一個很好的例子。
這是我的HTML。
<div id="drop-nav-trigger">
Menu
<div class="drop-nav">
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</div>
</div>
這裏是我的javascript。我有一些jQuery混亂在那裏改變我的菜單類。
var timeoutId = null;
var el = document.getElementById("drop-nav-trigger");
/* Activate menu after a delay. */
el.addEventListener('mouseover',function() {
timeoutId = window.setTimeout(function(){
$(".drop-nav").addClass("active");
}, 1000);
});
// Cancel action if mouse moved out within 2 sec
el.addEventListener('mouseout',function() {
window.clearTimeout(timeoutId);
$(".drop-nav").removeClass("active");
});
這裏是一個codepen:http://codepen.io/jimmykup/pen/EVYbWx