手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >javascript 流畅动画实现原理
javascript 流畅动画实现原理
摘要:当然考虑到浏览器(特别指IE)糟糕的js执行能力,动画效果又要受到影响。浏览器中的动画效果主要依靠js来动态改变Dom元素外观来形成。不过据...

当然考虑到浏览器(特别指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实现智能右键菜单

javascript元素动态创建实现方法

javascript常用的方法分享

javascript实现日期按月份加减

javascript实现控制的多级下拉菜单

用JavaScript实现对话框的教程

javasript实现密码的隐藏与显示

浅谈Javascript线程及定时机制

javascript常用方法总结

javascript每日必学之运算符

精品推荐
分类导航