簡単な解決策は、要素を共通のコンテナーにネストし、マウス イベントをそのコンテナーにアタッチすることです。
<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)
);
}
});
フィドル