当物品在顶部或底部边缘附近药物时,如何自动滚动VBox?

时间:2009-12-30 16:23:45

标签: flex actionscript drag-and-drop scroll

我有一个包含一堆面板的VBox。我已经实现了拖放,但是我需要能够在物品靠近边缘药物时自动滚动。我的结果好坏参半。我可以让它工作,但不是很好。我的例子如下。如果用户将鼠标靠近顶部或底部边缘稍微弹跳,它就可以工作,但如果他们只是将鼠标放在那里,我希望它可以正常工作。有什么建议吗?

On Mouse down(我正在做其他几件事,但这是其中之一):

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

在dragDrop上

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

这是autoScroll功能:

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 个答案:

答案 0 :(得分: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));

它有效,但感觉有点像黑客。我欢迎任何更好的建议。