有什么方法可以检测resizeHandlers完成时刻吗?像这样的东西:
this.addEventListener(Event.RESIZE_COMPLETE, resizeHandler);
我希望有人有办法让这成为可能,所以我可以删除我的enterframehandler:)
答案 0 :(得分:3)
基本上你需要做的是设置一个计时器,它将在最后Event.RESIZE
之后计算时间。一旦经过足够的时间(例如,50ms左右),您可以假设用户已停止连续调整舞台大小。此代码可以模拟您的需求:
private var timer:Timer;
private var resizeInterval:Number = 50; //amount of time you believe is enough to say that continuous resizing is ended after last discrete Event.RESIZE
private function init():void
{
timer = new Timer(resizeInterval);
timer.addEventListener(TimerEvent.TIMER, timerHandler);
stage.addEventListener(Event.RESIZE, resizeHandler);
}
private function resizeHandler(e:Event):void
{
if (timer.running) {
timer.reset();
}
timer.start();
}
private function timerHandler(e:Event):void
{
timer.stop();
resizeCompletehandler();
}
答案 1 :(得分:1)
Event.RESIZE
。
在某些情况下,每次用户更改浏览器窗口大小时都会触发它,有时会按间隔调度,有时会在用户释放鼠标按钮时调度。
无法知道调整大小已经完成......
答案 2 :(得分:0)
在Adobe AIR for Desktop中,此Timer模式不适用于示例timerInterval,因为调整大小事件在100ms至150ms之间触发。 timerInterval必须大于最大的典型调整大小事件间隔,才能可靠地检测到调整大小过程的结束。
这是用户调整舞台大小时的跟踪输出:
[trace] 15:02:27:128 onResize() - nativeWindows.width: 911
[trace] 15:02:27:239 onResize() - nativeWindows.width: 884
[trace] 15:02:27:358 onResize() - nativeWindows.width: 866
[trace] 15:02:27:475 onResize() - nativeWindows.width: 844
[trace] 15:02:27:593 onResize() - nativeWindows.width: 820
[trace] 15:02:27:677 onResize() - nativeWindows.width: 805
[trace] 15:02:27:762 onResize() - nativeWindows.width: 799
[trace] 15:02:27:842 onResize() - nativeWindows.width: 788
[trace] 15:02:27:935 onResize() - nativeWindows.width: 778
...
但是,跟踪输出过程本身可能会稍微污染测量结果。
我认为RESIZE事件间隔在Flash Player和AIR运行时之间可能会有所不同,因此请确保在选择resizeInterval之前先进行测试。我在AIR桌面应用中使用了250ms的时间,效果很好。
但是,如果当用户在拖动窗口后释放鼠标时AIR仅触发MOUSE_UP事件,则我们根本不需要这样做。然后,可以在第一个RESIZE事件中添加MOUSE_UP的事件侦听器,并等待用户释放鼠标捕获,但是在用户调整窗口大小后,Adobe AIR运行时不会触发阶段MOUSE_UP事件。我希望Flash Player中具有相同的行为。
谢谢您的回答。确实有效。我只是希望有更好的方法。