[英]How to detect mouseleave() on two elements at once?
答案可以是vanilla js或jQuery。 如果用戶不再懸停在ID為“myLink”的鏈接或ID為“mySpan”的范圍內,我想隱藏ID為“myDiv”的div。 如果用戶將鼠標懸停在任一元素上,“myDiv”仍將顯示,但第二個用戶不會將鼠標懸停在兩者之一(用戶的鼠標首先離開哪個元素無關緊要)“myDiv”將從臉部消失存在
換句話說,這是我在一個元素上檢測鼠標離開的方式:
$('#someElement').mouseleave(function() {
// do something
});
但怎么說(以某種方式實際工作):
$('#someElement').mouseleave() || $('#someOtherElement').mouseleave()) {
// do something
});
怎么檢測到這個?
這樣的事情應該有效:
var count = 0;
$('#myLink, #mySpan').mouseenter(function(){
count++;
$('#myDiv').show();
}).mouseleave(function(){
count--;
if (!count) {
$('#myDiv').hide();
}
});
您可以使用多重選擇器 :
$("#someElement, #someOtherElement").mouseleave(function() {
// Do something.
});
雖然lonesomeday的答案是完全有效的,但我改變了我的html,將兩個元素放在一個容器中。 我本來想避免這種情況,因此我不得不在其他html模板中為我的客戶做更多的重構,但我認為它會在長期內付出代價。
<div id="my-container">
<div class="elem1">Foo</div>
<div class="elem2">Bar</div>
</div>
$('#my-container').mouseleave(function() { console.log("left"); });
你可以精美地使用setTimeout()
來給mouseleave()
函數一些“容差”,這意味着如果你離開div但在給定的時間內重新輸入其中一個,它就不會觸發hide()
函數。
這是代碼(添加到lonesomeday的答案):
var count = 0;
var tolerance = 500;
$('#d1, #d2').mouseenter(function(){
count++;
$('#d3').show();
}).mouseleave(function(){
count--;
setTimeout(function () {
if (!count) {
$('#d3').hide();
}
}, tolerance);
});
我想,這是你的解決方案!
$(document).ready(function() {
var someOtherElement = "";
$("#someElement").hover(function(){
var someOtherElement = $(this).attr("href");
$(someOtherElement).show();
});
$("#someElement").mouseleave(function(){
var someOtherElement= $(this).attr("href");
$(someOtherElement).mouseenter(function(){
$(someOtherElement).show();
});
$(someOtherElement).mouseleave(function(){
$(someOtherElement).hide();
});
});
});
----
html
----
<div id="someElement">
<ul>
<li><a href="#tab1">element1</a></li>
<li><a href="#tab2">element2</a></li>
</ul>
</div>
<div id="tab1" style="display: none"> TAB1 </div>
<div id="tab2" style="display: none"> TAB1 </div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.