设置1400个Raphael.js对象的不透明度动画会影响动画性能

Animating opacity of 1400 Raphael.js objects hurts animating performance

本文关键字:动画 影响 性能 不透明度 1400个 Raphael js 对象 设置      更新时间:2023-09-26

首先,感谢您的帮助。:)

JSFiddle代码。

JSFiddle全屏

正如你可以从上面的小提琴链接中看到的,我正在为1400个对象设置动画,试图创建一个"闪烁效果"。随着用户移动鼠标的速度越来越快,更多的六边形会突然变为完全不透明度,并具有不同的淡出率。小提琴中的版本用足够的颜色填充了空间,但感觉不连贯和笨拙。如果我减少fade_time变量的数量,它会更平滑,但没有足够的完全不透明度的六边形。最终目标是用六边形拼写单词。

Chrome的性能最好,FireFox和IE的性能较差。我在iPad上的移动游戏中测试了(使用Raphael的element.touchmove),结果更糟。

我正在寻找任何关于哪些代码可以用不同的方式来提高性能的建议。

我看到了别人给出的这个答案,这个答案本应该有助于提高性能,但我正试图根据光标的移动来制作六边形的动画,我不确定用计时器能不能做到这一点。

这个答案提到使用画布:

一个好的选择是使用Canvas来绘制元素。根据我的实验,它在绘制这么多动画时会比SVG更快,尽管如果你使用一些动画,它们将比RaphaelJS库更难实现。

对人们来说,这似乎是一条更好的途径吗,即使有代码正在使用的动画?

这是我第一次使用Raphael.js。一般来说,我对js不是很有经验,所以任何帮助都是神童!

编辑:编辑:此外,看到这个关于.resize被调用的次数比提问者想象的要多的答案,我想知道.mousemoove函数是否会被调用的时间(比我需要的要多)比我预期的要多。

我认为它会阻塞"重叠"动画,例如:

  1. 6号六边形开始褪色
  2. 在其褪色一半时,另一个褪色开始

我添加了一条stop()指令,以避免出现意外结果。

此外,for()循环不会检查是否有另一个动画正在进行,也不会检查某个十六进制是否在循环内被随机选择了两次或两次以上。作为解决方法,我添加了一个向量来缓存正在设置动画的六边形的索引,尽管这似乎没有太大帮助。

要查看它保存了多少(无用的)动画,请取消对最后一个console.log()的注释。

此外,您的getRandomInt()函数生成了一些未定义的索引错误(因为您的数组索引从0到1399,并且它返回了0到1400之间的整数……我更改了它。

请在此处查看我的附加组件:http://jsfiddle.net/rz4yY/46/