2009-12-30 69 views
0

我有一個VBox包含一堆面板。我已經實現了拖放功能,但是當物品靠近邊緣時,我需要能夠自動滾動。我有不同的結果。我可以讓它工作,但不好。我的例子如下。如果用戶在靠近頂部或底部邊緣的地方稍微彈一下鼠標,它就會起作用,但如果他們只是在那裏握住鼠標,我希望它能夠工作。有什麼建議麼?當物品靠近頂部或底部邊緣時,如何自動滾動VBox?

在鼠標按下(我做其他一些事情,但是這是其中之一):

VBox(di.parent).addEventListener(MouseEvent.MOUSE_MOVE,autoScrollSection,true,500); 

上的DragDrop

VBox(evt.currentTarget.parent).removeEventListener(MouseEvent.MOUSE_MOVE, autoScrollSection,true); 

這裏是自動滾動功能:

private function autoScrollSection(evt:MouseEvent):void{ 
    var tempVBox:VBox = VBox(evt.currentTarget); 
    if(tempVBox.mouseY<50){ 
     tempVBox.verticalScrollPosition += -50; 
    } 
    if(tempVBox.mouseY> int(tempVBox.height-50)){ 
     tempVBox.verticalScrollPosition += +50; 
    } 
} 

所以,如果他們在50px的邊緣內,那麼它應該滾動50px。爲了得到一個影響,我誇大了數字。

回答

1

我繼承人如何解決它:

[Bindable] public var timer:Timer = new Timer(50); 
private function autoScrollSection(active:Boolean,cont:VBox):void{ 
    if(active){ 
     timer.addEventListener(TimerEvent.TIMER,function():void{ 
      if(cont.mouseY<50){ 
       cont.verticalScrollPosition += -20; 
      } 
      if(cont.mouseY> int(cont.height-50)){ 
       cont.verticalScrollPosition += +20; 
      } 
     }) 
     timer.start(); 
    }else{ 
     timer.stop(); 
    } 
} 

然後分別

autoScrollSection(true,VBox(di.parent)); 
autoScrollSection(false,VBox(evt.currentTarget.parent)); 

它的工作原理,但感覺就像一個黑客位的改變在按下鼠標和拖放調用了這一點。我歡迎任何更好的建議。

相關問題