2011-12-13 5 views
1

私は、キャンバスのdivでマウスをクリックすると選択マーキーボックスを作成するプラグインを作成しています。これまでのところ、click()mousemove()というイベントをコードに入れてプラグインを作成しました(他のイベントの中にイベントを埋め込む方法はわかりません)。しかし、これは、マウスがクリックの前にキャンバス上を移動するときに問題になります。誰でもクリックでmousemoveハンドラを初期化する方法を知っていますか?クリック後のみmousemoveイベントを初期化する

$.fn.createBox = function(id) { 
     $(id).css({ 
      cursor:'crosshair' 
     }); 

     $(id).click(function(e) { 
      var clickLocX = e.pageX; 
      var clickLocY = e.pageY; 
      $('<div>').attr({ 
       'class':'newBox', 
       'ctr':'on' 
      }) 
      .css({ 
       top:clickLocY, 
       left:clickLocX 
      }) 
      .appendTo(id); 
     }); 
     //Mousemove must be initialized only AFTER the click. HOW TO DO THIS? 
     $(id).mousemove(function(e){ 
      var XpageCoord = e.pageX; 
      var YpageCoord = e.pageY; 
       window.Xloc = XpageCoord; 
       window.Yloc = YpageCoord; 
      var boxOffset = $('.newBox').offset(); 
      var boxHeight = YpageCoord - boxOffset.top; 
      var boxWidth = XpageCoord - boxOffset.left; 

      $('.newBox').css({ 
       height:boxHeight + 'px', 
       width:boxWidth + 'px' 
      }); 
     }); 
    } 

答えて

2

ちょうどclickハンドラ内からmousemoveハンドラを設定し、すでに追加しないように設定されているかどうかを判断するためのフラグを使用します。ここでは

は私がこれまでに書いたコードですそれは複数回です。

EDIT:例

assignedMoveHandler = false; 
$(id).click(function(e) { 
    // other stuff... 
    if(!assignedMoveHandler) { 
     $(id).mousemove(function(e) { 
      // mouse move handling code...     
     }); 
     assignedMoveHandler = true; 
    } 
} 

は、私はあなたがまたはそれを少しクリーンアップすることができるよう、私は、など、二回jQueryオブジェクトをルックアップを気にしてもしなくてもよい、ここでグローバルを使用しますが、この一般的な考えです。 clickハンドラが起動すると、まだmousemoveハンドラが割り当てられているかどうかを確認します。そうでない場合は、割り当てます。

+0

@Ed_S - あなたは何を意味するのかを教えていただけますか?それは多くの助けになるでしょう。 – dopatraman

+0

@コーデニンジャー:さて、そこに行くよ。私は一般的にjqueryやWeb開発の専門家ではありませんが、ここでは一般的な概念が適用されます。ハンドラを一度だけ割り当て、クリック後に割り当てます。 –

+0

@Ed_S .-- Ok、明確にするために: 'assignedMoveHandler'は関数ですか?またはjqueryオブジェクト?私はまだ一種の迷子なので、仮説的な例を使うことができますか? – dopatraman

関連する問題