我正在跟踪textArea文本的更改速度。如果它变化超过500毫秒然后我不想做任何事情,但如果它在500毫秒内没有改变,我想调用一个方法。 我试过这样:
public function textchangeListener(e : Event):void
{
if(((new Date).getTime() - changeTime)>500)
{
prepareText();
}
changeTime = (new Date).getTime();
}
此方法是文本更改的事件处理程序。 但问题是,如果它只在500毫秒内改变,之后它不会改变,那么我的方法将不会被调用。我这样做是为了获得更好的性能,所以只有当用户停止输入500毫秒时才会调用prepareText()。
答案 0 :(得分:1)
这个怎么样......
获得第一个文本更改事件后,您可以调用类似textTimeOut()的过程。它基本上会像这样工作。
function textTimeOut():void
{
start a timer for 500 ms
set an event listener for it (your prepareText() function)
if textTimeOut is called again before the timer gets to 0,
reset the timer to 500 ms
}
答案 1 :(得分:0)
我会在事件处理程序中使用setTimeout,并在每次更改时重置它:
var changeTimeout:Number = -1
function handler(e:Event):void {
if(changeTimeout != -1)
clearTimeout(changeTimeout)
changeTimeout = setTimeout(function():void{
changeTimeout = -1
prepareText();
}, 500)
}
答案 2 :(得分:0)
所以我用了一个计时器。感谢您的建议。这就是最终结果:
protected var timer:Timer = new Timer(300);
public function AdvancedTextArea()
{
super();
this.addEventListener(Event.CHANGE,textchangeListener);
timer.addEventListener(TimerEvent.TIMER,prepareText);
timer.repeatCount = 1;
}
public function textchangeListener(e : Event):void
{
if(timer.running)
{
timer.stop();
}
timer.start();
}