0
我怎么可以优化该程序代码来渲染,而不当画布重新drawen优化帆布动画(正弦曲线)
var canvas = document.getElementById("sinewave");
var points = {};
var counter = 0;
var intensity = 0;
function f(x, intensity) {
return intensity * Math.sin(0.25 * x) + 100;
}
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
ctx.strokeStyle = '#fff';
ctx.lineWidth = 2;
var x = 0,
y = f(0,0);
var timeout = setInterval(function() {
if(counter < 400) {
ctx.beginPath();
ctx.moveTo(x, y);
x += 1;
y = f(x, intensity);
points[x] = y;
ctx.lineTo(x, y);
ctx.stroke();
if (x > 1000) {
clearInterval(timeout);
}
} else {
ctx.clearRect(0, 0, 400, 200);
ctx.beginPath();
points[x] = y;
x += 1;
y = f(x, intensity);
for(var i = 0; i < 400; i++) {
ctx.lineTo(i, points[i + counter - 400]);
}
ctx.stroke();
}
counter++;
}, 5);
}
太神奇了! 谢谢,也会友好的建议如何通过方程来限制函数的高度? 因此,即使在100000强度下也不会高于帆布高度 – Leg0
不客气!最大/最小正弦值是1.00和-1.00。因此,从你的f()开始反向工作:minIntensity = 100,maxIntensity = canvas.height-100。如果你想使用这些最小/最大值以外的值,你将不得不缩放强度值(这也会使你的波形倾斜,因为你的x值每次计算前进1个像素。 – markE