Программно использовать значения RGBa в fillStyle в <canvas>? - PullRequest
41 голосов
/ 24 декабря 2009

Используя <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, используя некоторую переменную вместо явного определения значений?

Ответы [ 4 ]

92 голосов
/ 24 декабря 2009

Вам просто нужно объединить переменную r_a, чтобы правильно построить строку:

var r_a = 0.3; 
ctx.fillStyle = "rgba(32, 45, 21, " + r_a + ")"; 
19 голосов
/ 24 декабря 2009
ctx.fillStyle = "rgba(32, 45, 21, "+r_a+")"; 

Это конкатенация строк.

8 голосов
/ 29 марта 2012

Я очень опоздал на вечеринку, но у меня была похожая проблема, и я решил ее немного по-другому, что может быть полезно.

Поскольку мне нужно было повторно использовать цвета заливки на разных альфа-уровнях, я использовал метод замены JavaScript:

colurfill = "rgba(255, 255, 0, [[opacity]])";
ctx.fillStyle = colurfill.replace("[[opacity]]", "0.5");
:
:
ctx.fillStyle = colurfill.replace("[[opacity]]", "0.75");

Очевидно, что альфа-уровень не обязательно должен изменяться, это может быть один из других каналов.

0 голосов
/ 19 декабря 2014

Я искал что-то похожее и наткнулся на ваше сообщение, после прочтения, я нашел решение для себя, я работаю с аудио 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...