萤火虫动画,一段时间后浏览器会变慢
Firefly animation, browser gets slower after a while
我正在查看Greenstock的演示。你可以看到结果是一个萤火虫动画,不幸的是,时间越长,浏览器就越慢。即使设置为总共15-30个点。
有没有什么有效的方法可以阻止脚本以某种方式积累?
function RN(x){
return Math.random()*x;
}
var total = 100 ;
var w = window.innerWidth;
var h = window.innerHeight;
var target = document.getElementById('container');
for (i=0; i<total; i++){
var e = document.createElement('div');
e.className = "dot";
e.opacity = 0;
e.style.left = RN(w)+'px';
e.style.top = RN(h)+'px';
target.appendChild(e);
animm(e);
}
function animm(elm){
TweenMax.killTweensOf(elm);
TweenMax.to(elm, (RN(80))+40, {
bezier:{
curviness:3,
values:[
{left:RN(w), top:RN(h)},
{left:RN(w), top:RN(h)}
]
},
onComplete:function(){
TweenMax.delayedCall(RN(2), animm, [elm]);
}
});
TweenMax.to(elm, (RN(4)+2),{
force3D:true,
opacity:RN(.7)+.1,
repeat:-1,
scale:RN(1.25)+.25,
yoyo:true,
ease:Bounce.easeInOut
});
};
http://codepen.io/maelfyn/pen/GgRLbg
只为X和Y属性制作动画,这对浏览器渲染来说很便宜,而不是左右。X和Y不会触发布局的重新计算。最好的解决方案是在CPU和GPU之间适当地重新分配内存使用。使用CSS3动画/转换,它使用GPU而不是CPU(javascript动画标准使用CPU)。
浏览器处理得很好如果暂时将速度更改为3,则可以看到动画速度越来越慢,因为在开始下一个动画之前,点最终会朝着它们的最终目的地静止。
TweenMax.to(elm, 3, {
bezier:{
curviness:3,
values:[
{left:RN(w), top:RN(h)},
{left:RN(w), top:RN(h)}
]
}
您应该尝试使用各种设置,以使点在整个动画中具有更均匀的速度。
相关文章:
- 萤火虫动画,一段时间后浏览器会变慢
- 当浏览器下载所需的文件时,GIF 在初始屏幕中缓慢制作动画
- 奇怪的jquery在不同的浏览器中动画行为
- 鼠标离开时悬停和反向的跨浏览器动画 gif
- 如何显示 .toggle 或 .使用 Meteor 对所有连接的浏览器会话进行动画处理
- jQuery动画在FF中运行良好,但在所有其他浏览器中效果不佳
- JavaScript 动画在 iOS Safari Webkit 浏览器中停止,当手指在屏幕上而不抬起时
- 使网络工具包动画在非网络工具包浏览器上工作
- 如何使用jQuery在移动网络浏览器上设置滚动动画
- 适用于浏览器的红心坠落动画
- Mozilla Firefox或除Chrome以外的其他浏览器的缩放动画
- 跨浏览器背景Y位置动画
- 使用snap.svg IE和EDGE网络浏览器快速悬停,放大/缩小动画
- 调整EaselJS动画的大小,同时'It’It’s播放时不会放慢浏览器的速度
- 跨浏览器JavaScript(不是jQuery...)滚动到顶部动画
- 浏览器滚动条动画性能
- Javascript动画:IE vs其他浏览器
- 在所有主流浏览器中,GIF动画和javascript在同一个线程上运行,这是真的吗?
- CSS3动画在除Chrome以外的所有浏览器中工作
- 谷歌气泡图:如何使用浏览器+动画