Heres how I solved it:
[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();
}
}
Then changed the calls in mouse down and drag drop to this respectively
autoScrollSection(true,VBox(di.parent));
autoScrollSection(false,VBox(evt.currentTarget.parent));
It works, but feels like a bit of a hack. I welcome any better suggestions.
--- In [email protected], "invertedspear" <invertedsp...@...> wrote:
>
>
>
> I have a VBox containing a bunch of panels. I have implemented dragging and
> dropping but I need to be able to scroll automatically when the item is drug
> near the edge. I am having mixed results. I can get it to work, but not well.
> My example is below. It works if the user bounces their mouse around a little
> near the top or bottom edge, but I want it to work if they just hold the
> mouse there. Any suggestions?
>
> On Mouse down (I'm doing several other things but this is one of them):
>
> VBox(di.parent).addEventListener(MouseEvent.MOUSE_MOVE,autoScrollSection,true,500);
>
> On dragDrop
>
> VBox(evt.currentTarget.parent).removeEventListener(MouseEvent.MOUSE_MOVE,
> autoScrollSection,true);
>
> Here is the autoScroll function:
>
> 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;
> }
> }
>
> So if they are within 50px of an edge then it should scroll by 50px. I've
> exaggerated the numbers just to get an affect.
>