我有一个包含一堆面板的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。为了产生影响,我夸大了数字。
答案 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));
它有效,但感觉有点像黑客。我欢迎任何更好的建议。