如果鼠标在元素上和离开元素时快速移动,则防止 .hover 事件被发送垃圾邮件
Preventing .hover event from being spammed if the mouse is quickly moved on and off the element
我已经实现了一个简单的弹出窗口,如果鼠标移到某个元素上就会出现,但是,我可以通过 运行 我的鼠标移动和关闭来引发一系列 .hover
事件元素迅速。我的意思是,即使我不再移动鼠标,弹出窗口也会多次出现和消失。这与 CSS :hover
规范形成对比,后者无论鼠标在元素上移动多少次都只触发一次。
如何复制此功能?我在下面包含了我的意思的示例,请尝试将鼠标快速移入和移出框以查看效果。
jQuery(document).ready( function($) {
$('#hover').hover( function(event) {
$('.popup').fadeIn( 200 );
}, function(event) {
$('.popup').fadeOut( 200, function() {
$(this).hide();
});
});
});
.popup {
width: 200px;
height: 75px;
color: white;
background-color: black;
display: none;
}
.hover-box {
margin-top: 100px;
width: 200px;
height: 100px;
background-color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="popup">
Hello, I am a popup!
</div>
<div id="hover" class="hover-box">
Hover over me!
</div>
您可以使用 setTimeout 函数稍微延迟显示效果,并在 mouseout
事件上清除超时。像这样:
jQuery(document).ready( function($) {
$('#hover').hover( function(event) {
clearTimeout($(this).data('timeout'));
$(this).data('timeout', setTimeout(function() {
$('.popup').fadeIn( 200 );
}, 300));
}, function(event) {
clearTimeout($(this).data('timeout'));
$('.popup').fadeOut( 200, function() {
$(this).hide();
});
});
});
.popup {
width: 200px;
height: 75px;
color: white;
background-color: black;
display: none;
}
.hover-box {
margin-top: 100px;
width: 200px;
height: 100px;
background-color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="popup">
Hello, I am a popup!
</div>
<div id="hover" class="hover-box">
Hover over me!
</div>
我已经实现了一个简单的弹出窗口,如果鼠标移到某个元素上就会出现,但是,我可以通过 运行 我的鼠标移动和关闭来引发一系列 .hover
事件元素迅速。我的意思是,即使我不再移动鼠标,弹出窗口也会多次出现和消失。这与 CSS :hover
规范形成对比,后者无论鼠标在元素上移动多少次都只触发一次。
如何复制此功能?我在下面包含了我的意思的示例,请尝试将鼠标快速移入和移出框以查看效果。
jQuery(document).ready( function($) {
$('#hover').hover( function(event) {
$('.popup').fadeIn( 200 );
}, function(event) {
$('.popup').fadeOut( 200, function() {
$(this).hide();
});
});
});
.popup {
width: 200px;
height: 75px;
color: white;
background-color: black;
display: none;
}
.hover-box {
margin-top: 100px;
width: 200px;
height: 100px;
background-color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="popup">
Hello, I am a popup!
</div>
<div id="hover" class="hover-box">
Hover over me!
</div>
您可以使用 setTimeout 函数稍微延迟显示效果,并在 mouseout
事件上清除超时。像这样:
jQuery(document).ready( function($) {
$('#hover').hover( function(event) {
clearTimeout($(this).data('timeout'));
$(this).data('timeout', setTimeout(function() {
$('.popup').fadeIn( 200 );
}, 300));
}, function(event) {
clearTimeout($(this).data('timeout'));
$('.popup').fadeOut( 200, function() {
$(this).hide();
});
});
});
.popup {
width: 200px;
height: 75px;
color: white;
background-color: black;
display: none;
}
.hover-box {
margin-top: 100px;
width: 200px;
height: 100px;
background-color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="popup">
Hello, I am a popup!
</div>
<div id="hover" class="hover-box">
Hover over me!
</div>