2009-08-30 69 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 2009-08-30 14:06:34

+0

輕微的誤解。我已經添加了我用來做類似事情的代碼。 – Glenn 2009-08-30 20:34:35

+0

您需要使用「pointTo」函數來轉換流浪事件中的共同點。例如Label控件的TextField子項。 – Glenn 2009-08-30 20:38:01