1. 程式人生 > >js迴圈中延遲幾秒執行下一段程式碼

js迴圈中延遲幾秒執行下一段程式碼

原因:由於js程式碼執行策略是幾段程式碼可以同時執行,而不是先等上一句執行完再執行下一句。
原理:假設有兩段程式碼需要先走執行,先執行程式碼片段1再執行程式碼片段2。那麼程式碼2必須在程式碼1中執行。


專案場景:ajax獲得了多條提示資訊,需要頁面逐一自定義彈框顯示出來,這個時候如果使用for迴圈並且在for迴圈中提示,那麼只要第一條提示資訊還沒彈出完js就會跑下一次迴圈,導致幾條提示資訊一起彈出,影響效果。
如:for(i=0;i<data.length;i++){
alterTip("提示資訊");//此方法不是alert,而是通過在在頁面新增元素並做出彈框效果
}

這個時候幾個alterTip一起彈出。



解決方法:
$(function(){
getData()


});
var tipsTimes = 0;
var tipslength = 0;
var result;
var tips;
function getData(){
$.ajax({
url:/integral/getData.do,
success:function(data){
if(data.hasData==true){
tips = eval('data.tips');
tipslength = tips.length;
result = tips[0].split(",");
alterTip

(result[1],result[0]);//觸發函式
}
}
});
}


function alterTip(data1,data2){
$('body').append('<div class="alertlayer"><section class="content123">+'+data1+'<br/>'+data2+'</section></div>');
tipsTimes += 1; //記錄迴圈次數
if(tipsTimes == tipslength){
return;
}else{
var result2 = tips[tipsTimes];
setTimeout(function(){alterTip
(result2.split(",")[1],result2.split(",")[0])}, 1000);//在此處延遲1秒再執行下一段程式碼塊(調自己)
}
}