2012-02-23 9 views
2

私は何かをドラッグする機能を持っています。私のjs:mouseupイベントは常に発生するわけではありません

$(function() { 
     $(svgcanv).css('cursor', '-moz-grab'); 

     var leftButtonDown = false; 
     $(document).mousedown(function(e){ 
      console.log('pressed'); 
      // Left mouse button was pressed, set flag 
      if(e.which === 1) leftButtonDown = 1; 
     }); 

     $(document).mouseup(function(e){ 
      console.log('released'); 
      // Left mouse button was released, clear flag 
      leftButtonDown = 0; 
      $(svgcanv).css('cursor', '-moz-grab'); 
      firstDragCanvas = 1; 
     }); 

     $(mainGroup).mousemove(function(e){ 
      if (leftButtonDown == 1) 
      { 
       $(svgcanv).css('cursor', '-moz-grabbing'); 
       var posX = e.pageX; 
       var posY = e.pageY; 
       if (firstDragCanvas == 0) 
       { 
        posX = e.pageX - canvasPosX; 
        posY = e.pageY - canvasPosY; 
       } 
       else 
       { 
        canvasPosX = e.pageX - translateX; 
        canvasPosY = e.pageY - translateY; 
        posX = translateX; 
        posY = translateY; 
        firstDragCanvas = 0; 
       } 

       if (posX > 0) 
        posX = 0; 

       if (posX < -canvasWidth + $("#holder").width()) 
        posX = -canvasWidth + $("#holder").width(); 

       translateX = posX; 
       translateY = posY; 

       mainGroup.setAttribute("transform","translate("+posX+","+posY+") scale("+currentZoomLevel+")");      
      } 
     });    
    }); 

問題は、mouseupイベントが常にトリガされるとは限りません。他の2つはうまく動作します。初めて物事を動かすとすべて正常に動作します。しかし、私がすぐに押してドラッグすると、マウスアップがトリガーされません。ドラッグを停止したら、どこかをクリックしてから再度ドラッグしてスクリプトを再実行します。

enter image description here

をそして、いや...それはSVGです: -

マイコンソール(マウスダウンからログイン2ドラッグして、その後、2連続で「押す」の文字列を気づく再びドラッグして、[OK]をクリックします)その中にドラッグする必要があるので、jQueryをドラッグすることはできません。

答えて

5

e.preventDefault();を追加してください。 デフォルトのUAアクティビティを防止するイベントメソッド。

など。

$(document).mousedown(function(e){ 
    e.preventDefault(); 
    console.log('pressed'); 
    // Left mouse button was pressed, set flag 
    if(e.which === 1) leftButtonDown = 1; 
}); 

のように...

+0

は一度だけのイベントの前に必要とされています。私は答えの前に2分でそれを考え出した。 – zozo

関連する問題