画布动画效果不佳.我能做什么
Canvas animation doesnt work fluently. What can i do?
由于我为电荷随机不透明度值添加了o: Math.random()*(1 - 0.1) + 0.1 //opacity
,因此动画无法正常工作。我能做些什么来防止这种情况发生?如何使我的剧本更有效地与表演相关?
window.onload = function () {
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var W = canvas.width = window.innerWidth;
var H = 550;
var mp = 45; //max particles
var particles = [];
//var rotate = 180;
reqAnimFrame = window.requestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.msRequestAnimationFrame ||
window.oRequestAnimationFrame;
for ( var i = 0; i < mp; i++ )
{
particles.push({
x: Math.floor(Math.random()*W), //x-coordinate
y: Math.floor(Math.random()*H), //y-coordinate
d: Math.floor(Math.random()*(12 - 1) + 1), //density
r: Math.floor(Math.random()*(70 - 10) + 10), //radius
o: Math.random()*(1 - 0.1) + 0.1 //opacity
})
}
function animate() {
reqAnimFrame(animate);
for ( var i = 0; i < mp; i++ )
{
var p = particles[i];
p.x += p.d;
if(p.x >= W + p.r){
p.x = -300;
p.y = Math.floor(Math.random()*H);
}
draw();
}
}
function draw() {
ctx.clearRect(0, 0, W, H);
for ( var i = 0; i < mp; i++ )
{
var p = particles[i];
ctx.fillStyle = "rgba(51,51,51," + p.o + ")";
ctx.beginPath();
ctx.arc(p.x, p.y, p.r, 0, Math.PI * 2, false);
ctx.fill();
//ctx.moveTo(p.x,p.y);
//ctx.lineTo(p.x + 150, p.y + (-180));
//ctx.lineTo(p.x + 300, p.y);
}
}
animate();
};//onload function
我制作jsfiddles one
和two
。
在第一小提琴中并没有closePath
函数调用,在第二小提琴中它调用。
在第一小提琴devtools时间线显示额外的内存使用7 MB每秒(在你的情况下,调用CG 1秒后,IMHO):从10 MB到17 MB
在次要时间线中,显示从beginPath
到closePath
函数的额外内存使用量2MB(接近130ms):从10MB到12MB。但在这种情况下,CG不会打电话。
我认为最好添加closePath
函数,以防止GC调用。旧浏览器使用较少的粒子数,因为对我来说(MacBook Pro、Chrome)一切都很好,fps为60(最高)。
您在更新循环中为每个粒子调用draw一次,这会导致mp*mp成本而不是mp成本
首先要做的是每个粒子只调用draw一次,所以不要在更新循环中调用它,而是在更新结束时只调用一次。
请注意,您可以通过更改上下文的globalAlpha而不是创建新颜色来获得一些性能。
相关文章:
- 画布动画效果不佳.我能做什么
- 什么'这就是GSAP高性能动画的秘密
- 为D3.js动画编写绑定的正确方法是什么
- 无论在Google Chrome中做什么,Jquery都不会动画化
- 什么's是为网页编写动画标题的最有效方法
- brush.event 在对画笔事件进行动画处理时会做什么
- 什么是对列表重新排序进行动画处理.js反应友好方式
- CSS动画填充模式-我做错了什么
- 这个jquery动画函数有什么问题
- 应该为“容器”元素和“动画”元素分配什么位置属性?HTML CSS JavaScript.
- 使用svg.js设置位置动画的正确方法是什么
- 有没有什么简单的方法可以让fancybox 2的动画从左到右而不是从上到下?
- 脚本只会最后一个文本和最后一个颜色,但会按照指示进行动画,发生了什么?
- 我的javascript鼠标滚轮动画代码有什么问题?
- 处理SVG动画的最佳方法是什么?
- 什么是最好的方式来创建饼状图和其他动画动态信息图形
- 动画帧在什么时间
- 什么是JpegMini使用动画的图像比较在主页上
- 在web应用程序中创建动画的基础是什么?
- 动画位置时,使用js不工作,我需要使用什么