快速解决js动态改变dom元素属性后页面及时渲染的问题


Posted in Javascript onJuly 06, 2016

今天实现一个进度条加载过程,dom结构其实就是两个div

<div class="pbar">
 <div class="ui-widget-header" id="percent_bar" style="width: 23%;"></div>
 </div>

控制里层div的宽width属性,就能实现进度条往前走的效果。

我的进度条是显示下载文件的进度,简单实现一共100个文件的话,下载一个就1%,下载了20个就走到20%。于是代码实现如下:

var fileCount=fileList.length();
 fileList.foreach(function(i,obj){
   ........//下载文件
  document.getElementById("percent_bar").style.width=i/fileCount*100 + "%";//改变内层div的宽度
 })

但是你会看到文件一个个下载下来,但进度始终没有动一动。这是因为js逻辑会优先执行,而页面渲染会在js执行结束后才进行的,这样就无法看到一个正常的进度条了。

怎么能让js逻辑执行等一等页面渲染呢?

var i=0;
var fileCount=fileList.length();
var loop = function () {
 if(i>fileCount)//退出循环
return;
  .....//下载文件
  i++;
  document.getElementById("percent_bar").style.width=i/fileCount*100+"%";

 //下一步循环  that.loopId = window.setTimeout(loop, 0);7 }
that.loopId = window.setTimeout(loop, 0);

通过settimeout函数可以实现进度条动态效果了。

以上这篇快速解决js动态改变dom元素属性后页面及时渲染的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
Jun 27 Javascript
动态创建样式表在各浏览器中的差异测试代码
Sep 13 Javascript
12个超实用的JQuery代码片段
Nov 02 Javascript
JS实现消息来时让网页标题闪动效果的方法
Apr 20 Javascript
Js+Ajax,Get和Post在使用上的区别小结
Jun 08 Javascript
JavaScript中boolean类型之三种情景实例代码
Nov 21 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
Jan 18 Javascript
Vuex中的State使用介绍
Jan 19 Javascript
详解vue2.6插槽更新v-slot用法总结
Mar 09 Javascript
Vue开发Html5微信公众号的步骤
Apr 11 Javascript
Node.js实现批量下载图片简单操作示例
Jan 18 Javascript
游戏开发中如何使用CocosCreator进行音效处理
Apr 14 Javascript
jQuery 3.0十大新特性
Jul 06 #Javascript
Javascript 基础---Ajax入门必看
Jul 06 #Javascript
jQuery获取浏览器类型和版本号的方法
Jul 05 #Javascript
jQuery事件委托之Safari
Jul 05 #Javascript
一道优雅面试题分析js中fn()和return fn()的区别
Jul 05 #Javascript
JS实现环形进度条(从0到100%)效果
Jul 05 #Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
Jul 05 #Javascript
You might like
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
使用cookie实现统计访问者登陆次数
2013/06/08 PHP
PHP中将ip地址转成十进制数的两种实用方法
2013/08/15 PHP
php实现将Session写入数据库
2015/07/26 PHP
php session的锁和并发
2016/01/22 PHP
laravel 自定义常量的两种方案
2019/10/14 PHP
jQuery 使用手册(二)
2009/09/23 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
2013/05/17 Javascript
js计算任意值之间随机数的方法
2015/01/16 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
2019/09/26 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
Python运算符重载详解及实例代码
2017/03/07 Python
对numpy中的数组条件筛选功能详解
2018/07/02 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
python3中rank函数的用法
2019/11/27 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
2019/12/27 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
简单了解django处理跨域请求最佳解决方案
2020/03/25 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
写求职信有什么意义
2014/02/17 职场文书
教学督导岗位职责
2015/04/10 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
车间班组长竞聘书
2015/09/15 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
MySQL中使用or、in与union all在查询命令下的效率对比
2021/05/26 MySQL
Java tomcat手动配置servlet详解
2021/11/27 Java/Android