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 相关文章推荐
javascript学习随笔(使用window和frame)的技巧
Mar 08 Javascript
javascript 屏蔽鼠标键盘的几段代码
Jan 02 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
Mar 01 Javascript
JavaScript实现动画打开半透明提示层的方法
Apr 21 Javascript
基于OL2实现百度地图ABCD marker的效果
Oct 01 Javascript
理解AngularJs指令
Dec 10 Javascript
JavaScript中0和""比较引发的问题
May 26 Javascript
vue.js声明式渲染和条件与循环基础知识
Jul 31 Javascript
JavaScript中的E-mail 地址格式验证
Mar 28 Javascript
npm全局模块卸载及默认安装目录修改方法
May 15 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
Apr 30 Javascript
vue子传父关于.sync与$emit的实现
Nov 05 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
极典R601SW收音机
2021/03/02 无线电
php数组函数序列之array_values() 获取数组元素值的函数与方法
2011/10/30 PHP
php 团购折扣计算公式
2011/11/24 PHP
PHP中批量生成静态html(命令行下运行PHP)
2014/04/19 PHP
PHP简单实现无限级分类的方法
2016/05/13 PHP
PHP实现微信商户支付企业付款到零钱功能
2018/09/30 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
jquery dialog键盘事件代码
2010/08/01 Javascript
用jquery和json从后台获得数据集的代码
2011/11/07 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
vuejs父子组件通信的问题
2017/01/11 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
2017/12/23 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
2019/01/08 jQuery
关于vue组件事件属性穿透详解
2019/10/28 Javascript
python正则分组的应用
2013/11/10 Python
Python的Django中django-userena组件的简单使用教程
2015/05/30 Python
Python实例一个类背后发生了什么
2016/02/09 Python
python getopt详解及简单实例
2016/12/30 Python
Python处理文本文件中控制字符的方法
2017/02/07 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
Python使用selenium + headless chrome获取网页内容的方法示例
2019/10/16 Python
Python编译成.so文件进行加密后调用的实现
2019/12/23 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
Python request操作步骤及代码实例
2020/04/13 Python
css3实现垂直下拉动画菜单示例
2014/04/22 HTML / CSS
泰国汽车、火车和轮渡票预订网站:Bus Online Ticket
2017/09/09 全球购物
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
厂区绿化方案
2014/05/08 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
大学生入党自荐书
2015/03/05 职场文书
博物馆观后感
2015/06/05 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书