Programmatically use RGBa values in fillStyle in ?

前端 未结 5 534
栀梦
栀梦 2021-01-03 17:13

Using , I want to set the RGBa value of the rectangle using a variable.

for example:

ctx.fillStyle = \"rgba(32, 45, 21, 0         


        
相关标签:
5条回答
  • 2021-01-03 17:56

    You just need to concatenate the r_a variable to build the string correctly:

    var r_a = 0.3; 
    ctx.fillStyle = "rgba(32, 45, 21, " + r_a + ")"; 
    
    0 讨论(0)
  • 2021-01-03 17:57

    I was looking for something similar and ran into your post, after reading it, I came up with a solution for myself, I'm working with the audio API and wanted a dynamic color based on a variable coming from the frequency in the sound file. Here's what I came up with and it woks for now, thought I'd post it in case it helps since I got the inspiration from your question:

    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
    
    0 讨论(0)
  • 2021-01-03 17:58

    I'm very late to the party but I had a similar problem and solved it in a slightly different way that may be useful.

    Since I needed to reuse the fill colours at different alpha levels, I used the JavaScript replace method:

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

    Obviously it doesn't have to be the alpha level that varies, it could be one of the other channels.

    0 讨论(0)
  • 2021-01-03 18:05
    var r_a = 0.3
    ctx.fillStyle = `rgba(32, 45, 21, ${r_a})`;
    

    These are called template literals https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

    The back-ticks `` are often found left of the number 1 on the keyboard on US keyboards.

    0 讨论(0)
  • 2021-01-03 18:13
    ctx.fillStyle = "rgba(32, 45, 21, "+r_a+")"; 
    

    It is string concatenation.

    0 讨论(0)
提交回复
热议问题