2009-08-30 7 views
0

標準のstartDrag/stopDragイベントを独自のルーチンで複製して、少し変えたいと思います。イベントの伝播やバブリングの問題が発生します。ここに私のコードです:マウスイベントでドラッグ&ドロップを複製する際の問題

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
       mouseDown="mouseDown = true" mouseUp="mouseDown = false" 
       mouseMove="mouseMove(event)"> 

    <mx:Script> 
    <![CDATA[ 
     private var mouseDown:Boolean = false; 
     private var oldMouseX:int = 0, oldMouseY:int = 0; 

     private function mouseMove(e:MouseEvent):void { 
      if (mouseDown) { 
       object.x += (e.localX - oldMouseX); 
       object.y += (e.localY - oldMouseY); 
      } 

      oldMouseX = e.localX; 
      oldMouseY = e.localY; 

      trace(e.localX); 
     } 
    ]]> 
    </mx:Script> 

    <mx:Label id="object" text="Drag me" /> 

</mx:Application> 

このコードの問題は、あなたが右にオブジェクトをドラッグすると、あなたが側からけいれんオブジェクトで、その結果、時折いくつかのランダムlocalXプロパティ値が到着したトレースに表示されるということです側に。

私はその部分を修正する方法を理解していない、私はそれがmousemoveイベントを泡立てるラベルだと思うが、それをやめる方法を理解していない。
ご意見をいただければ幸いです!

答えて

2

あなたが懸念しているターゲットを追跡し、そこから直接イベントだけを聞きます。だからあなたのmousemove関数で、e.target ==あなたのオブジェクトをチェックしてください。この場合、アプリケーション。あなたは、迷子のイベントをサブコンポーネントからバブルさせるでしょう。

​​
+0

if(e.target!= object)returnを追加する必要があります。関数の先頭に?私がそうすると、オブジェクトをまったくドラッグすることはできません。 それ以外の場合は、if(e.target!= this)returnを追加します。オブジェクトではなく背景を移動することでドラッグできます。 – melfar

+0

微妙な誤解。私は同様のことをするために使用するコードを追加しました。 – Glenn

+0

"pointTo"関数を使用して、浮遊事象からの座標を変換する必要があります。例えば、LabelコントロールのTextField子である。 – Glenn

関連する問題