下面小編就為大家?guī)?lái)一篇快速解決js動(dòng)態(tài)改變dom元素屬性后頁(yè)面及時(shí)渲染的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。
今天實(shí)現(xiàn)一個(gè)進(jìn)度條加載過(guò)程,dom結(jié)構(gòu)其實(shí)就是兩個(gè)div
<div class="pbar">
<div class="ui-widget-header" id="percent_bar" style="width: 23%;"></div>
</div>
控制里層div的寬width屬性,就能實(shí)現(xiàn)進(jìn)度條往前走的效果。
我的進(jìn)度條是顯示下載文件的進(jìn)度,簡(jiǎn)單實(shí)現(xiàn)一共100個(gè)文件的話,下載一個(gè)就1%,下載了20個(gè)就走到20%。于是代碼實(shí)現(xiàn)如下:
var fileCount=fileList.length();
fileList.foreach(function(i,obj){
........//下載文件
document.getElementById("percent_bar").style.width=i/fileCount*100 + "%";//改變內(nèi)層div的寬度
})
但是你會(huì)看到文件一個(gè)個(gè)下載下來(lái),但進(jìn)度始終沒(méi)有動(dòng)一動(dòng)。這是因?yàn)閖s邏輯會(huì)優(yōu)先執(zhí)行,而頁(yè)面渲染會(huì)在js執(zhí)行結(jié)束后才進(jìn)行的,這樣就無(wú)法看到一個(gè)正常的進(jìn)度條了。
怎么能讓js邏輯執(zhí)行等一等頁(yè)面渲染呢?
var i=0;
var fileCount=fileList.length();
var loop = function () {
if(i>fileCount)//退出循環(huán)
return;
.....//下載文件
i++;
document.getElementById("percent_bar").style.width=i/fileCount*100+"%";
//下一步循環(huán) that.loopId = window.setTimeout(loop, 0);7 }
that.loopId = window.setTimeout(loop, 0);
通過(guò)settimeout函數(shù)可以實(shí)現(xiàn)進(jìn)度條動(dòng)態(tài)效果了。
以上這篇快速解決js動(dòng)態(tài)改變dom元素屬性后頁(yè)面及時(shí)渲染的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考