ネストされたメニューで作業しています。マウスをオプションの上に移動すると、サブリストが表示されます。これが私のホバー機能です:
$( ".sublist" ).parent().hover( function () {
$(this).toggleClass("li_hover",300); //use to change the background color
$(this).find(".sublist").toggle("slide", {}, 500); //sub list show / hide
});
ここで、サブリストが表示される前に短い期間を追加して、クレイジーなマウスがユーザーから移動するのを防ぎます。誰かがこれについて良い提案をしていますか?
アップデート:
みなさん、ありがとうございます。プログラムを少し変更しました。最近は次のようになります。
function doSomething_hover (ele) {
ele.toggleClass("li_hover",300);
ele.find(".sublist").toggle("slide", {}, 500);
}
$(function () {
$( ".sublist" ).parent().hover( function () {
setTimeout(doSomething_hover($(this)), 3000);
});
}):
setTimeout が何も遅延しないのは奇妙です。しかし、関数呼び出しをdoSomething_hover
("()" なしで) に変更すると、関数の遅延が大きくなります。しかし、私はjquery要素を関数に渡すことができないので、まだ機能しませdoSomething_hover($(this))
んsetTimeout
。
更新 2: setTimeout の作業が完了しましたが、それは私が望むものではないようです: 私が正確に望んでいるのは、マウスが 0.5 秒未満のオプションにホバーした場合、何も起こらないことです。
とにかく、これが私がsetTimeoutを機能させるコードです:
function doSomething_hover (ele) {
ele.toggleClass("li_hover",300);
ele.find(".sublist").toggle("slide", {}, 500);
}
$(function () {
$( ".sublist" ).parent().hover( function () {
var e = $(this);
setTimeout(function () { doSomething_hover(e); }, 1000);
});
}):
最終更新: マウスを離したときに clearTimeout を使用して、この作業を行いました。したがって、コードは次のようになります。
$( ".sublist" ).parent().mouseover( function () {
var e = $(this);
this.timer = setTimeout(function () { doSomething_hover(e); }, 500);
});
$( ".sublist" ).parent().mouseout ( function () {
if(this.timer){
clearTimeout(this.timer);
}
if($(this).hasClass("li_hover")){
$(this).toggleClass("li_hover");
}
$(this).find(".sublist").hide("slide", {}, 500);
});
これは の部分$(document).ready()
です。その他のコードは上記と同じです。
真。最終更新:マウスをサブリストに移動すると、親のイベントが発生し、サブリストが非表示になるmouseover
ため、バグが発生することがあります。関数を使用して問題を解決できます。mouseout
mouseover
hover
$( ".sublist" ).parent().hover(
function () {
var e = $(this);
this.timer = setTimeout(function () { doSomething_hover(e); }, 500);
},
function () {
if(this.timer){
clearTimeout(this.timer);
}
$(this).find(".sublist").hide("slide", {}, 500);
if($(this).hasClass("li_hover")){
$(this).toggleClass("li_hover",300);
}
}
);
皆さんありがとう