2011-10-18 1 views
3

マウスセンターは、それがバインドされているDOM内のすべての要素にマウスオーバーを伝播するようにコード化されています。jQueryでは、イベントをDOMオブジェクトに手動で伝播する方法はありますか?

質問状態と同様に、マウスイベントをバインドしたDOMとは別の要素にこの伝播を手動で適用する方法があります。

$ .stopPropagation()関数は伝播を停止しますが、applyPropagationToのような関数はありますか?ここで

はシナリオです:

は、私はdiv要素、クラス= divCONを持っていると言います。 divHOVという、身体に付加された絶対配置されたdivがあります。これは隠されています。私がdivCONにマウスを動かすと、divCON内にいるときにdivHOVが見えて、私のマウスの後に来ます。

私のマウスがdivCON内で動いているときに、マウスが動いている間にブラウザがdivHOVの位置を変更するのが遅い場合、マウスはdivHOVになる傾向があります。 divHOVのマウス・センターをdivCONに伝播して、divHOVを実行したときにmouseleaveイベントが発生しないようにします。

jsFiddle:http://jsfiddle.net/vuxcR/

注マウスがdivHOVに入ったとき、それはdivCONをmouseleaves方法。私はdivHOVを入力したときにdivCONを残していないようにしたい。

+0

DOM内にない要素にイベントをバインドするか、 'mouseenter'をどのようにバインドしていますか? –

+1

'$ obj.trigger( 'mouseover')'を実行できますか? –

+0

@Rocket:または単に '$ obj.mouseover()' – Eric

答えて

1

フィドル:http://jsfiddle.net/vuxcR/1/

ここで必要なコードです。説明のためのコメントや下を参照してください:ユーザーが初めて.divCONに入ると

$(document).ready(function() { 
    var $divCON = $(".divCON"); 
    $divCON.bind("mouseenter", function() { 

     //Cancel if this function has already run (so, if the next element 
     // has class divHOV 
     if($(this).next().hasClass('divHOV')) return; 
     $divHOV = $("<div class='divHOV'></div>"); 
     $divHOV.mousemove(function(ev){ 
      var offset = $divCON.offset(); 

      var height = $divCON.height(); 
      var width = $divCON.width(); 

      var left = offset.left; 
      var top = offset.top; 

      var bottom = top + height; 
      var right = left + width; 

      // If the mouse coordinates are within the box 
      if(ev.pageX >= left && ev.pageX <= right && 
       ev.pageY >= top && ev.pageY <= bottom){ 

       //Trigger move. 
       $divHOV.css({'top': ev.pageY - 3 + 'px', 'left': ev.pageX + 3 + 'px'}); 
      } 
     }); 
     $(this).after($divHOV); 
    }); 
    $divCON.bind("mousemove",function(e) { 
     $(".divHOV").css({'top': e.pageY - 3 + 'px', 'left': e.pageX + 3 + 'px'}); 
    }); 
}); 

.divHOVが追加されます。マウスを動かすと(下部を参照)、divHOVが再び位置決めされます。マウスが.divHOVに入ると、マウスがdivCONのボックス内にある場合、座標が再度計算されます。

マウスが.divCONに再び入ると、.divHOVが既に存在するので、関数はすぐに戻ります。if($(this).next().hasClass('divHOV')) return;

+0

こんにちは、ありがとう、私はこれを憶測している唯一の解決策です。また、マウスが入っているときにdivCONのサイズが変更された場合、mousemoveでそれを行うのはあまりにも厳しいので、いつ寸法を再計算する必要がありますか? –

+0

私はすでにそれについて考えてきました。 '.divCON'の幅/高さが固定されていれば、' mousemove'イベントの外、あるいは 'mouseenter'イベントの外でも定義を移動することは安全です。マウスが 'divHOV'に入ったときに' divHOV'が直ちに再配置されるべきであるので、 'mousemove'イベントの中で計算を続けても何の悪影響はありません。 –

関連する問題