有什么方法可以检测到 resizeHandlers 的完成时刻吗?像这样的东西:
this.addEventListener(Event.RESIZE_COMPLETE, resizeHandler);
我希望有人有办法让这成为可能,所以我可以删除我的 enterframehandler :)
有什么方法可以检测到 resizeHandlers 的完成时刻吗?像这样的东西:
this.addEventListener(Event.RESIZE_COMPLETE, resizeHandler);
我希望有人有办法让这成为可能,所以我可以删除我的 enterframehandler :)
基本上你需要做的是设置一个计时器,它会在 last 之后计算时间Event.RESIZE
。一旦经过了足够长的时间(例如 50 毫秒左右),您就可以假设用户已经停止连续调整舞台大小。此代码可以模拟您需要的内容:
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();
}
Event.RESIZE
根据浏览器/操作系统调度。
在某些情况下,每次用户更改浏览器窗口大小时都会触发它,有时会间隔调度,有时会在用户释放鼠标按钮时调度。
没有办法知道调整大小已经完成......
在 Adobe AIR for Desktop 中,此 Timer 模式不适用于示例 timerInterval,因为调整大小事件在 100 毫秒到 150 毫秒之间触发。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 桌面应用程序中确定了 250 毫秒,它运行良好。
但是,如果 AIR 只是在用户拖动窗口后释放鼠标时触发 MOUSE_UP 事件,我们根本不必这样做。然后可以在第一个 RESIZE 事件中为 MOUSE_UP 添加事件侦听器,并等待用户释放鼠标捕获,但 Adobe AIR 运行时不会在用户调整窗口大小后触发阶段 MOUSE_UP 事件。我希望在 Flash Player 中有相同的行为。
谢谢,包为您的回答。它确实有效。我只是希望有更好的方法。