使用<canvas>
,我想使用变量设置矩形的RGBa值。
例如:
ctx.fillStyle = "rgba(32, 45, 21, 0.3)";
工作正常,但使用变量:
var r_a = 0.3;
ctx.fillStyle = "rgba(32, 45, 21, r_a)";
不起作用。
显然fillStyle
只接受一个字符串。那么如何使用某个变量设置rgba值的值而不是显式定义值?
答案 0 :(得分:92)
您只需要连接r_a
变量以正确构建字符串:
var r_a = 0.3;
ctx.fillStyle = "rgba(32, 45, 21, " + r_a + ")";
答案 1 :(得分:18)
ctx.fillStyle = "rgba(32, 45, 21, "+r_a+")";
这是字符串连接。
答案 2 :(得分:8)
我参加派对的时间已经很晚了,但我遇到了类似的问题并以稍微不同的方式解决了这个问题。
由于我需要在不同的alpha级别重用填充颜色,因此我使用了JavaScript替换方法:
colurfill = "rgba(255, 255, 0, [[opacity]])";
ctx.fillStyle = colurfill.replace("[[opacity]]", "0.5");
:
:
ctx.fillStyle = colurfill.replace("[[opacity]]", "0.75");
显然,它不一定是变化的alpha级别,它可能是其他渠道之一。
答案 3 :(得分:1)
var r_a = 0.3
ctx.fillStyle = `rgba(32, 45, 21, ${r_a})`;
这些称为模板文字 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
在美国键盘上,通常在数字1的左侧找到反引号''。
答案 4 :(得分:0)
我正在寻找类似的东西,并且在阅读之后遇到了你的帖子,我想出了一个自己的解决方案,我正在使用音频API并希望基于来自频率的变量的动态颜色声音文件。这就是我想出来的内容,现在就开始思考,我想发布它以防万一,因为我从你的问题中得到灵感:
function frameLooper(){
window.requestAnimationFrame(frameLooper);
fbc_array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(fbc_array);
ctx.clearRect(0, 0, canvas.width, canvas.height);
// Clear the canvas
bars = 100;
for (var i = 0; i < bars; i++) {
bar_x = i * 3;
bar_width = 2;
bar_height = -(fbc_array[i] / 2);
bar_color = i * 3;
//fillRect( x, y, width, height )
// Explanation of the parameters below
ctx.fillRect(bar_x, canvas.height, bar_width, bar_height);
ctx.fillStyle = "rgb(100," + bar_color + "," + bar_color + ")" ;
// Color of the bars