2010-04-08 61 views
0

我正在跟蹤textArea文本的更改速度。如果它變化的速度超過500毫秒,那麼我不想做任何事情,但如果它在500毫秒內沒有改變,我想調用一個方法。 我想是這樣的:彈性文本更改事件

public function textchangeListener(e : Event):void 
     { 
      if(((new Date).getTime() - changeTime)>500) 
      { 
       prepareText(); 
      } 

      changeTime = (new Date).getTime(); 
     } 

此方法是改變文本的事件處理程序。 但問題是,如果它只在500毫秒以下更改,並且之後它不會更改,那麼我的方法將不會被調用。爲了獲得更好的性能,我們只准當用戶停止輸入500毫秒時才調用prepareText()。

回答

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 
} 
0

我會在事件處理程序使用setTimeout和重置每次它改變:

var changeTimeout:Number = -1 
function handler(e:Event):void { 
    if(changeTimeout != -1) 
     clearTimeout(changeTimeout) 
    changeTimeout = setTimeout(function():void{ 
     changeTimeout = -1 
     prepareText(); 
    }, 500) 
} 
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(); 

     }