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 相关文章推荐
js获取单选按钮的数据
Nov 27 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
Apr 26 Javascript
WEB前端设计师常用工具集锦
Dec 09 Javascript
基于jQuery实现中英文切换导航条效果
Sep 18 Javascript
vue.js初学入门教程(2)
Nov 07 Javascript
JavaScript ES6中export、import与export default的用法和区别
Mar 14 Javascript
JavaScript实现计数器基础方法
Oct 10 Javascript
使用vue-infinite-scroll实现无限滚动效果
Jun 22 Javascript
解决vue axios的封装 请求状态的错误提示问题
Sep 25 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
May 16 Javascript
解决vue打包后vendor.js文件过大问题
Jul 03 Javascript
JavaScript实现前端网页版倒计时
Mar 24 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
mysql5写入和读出乱码解决
2006/11/25 PHP
php 静态变量与自定义常量的使用方法
2010/01/26 PHP
php文件上传你必须知道的几点
2015/10/20 PHP
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
js关闭当前页面(窗口)的几种方式总结
2013/03/05 Javascript
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
jQuery自动切换/点击切换选项卡效果的小例子
2013/08/12 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
2015/08/24 Javascript
js实现常用排序算法
2016/08/09 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
原生JS控制多个滚动条同步跟随滚动效果
2017/12/22 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
javascript实现简易数码时钟
2020/03/30 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
[02:40]2018年度DOTA2最佳新人-完美盛典
2018/12/16 DOTA
wxpython学习笔记(推荐查看)
2014/06/09 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
python 哈希表实现简单python字典代码实例
2019/09/27 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
学习python需要有编程基础吗
2020/06/02 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
大学校园生活自我鉴定
2014/01/13 职场文书
品德评语大全
2014/05/05 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
2014年居委会工作总结
2014/12/09 职场文书
逃课检讨书怎么写
2015/01/01 职场文书
安全保证书格式
2015/02/28 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
花田少年史观后感
2015/06/16 职场文书