javascript 流畅动画实现原理

时间:2024-05-02 17:22:42 

当然考虑到浏览器(特别指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流行框架是如何做到的。这就是生活嘛....

标签:流畅动画
0
投稿

猜你喜欢

  • python空值判断方式(if xxx和if xxx is None的区别及说明)

    2022-04-01 20:18:42
  • Python运算符重载用法实例

    2022-11-02 11:33:20
  • 对Python的Django框架中的项目进行单元测试的方法

    2021-02-23 03:17:04
  • 使用eval()解析JSON格式字符串应注意的问题

    2008-04-16 15:46:00
  • 用Python实现一个简单的线程池

    2023-09-21 15:14:56
  • 整合ckeditor+ckfinder,解决上传文件路径问题

    2022-12-10 09:25:39
  • Python流程控制if条件选择与for循环

    2022-04-03 21:09:52
  • 解决mysql安装时出现error Nr.1045问题的方法

    2024-01-18 11:34:30
  • pytorch分类模型绘制混淆矩阵以及可视化详解

    2023-01-17 17:35:43
  • 在 Jupyter 中重新导入特定的 Python 文件(场景分析)

    2021-01-30 01:16:57
  • Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结

    2024-01-13 14:39:02
  • Python 爬虫性能相关总结

    2021-02-04 05:45:26
  • 如何用css制作有趣的按钮

    2008-03-17 13:54:00
  • python中requests库session对象的妙用详解

    2021-10-30 14:42:58
  • Python中的 ansible 动态Inventory 脚本

    2022-10-23 07:53:08
  • JavaScript函数的调用以及参数传递

    2024-04-18 10:32:30
  • 提升Python程序运行效率的6个方法

    2023-08-23 08:36:46
  • 个人从事设计行业40句观感

    2008-04-07 13:58:00
  • 在PHP程序中运行Python脚本(接收数据及传参)的方法详解

    2023-11-24 10:14:48
  • 基于Python实现对比Exce的工具

    2022-12-04 17:44:44
  • asp之家 网络编程 m.aspxhome.com