【问题标题】:Javascript canvas stroke opacity not applied to each lineto but rather continually over linesJavascript画布笔划不透明度不适用于每个线条,而是连续线条
【发布时间】:2012-12-17 22:09:37
【问题描述】:

看来我对javascript canvas strokestyle/line drawing的理解还达不到标准。我想绘制具有一点透明度的线条,但我无法将透明度应用于每条线(段),而是将其作为渐变应用到我绘制的所有线条上......

示例代码:

var c = document.getElementsByTagName('canvas')[0];
var a = c.getContext('2d');

WIDTH = 400;
HEIGHT = 400;
c.width = WIDTH;
c.height = HEIGHT;;

function applyGrid()
{
    a.fillStyle = "000000";
    a.lineWidth = 2;
    a.fillRect(0, 0, WIDTH, HEIGHT);

    a.strokeStyle = "rgba(0,200,200,0.1)";
   for (var x = 0; x <= WIDTH; x += 50)
   {
      a.moveTo(x, 0);
      a.lineTo(x, HEIGHT);
      a.stroke();
    }

}
applyGrid();​

在此处查看示例代码和(错误)结果:http://jsfiddle.net/zKWaT/3/ 我希望所有垂直线都具有最右边线的透明度,但它们会逐渐消失。

我想我错过了一些关于 lineTo 和 stroke 工作原理的基本知识,但是看了这里和那里的例子后,我没有发现一些有启发性的东西...... tt。

感谢您的意见!

【问题讨论】:

    标签: javascript canvas


    【解决方案1】:

    在你的 for 循环中添加 a.beginPath() 以在每个循环上开始一个新行。否则,您只是一遍又一遍地延伸和抚摸同一条线。

    var c = document.getElementsByTagName('canvas')[0];
    var a = c.getContext('2d');
    
    WIDTH = 400;
    HEIGHT = 400;
    c.width = WIDTH;
    c.height = HEIGHT;;
    
    function applyGrid()
    {
        a.fillStyle = "000000";
        a.lineWidth = 2;
        a.fillRect(0, 0, WIDTH, HEIGHT);
    
        a.strokeStyle = "rgba(0,200,200,0.1)";
       for (var x = 0; x <= WIDTH; x += 50)
       {
          a.beginPath(); //ADD THIS
          a.moveTo(x, 0);
          a.lineTo(x, HEIGHT);
          a.stroke();
        }
    
    }
    applyGrid();​
    

    【讨论】:

    • 不错!你是否也知道为什么在前一种情况下不透明度没有应用于整行,而是作为渐变?
    • @stackdaemon 它根本没有以不同的方式应用不透明度。再读一遍这个答案,这次慢一点……
    • 哇...突然明白了。
    • 作为替代方案,您可以将a.stroke() 移出循环,这样您只需构建一条复杂的线并描边一次。由于您只是使用相同的颜色,因此实际上会更有效。 jsfiddle.net/gunderson/zKWaT/4
    • 谢谢小费!具有讽刺意味的是,我在最初的努力中尝试过一次以使其正常工作,但是透明度太高(我现在意识到),以至于只用一笔就可以看到线条,所以我就像“嗯……那根本不起作用” !”。对线条图的不理解很多...... :)
    猜你喜欢
    • 1970-01-01
    • 2011-04-30
    • 2019-07-04
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 2013-01-02
    相关资源
    最近更新 更多