【发布时间】:2014-03-27 01:03:32
【问题描述】:
我有一个名为 generateNoise() 的函数,它创建一个画布元素并为其绘制随机 RGBA 值;这会产生噪音。
我的问题
什么是无限动画噪声以产生运动外观的最佳方法。让它有更多的生命?
function generateNoise(opacity) {
if(!!!document.createElement('canvas').getContext) {
return false;
}
var canvas = document.createElement('canvas'),
ctx = canvas.getContext('2d'),
x,y,
r,g,b,
opacity = opacity || .2;
canvas.width = 55;
canvas.height = 55;
for (x = 0; x < canvas.width; x++){
for (y = 0; y < canvas.height; y++){
r = Math.floor(Math.random() * 255);
g = Math.floor(Math.random() * 255);
b = Math.floor(Math.random() * 255);
ctx.fillStyle = 'rgba(' + r + ',' + b + ',' + g + ',' + opacity + ')';
ctx.fillRect(x,y,1,1);
}
}
document.body.style.backgroundImage = "url(" + canvas.toDataURL("image/png") + ")";
}
generateNoise(.8);
【问题讨论】:
-
window.setInterval('generateNoise(.8)',50); -
你可以减少你的
Math.random和Math.floor调用,比如x = Math.floor(Math.random() * 0xffffff); r = x & 0xff; g = (x & 0xff00) >>> 8; b = (x & 0xff0000) >>> 16; -
一些提示:1)
!!!document.createElement('canvas').getContextto!document.createElement('canvas').getContext2) 设置 if/else 以便没有画布的用户不会出错 3) 在逗号和文本之间放置空格, 和(param) {之间的空格用于函数 -
@PaulS。我做那个工作吗?我完全是个书呆子?它看起来正确,但我无法让它工作;新颜色:r = Math.floor(Math.random() * 155); g = Math.floor(Math.random() * 255); b = Math.floor(Math.random() * 155);
-
我只需要添加
requestAnimationFrame(generateNoise);,它可以满足您的需要,将其放在函数的第一行。 jsfiddle.net/eS9cc
标签: javascript html image-processing canvas html5-canvas