我的调整大小事件有点问题......我自己创建了一个组件,这个组件在每个调整大小事件中运行一个复杂的方法。这是问题:当我最大化或恢复我的窗口时,这个事件在很短的时间内被调用了几次,没有让我的方法有足够的时间在另一个开始之前完全运行......我想知道如果无论如何只在每次调整大小移动结束时运行此方法。
谢谢
最佳答案
而不是对 ResizeEvent 使用react,它将在调整大小期间触发每一帧(即,如果您点击最大化并且组件从宽度/高度 = 0 重绘到宽度/高度 = MaxValue 需要 3 帧)然后调整大小事件将触发三次,您可以“观察”宽度和高度的属性。
var widthWatch:ChangeWatcher = ChangeWatcher.watch(this, 'widht', resizeHandler)
var heightWatch:ChangeWatcher = ChangeWatcher.watch(this, 'height' resizeHandler)
实际上,这将监视属性,类似于数据绑定(bind),并在宽度或高度发生变化时执行您的 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>
我更喜欢 change watcher 方法,因为它在宽度和高度属性更改后触发,这与在宽度和高度属性正确更新之前触发的调整大小事件不同。
关于apache-flex - Flex - ResizeEvent.RESIZE 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2119389/