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 相关文章推荐
web 页面分页打印的实现
Jun 22 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
Aug 04 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
Nov 18 Javascript
Angular实现form自动布局
Jan 28 Javascript
原生js图片轮播效果实现代码
Oct 19 Javascript
如何实现json数据可视化详解
Nov 24 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
Feb 13 Javascript
JavaScript对象引用与赋值实例详解
Mar 15 Javascript
解决vue单页面修改样式无法覆盖问题
Aug 05 Javascript
vue实现手机号码的校验实例代码(防抖函数的应用场景)
Sep 05 Javascript
Node.js API详解之 tty功能与用法实例分析
Apr 27 Javascript
vue 把二维或多维数组转一维数组
Apr 24 Vue.js
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
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
jquery选择器(常用选择器说明)
2010/09/28 Javascript
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
用C/C++来实现 Node.js 的模块(一)
2014/09/24 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
jquery实现左右滑动菜单效果代码
2015/08/27 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
2016/10/21 Javascript
JavaScript利用Date实现简单的倒计时实例
2017/01/12 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
Vue数据双向绑定底层实现原理
2019/11/22 Javascript
vue实现随机验证码功能(完整代码)
2019/12/10 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
[45:34]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.18
2020/12/19 DOTA
Python中使用dom模块生成XML文件示例
2015/04/05 Python
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
Python+PIL实现支付宝AR红包
2018/02/09 Python
python实现定时提取实时日志程序
2018/06/22 Python
TensorFlow Session使用的两种方法小结
2018/07/30 Python
通过cmd进入python的实例操作
2019/06/26 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
设置jupyter中DataFrame的显示限制方式
2020/04/12 Python
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
联谊活动策划书
2014/01/26 职场文书
高三霸气励志标语
2014/06/24 职场文书
公司年底活动方案
2014/08/17 职场文书
运动会搞笑广播稿
2014/10/14 职场文书
红色电影观后感
2015/06/18 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
Python中非常使用的6种基本变量的操作与技巧
2022/03/22 Python