Actionscript 3 带计时器和确认框的长触摸事件,用于在AS3中部署iOS
我有一个项目,我有一个滚动列表。我希望我的用户能够“长时间触摸”列表中的一个项目,以便他们可以删除它 我正在使用FlashCS6为iOS在空中开发,所以我对iOS部署的适当多点触控手势知之甚少 在我心目中,动画的步骤我想这样走Actionscript 3 带计时器和确认框的长触摸事件,用于在AS3中部署iOS,actionscript-3,flash-cs6,Actionscript 3,Flash Cs6,我有一个项目,我有一个滚动列表。我希望我的用户能够“长时间触摸”列表中的一个项目,以便他们可以删除它 我正在使用FlashCS6为iOS在空中开发,所以我对iOS部署的适当多点触控手势知之甚少 在我心目中,动画的步骤我想这样走 当长时间触摸启动+计时器启动时,项目movieclip内先前不可见的btn_delete按钮将出现 中间步骤:btn_delete将使用TweenMax rotate旋转90度(我已经介绍过了) 最后一步:当计时器得出结论时,会弹出一个对话框/确认框,询问用户是否确定要删
如果任何人有一段代码,他们已经写了,大致符合我的标准,然后请张贴它 我只想使用
MouseEvent
来实现这一点
var timer:Timer = new Timer( 500 ); //ms
timer.addEventListener( TimerEvent.TIMER_COMPLETE, timerCompleteHandler );
listItem.addEventListener( MouseEvent.MOUSE_DOWN, mouseDownHandler );
function mouseDownHandler( e:MouseEvent ):void {
timer.start();
stage.addEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
}
function mouseUpHandler( e:MouseEvent ):void {
//just some clean up to reset the timer and remove the mouse up event listener from the stage
timer.reset();
stage.removeEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
}
function timerCompleteHandler( e:TimerEvent ):void {
timer.reset();
stage.removeEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
//do delete actions here
}
所以当鼠标按下时,你启动计时器并监听鼠标上升事件(在舞台上而不是组件上。这很重要。如果你想知道原因,请在组件上尝试并进行实验)。鼠标向上移动时,重置计时器,以便下次鼠标向下移动时,计时器从0开始(reset()还有停止计时器的额外好处)。计时器完成后,除了删除代码外,还可以执行与鼠标向上移动相同的操作
我在这里使用MouseEvent只是因为它在这个实例中的行为与TouchEvent相同(大部分情况下),并且可以在桌面上使用它(这意味着您可以在emulator中进行测试,如果需要,您可以将其添加到其他项目中)
更新:
重读你的问题,发现我错过了轮换。为此,只需添加另一个带有独立完整处理程序的计时器,在该函数中,只需旋转并重置该计时器。在我继续测试您的答案之前,您知道的
MouseEvent
和TouchEvent
之间有什么细微的区别,所以我知道在部署到iPhone时的限制?在这种情况下,我想不出有什么区别。TouchEvent为触摸设备提供了更精确的事件,但大多数情况下它们是不需要的。“开始”、“点击”和“退出”与“鼠标按下”、“单击”和“鼠标向上”几乎相同。他们被呼叫的时间可能会有所不同,但我从未测试过,所以我不能肯定地告诉你。不过,在大多数情况下,您可以坚持使用MouseEvents。好的,我已经实现了您的代码,但是当涉及到桌面的空中调试启动器时,它不会响应MOUSE_DOWN事件(?)。我已经在我的网站上压缩了我的项目,如果你能看一看,我将永远感激你!()[愚蠢的想法:我使用的是Mac,Mac触控板会有问题吗?)您只将鼠标应用于单个项目,即最后创建的项目。将事件侦听器应用于每个对象,然后在处理程序中,您可以使用事件.currentTarget
(或事件.target
)单击对象.target是最初调度事件的对象(因此它可能是列表项的子项,您不希望这样)。currentTarget是最新调度事件的对象(99%的时间是您需要的)
var timer:Timer = new Timer( 500 ); //ms
timer.addEventListener( TimerEvent.TIMER_COMPLETE, timerCompleteHandler );
listItem.addEventListener( MouseEvent.MOUSE_DOWN, mouseDownHandler );
function mouseDownHandler( e:MouseEvent ):void {
timer.start();
stage.addEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
}
function mouseUpHandler( e:MouseEvent ):void {
//just some clean up to reset the timer and remove the mouse up event listener from the stage
timer.reset();
stage.removeEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
}
function timerCompleteHandler( e:TimerEvent ):void {
timer.reset();
stage.removeEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
//do delete actions here
}