简单的解决方案是将元素嵌套在一个公共容器中,并将鼠标事件附加到该容器:
<div id="container">
<img id="login-trigger" src="image.png" />
<div id="login-box">
<!-- login stuff -->
</div>
</div>
并且只使用css:
#container #login-box {display:none;}
#container:hover #login-box {display:block;}
或 javascript
$('#container').on('mouseenter mouseleave', function(e) {
$('#login-box')[e.type=='mouseenter'?'slideDown':'slideUp']('slow');
});
如果这不可能,您必须在触发器和盒子上都使用超时和事件处理程序,这有点复杂。
$('#login-trigger, #login-box').on({
mouseenter: function(e) {
if (e.target.id == 'login-trigger') $('#login-box').slideDown('slow');
clearTimeout( $('#login-box').data('timer') );
},
mouseleave: function() {
$('#login-box').data('timer',
setTimeout(function() {
$('#login-box').slideUp('slow')
}, 300)
);
}
});
小提琴