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 相关文章推荐
User Scripts: Video Download by User Scripts
May 14 Javascript
js文字滚动停顿效果代码
Jun 28 Javascript
jquery属性过滤选择器使用示例
Jun 18 Javascript
js动态创建标签示例代码
Jun 09 Javascript
JS实现一个按钮的方法
Feb 05 Javascript
JS实现数组去重复值的方法示例
Feb 18 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
Feb 22 Javascript
canvas实现环形进度条效果
Mar 23 Javascript
利用Node.js了解与测量HTTP所花费的时间详解
Sep 22 Javascript
详解VUE项目中安装和使用vant组件
Apr 28 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
Dec 10 Javascript
小程序瀑布流组件实现翻页与图片懒加载
May 19 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
php面向对象重点知识分享
2019/09/27 PHP
javawscript 三级菜单的实现原理
2009/07/01 Javascript
Javascript 验证上传图片大小[客户端]
2009/08/01 Javascript
JavaScript学习笔记(十)
2010/01/17 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
浅谈JS继承_借用构造函数 & 组合式继承
2016/08/16 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
JS实现百度网盘任意文件强制下载功能
2018/08/31 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
layui 选择列表,打勾,点击确定返回数据的例子
2019/09/02 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
[04:38]完美世界携手游戏风云打造 卡尔工作室饰品系统篇
2013/04/25 DOTA
[53:13]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-GAMING
2014/05/22 DOTA
go和python调用其它程序并得到程序输出
2014/02/10 Python
简单介绍Python中的readline()方法的使用
2015/05/24 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
Python字典及字典基本操作方法详解
2018/01/30 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
Python中的random.uniform()函数教程与实例解析
2019/03/02 Python
微信小程序python用户认证的实现
2019/07/29 Python
python 实现目录复制的三种小结
2019/12/04 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
Python MOCK SERVER moco模拟接口测试过程解析
2020/04/13 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
高中生物教学反思
2014/02/05 职场文书
《桃林那间小木屋》教学反思
2014/05/01 职场文书
书香校园建设方案
2014/05/02 职场文书
学子宴致辞大全
2015/07/27 职场文书
企业法律事务工作总结
2015/08/11 职场文书
MySQL 如何分析查询性能
2021/05/12 MySQL
python入门学习关于for else的特殊特性讲解
2021/11/20 Python