快速解決js動(dòng)態(tài)改變dom元素屬性后頁面及時(shí)渲染的問題
今天實(shí)現(xiàn)一個(gè)進(jìn)度條加載過程,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)度,簡單實(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è)下載下來,但進(jìn)度始終沒有動(dòng)一動(dòng)。這是因?yàn)閖s邏輯會(huì)優(yōu)先執(zhí)行,而頁面渲染會(huì)在js執(zhí)行結(jié)束后才進(jìn)行的,這樣就無法看到一個(gè)正常的進(jìn)度條了。
怎么能讓js邏輯執(zhí)行等一等頁面渲染呢?
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);
通過settimeout函數(shù)可以實(shí)現(xiàn)進(jìn)度條動(dòng)態(tài)效果了。
以上這篇快速解決js動(dòng)態(tài)改變dom元素屬性后頁面及時(shí)渲染的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript實(shí)現(xiàn)郵箱后綴提示功能的示例代碼
這篇文章主要介紹了JavaScript實(shí)現(xiàn)郵箱后綴提示功能的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12JavaScript面向?qū)ο蟮某绦蛟O(shè)計(jì)(犯迷糊的小羊)
這篇文章主要介紹了JavaScript面向?qū)ο蟮某绦蛟O(shè)計(jì)(犯迷糊的小羊),需要的朋友可以參考下2018-05-05JavaScript遍歷數(shù)組的三種方法map、forEach與filter實(shí)例詳解
這篇文章主要介紹了JavaScript遍歷數(shù)組的三種方法map、forEach與filter,結(jié)合實(shí)例形式詳細(xì)分析了javascript針對數(shù)組遍歷的map、forEach與filter三種方法相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-02-02JS端基于download.js實(shí)現(xiàn)圖片、視頻時(shí)直接下載而不是打開預(yù)覽
這篇文章主要介紹了JS端基于download.js實(shí)現(xiàn)圖片、視頻時(shí)直接下載而不是打開預(yù)覽,需要的朋友可以參考下2020-05-05