1

有什么方法可以检测到 resizeHandlers 的完成时刻吗?像这样的东西:

this.addEventListener(Event.RESIZE_COMPLETE, resizeHandler);

我希望有人有办法让这成为可能,所以我可以删除我的 enterframehandler :)

4

3 回答 3

3

基本上你需要做的是设置一个计时器,它会在 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();
}
于 2012-06-13T12:57:23.063 回答
1

Event.RESIZE根据浏览器/操作系统调度。

在某些情况下,每次用户更改浏览器窗口大小时都会触发它,有时会间隔调度,有时会在用户释放鼠标按钮时调度。

没有办法知道调整大小已经完成......

于 2012-06-13T12:41:44.300 回答
0

在 Adob​​e 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 添加事件侦听器,并等待用户释放鼠标捕获,但 Adob​​e AIR 运行时不会在用户调整窗口大小后触发阶段 MOUSE_UP 事件。我希望在 Flash Player 中有相同的行为。

谢谢,包为您的回答。它确实有效。我只是希望有更好的方法。

于 2018-10-16T17:13:05.833 回答