Flex – ResizeEvent.RESIZE的问题

我的调整大小事件有一个小问题…我自己创建了一个组件,这个组件在每个resize事件中运行一个复杂的方法.这是一个问题:当我最大化或恢复我的窗口时,这个事件在很短的时间内被叫好几次,没有足够的时间让我的方法在另一个开始之前完全运行…我想知道如果在每次调整大小运动结束时都只运行这种方法.
谢谢

解决方法

而不是对ResizeEvent进行反应,这将在调整大小期间触发每个帧(即,如果您最大化,并且组件从widh / ehight = 0重新绘制到width / height = MaxValue需要3帧),则resize事件将触发三次,你可以“看”宽度和高度的属性.
var widthWatch:ChangeWatcher = ChangeWatcher.watch(this,'widht',resizeHandler)
var heightWatch:ChangeWatcher = ChangeWatcher.watch(this,'height' resizeHandler)

实际上,这将观察属性,类似于数据绑定,并在宽度或高度变化时执行resizeHandler.如果宽度和高度同时改变,这会有一些轻微的缺点,如果宽度和高度发生变化,那么可以使用第三个函数解决这个问题,而这个函数可以在处理程序调用的时候被调用.代码

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="onCreationComplete(event)">
<mx:Script>
 <![CDATA[
  import mx.binding.utils.ChangeWatcher;

  private var widthWatch:ChangeWatcher;
  private var heightWatch:ChangeWatcher;
  private var resizeExecuting:Boolean = false;

  private function onCreationComplete(event:Event):void
  {
   widthWatch = ChangeWatcher.watch(this,'width',onSizeChange);
   heightWatch = ChangeWatcher.watch(this,'height',onSizeChange);
  }

  private function onSizeChange(event:Event):void
  {
   if(!resizeExecuting)
    callLater(handleResize);
   resizeExecuting = true;
  }

  private function handleResize():void
  {
   //do expensive work here
   resizeExecuting = false;
  }

  private function stopWatching()
  {
   //invoke this to stop watching the properties and prevent the handleResize method from executing
   widthWatch.unwatch();
   heightWatch.unwatch();
  }

 ]]>
</mx:Script>
</mx:Application>

我更喜欢更改观察器方法,因为它在宽度和高度属性已更改后触发,与在width和height属性相关更新之前触发的resize事件不同.

相关文章

一:display:flex布局display:flex是一种布局方式。它即可以...
1. flex设置元素垂直居中对齐在之前的一篇文章中记载过如何...
移动端开发知识点pc端软件和移动端apppc端软件是什么,有哪些...
最近挺忙的,准备考试,还有其他的事,没时间研究东西,快周...
display:flex;把容器设置为弹性盒模型(设置为弹性盒模型之后...
我在网页上运行了一个Flex应用程序,我想使用Command←组合键...