0

へー!

私はここで頭がおかしいかもしれませんが、これを理解することはできません。

javascript で基本的な hover() 関数を使用して水平メニューを作成しています。アンカーを離れると、ホバー効果が消える前に短いタイムアウトがあります。

だから私がやりたいこと: アンカーの ID の後にタイムアウトに名前を付けます。ここで、mouseenter で正しいタイムアウトを再び停止するために、マウスリーブがトリガーされます。

Mouseenter で、ID を取得してホバーしているアンカーを確認し、この ID のタイムアウトをキャンセルして、ホバーしたアンカーに hvr-Class を追加します。

var t = $(this).attr('id');
clearTimeout(t);
$(this).addClass('hvr');

そしてMouseleaveでは、基本的にこれをやりたい:

$(this).attr('id') = setTimeout('doSoemthing()',66);

しかし、式は = の左側では許可されていないため、エラーが発生します。私は次のようなことを考えました:

var ts = $(this).attr('id');
ts = setTimeout('doSoemthing()',66);

しかし、変数 t を上書きするだけなので、それも機能しません。代わりに、タイムアウト名の変数の値を「印刷」したいと思います。固定のタイムアウト名を使用した場合、すべてが魅力的に機能しますが、リンクごとに (同じ) タイムアウトが 1 つしかないため、それは行われません。

これを行う方法はありますか?それとも私はトラックから外れていますか?

それは完全な機能です:

$("nav a").hover(

  function(){

  // On MouseEnter
    var t = $(this).attr('id');
    clearTimeout(t);
    $(this).addClass('hvr');

  },function(){

  // On MouseLeave
    $(this).attr('id') = setTimeout(function(){doSomethingHere},66);

  }

);

よろしくお願いします。

4

1 に答える 1

1

私が理解したことから、ホバーされた要素に基づいてタイムアウトイベントへの参照を保持する必要があります.data()を使用してそれを行うことができます

あなたが探しているのは

$("nav a").hover(function () {
    clearTimeout($(this).data('mltimer'));
    $(this).addClass('hvr');
}, function () {
    var timer = setTimeout('doSoemthing()', 66);
    $(this).data('mltimer', timer)
});
于 2013-10-01T09:11:46.387 に答える