js的setTimeout使用問題

作了一個錯誤提示框的功能,提示框沒法主動關閉,要求提示框出現5秒後自動消失;很天然的想到了用setTimeout來實現該功能,實現代碼:javascript

el.fadeIn(500);//淡入效果
setTimeout(function(){
  msgPanel("hiden",id);//隱藏提示框
},5000);

可是問題很快出現了,當連續提交的時候,提示框有時候會出現後很快就消失,沒有達到想要的效果,這裏從js的運行機制提及,js是單線程執行,先按順序執行完主體代碼,遇到setTimeout、鼠標點擊等事件時,加入異步隊列,主體代碼執行完後開始執行隊列中的代碼,上面的代碼在短期內屢次顯示提示框時,會出現以前的隱藏代碼隱藏最後出現的提示框,這裏但願的效果是隻隱藏最後一次出現的提示框。加入以下機制:java

在顯示提示框的時候,獲取當前時間戳,給提示框加上一個自定義屬性,代碼以下:異步

var index  = new Date().getTime();
el.attr("index",index);

隱藏提示框的時候,判斷要隱藏的提示框是否爲當前顯示的提示框:ide

el.fadeIn(500);//淡入效果
setTimeout(function(){
  var tempIndex = $("#" + id).attr("index");
  if(index == tempIndex){
    msgPanel("hiden",id);//隱藏提示框
  }
},5000);

這樣就能達到想要的效果了。線程

相關文章
相關標籤/搜索