1ページにたくさんの画像があり、次を使用してイベントをトリガーしています:
$('.img').on('mouseover', function() {
//do something
});
ユーザーがおそらく1秒間ホバーすると、「//何かをする」か、実際に「マウスオーバー」イベントをトリガーするように遅延を追加する方法はありますか?
1ページにたくさんの画像があり、次を使用してイベントをトリガーしています:
$('.img').on('mouseover', function() {
//do something
});
ユーザーがおそらく1秒間ホバーすると、「//何かをする」か、実際に「マウスオーバー」イベントをトリガーするように遅延を追加する方法はありますか?
使用できますsetTimeout
var delay=1000, setTimeoutConst;
$('.img').on('hover', function() {
setTimeoutConst = setTimeout(function() {
// do something
}, delay);
}, function() {
clearTimeout(setTimeoutConst);
});
ユーザーがあまりにも早く去った場合、 asetTimeout
とともに aを使用してそれを行うことができます。clearTimeout
var timer;
var delay = 1000;
$('#element').hover(function() {
// on mouse in, start a timeout
timer = setTimeout(function() {
// do your stuff here
}, delay);
}, function() {
// on mouse out, cancel the timer
clearTimeout(timer);
});
タイマーを使用し、1000 ミリ秒以内にマウスを離したときにタイマーをクリアします
var timer;
$('.img').on({
'mouseover': function () {
timer = setTimeout(function () {
// do stuff
}, 1000);
},
'mouseout' : function () {
clearTimeout(timer);
}
});
私もこのようなものを探していましたが、二次的な遅れもありました。ここで答えの1つを取り、それを拡張しました
この例では、マウスオーバーの X 秒後に div を表示し、マウスアウトの X 秒後に非表示にします。ただし、表示されている div にカーソルを合わせると無効になります。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<style type="text/css">
.foo{
position:absolute; display:none; padding:30px;
border:1px solid black; background-color:white;
}
</style>
<h3 class="hello">
<a href="#">Hello, hover over me
<span class="foo">foo text</span>
</a>
</h3>
<script type="text/javascript">
var delay = 1500, setTimeoutConst,
delay2 = 500, setTimeoutConst2;
$(".hello").mouseover(function(){
setTimeoutConst = setTimeout(function(){
$('.foo').show();
},delay);
}).mouseout(function(){
clearTimeout(setTimeoutConst );
setTimeoutConst2 = setTimeout(function(){
var isHover = $('.hello').is(":hover");
if(isHover !== true){
$('.foo').hide();
}
},delay2);
});
</script>