javascript 流畅动画实现原理


Posted in Javascript onSeptember 08, 2009

当然考虑到浏览器(特别指IE)糟糕的js执行能力,动画效果又要受到影响。
浏览器中的动画效果主要依靠js来动态改变Dom元素外观来形成。不过据说css正在修炼这方面的能力哦。(拭目以待^_^)
我们需要周期性的改变dom元素的外观,这个周期性就要依靠setTimeout()和setInterval()来完成。
它们2个哪一个更好点呢 见这里 (是jquery的作者写的一个文章)
我个人比较偏向setInterval,setTimeout需要用递归调用而且在线程很忙的情况下会延时,这会影响流畅性。
通常我们会利用node.style的属性动态赋值,来更新页面表现,大家都知道每次的调用页面都会重绘。
还有一种同时改变多个属性的情况如下:
.......
node.style.height = 'value1',
node.style.width = 'value2',
node.style.top = value3"
......
这种情况下,
一个动画物体在每一格的运动中,页面会重绘3次,当属性越多每次重绘越多。
在ff,chrome中没有问题,但在ie中无可避免的出现闪烁现象。
如果可以把每一格动画,作为一次重绘就会好很多。
在ff下我们可以setAtrribute("style",objStyle);一次跟新多个属性。
但在ie下style是只读的,任何试图赋值都会让ie很生气并且,完全不鸟你。
这时候有个所有浏览器都支持的属性cssText就可以解决这个问题,
style.cssText接受内嵌格式的style的字符串,并且可以高效的同时重绘多个属性。
所以,我们可以把动画元素的多个属性利用cssText同时跟新,而不是用style.prop一个个的跟新。
如: node.cssText = "heigth:100px;width:100px;top:100px";
当然,动画的流畅还有以下注意点:
1.setInterval的实践证明,10是极限值,未来不一定,但现在一定不要设置小于10,不然浏览器会累死的。
2.把动画路径的所有值全部求出后,在用setInterval去定时更新,重绘元素的过程中不要有复杂计算。
3.还有就是完成一个动画一共有多少步,要和setInterval的时间参数,相互调节到最佳状态;
4.关于有多少步的算法,flash中有成熟的tween算法,google一下就有了,当然也可以自己实现。
最后,我觉得如果对js动画效果很感兴趣话,还犹豫什么,去动手一步步实现一个自己的"影片"吧,乐趣就在其中哦。
当遇到实现问题的时候,再去看看js流行框架是如何做到的。这就是生活嘛....

Javascript 相关文章推荐
JSON 教程 json入门学习笔记
Sep 22 Javascript
jQuery EasyUI 中文API Button使用实例
Apr 14 Javascript
菜鸟javascript基础资料整理3 正则
Dec 06 Javascript
ko knockoutjs动态属性绑定技巧应用
Nov 14 Javascript
Javascript selection的兼容性写法介绍
Dec 20 Javascript
javascript 3d 逐侦产品展示(核心精简)
Mar 26 Javascript
在JavaScript中判断整型的N种方法示例介绍
Jun 18 Javascript
jquery实现二级导航下拉菜单效果
Dec 18 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
Jul 06 Javascript
vue表单数据交互提交演示教程
Nov 13 Javascript
javascript实现倒计时效果
Feb 17 Javascript
javascript设计模式 ? 代理模式原理与用法实例分析
Apr 16 Javascript
javascript 定义初始化数组函数
Sep 07 #Javascript
javascript十个最常用的自定义函数(中文版)
Sep 07 #Javascript
javascript 获取select下拉列表值的代码
Sep 07 #Javascript
Javascript中的var_dump函数实现代码
Sep 07 #Javascript
jquery tools系列 expose 学习
Sep 06 #Javascript
jquery tools 系列 scrollable(2)
Sep 06 #Javascript
jquery tools 系列 scrollable学习
Sep 06 #Javascript
You might like
摘自织梦CMS中的图片处理类
2015/08/08 PHP
PHP基于单例模式实现的数据库操作基类
2016/01/15 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
2016/05/16 PHP
PHP实现文件下载【实例分享】
2017/04/28 PHP
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
2013/12/04 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
jQuery结合CSS制作动态的下拉菜单
2015/10/27 Javascript
点评js异步加载的4种方式
2015/12/22 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
vue router导航守卫(router.beforeEach())的使用详解
2019/04/19 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
vue 表单输入框不支持focus及blur事件的解决方案
2020/11/17 Vue.js
Python while 循环使用的简单实例
2016/06/08 Python
Python引用传值概念与用法实例小结
2017/10/07 Python
Django框架教程之正则表达式URL误区详解
2018/01/28 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
法律专业自我鉴定
2013/10/03 职场文书
信息技术教学反思
2014/02/12 职场文书
工商干部先进事迹
2014/05/14 职场文书
具结保证书
2015/01/17 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
情况说明书怎么写
2015/10/08 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript
SQL IDENTITY_INSERT作用案例详解
2021/08/23 MySQL
CSS中妙用 drop-shadow 实现线条光影效果
2021/11/11 HTML / CSS
JavaCV实现照片马赛克效果
2022/01/22 Java/Android