【问题标题】:Gradient fill relative to shape position, not canvas position?相对于形状位置的渐变填充,而不是画布位置?
【发布时间】:2012-08-11 18:31:37
【问题描述】:

据我了解,必须相对于画布元素本身(即 0、0)而不是相对于您实际填充的形状来指定渐变填充。

问题:我的说法是否正确,是否有建议的解决方法?

例如(JSFiddle here):

    ctx.beginPath();
    ctx.rect(40, 50, 100, 70);
    var grd = ctx.createLinearGradient(0, 50, 0, 120);
    grd.addColorStop(0, "red");
    grd.addColorStop(1, "blue");
    ctx.fillStyle = grd;
    ctx.fill();

在那里,我做了一个矩形。我希望,要从形状的左上角开始用渐变填充它,我会将0, 0 作为前两个参数传递。看来我必须传递矩形相对于画布的 X/Y 坐标。

如果你有一个用二次曲线构建的弧,这就会成为一个问题,因为如果不是数学天才,你不知道曲线的顶部位置 - 只知道控制点。

【问题讨论】:

    标签: javascript html canvas gradient


    【解决方案1】:

    如果您不知道要绘制的形状的边界,那您的日子会很糟糕。

    如果您正在使用渐变,尤其是重复使用渐变,最好始终从原点制作渐变和形状,并将它们转换为它们将要到达的位置。

    设置这种系统将使定义渐变或多或少与对象的大小相关,但您仍然必须自己进行边界计算。

    这是一个翻译渐变和形状以使其与画布“相对”的示例:

    http://jsfiddle.net/simonsarris/RFgcs/

    【讨论】:

    • +1 寻求帮助。但是二次曲线的情况是您不知道界限(即曲线的顶点)的情况。我今天试图找到这个的数学公式,但失败了。
    • @Utkanos 任何方程的重点是给定一个数字 x,您可以找到满足解的另一个数字。因此,y = (x - 2)^2 + 4 很容易求解。假设 x 为 2,那么您只需为 y 得到 4。因此,如果您有一个由某个函数定义的二次抛物线,那么您可以轻松地在该曲线上生成点。例如,如果您使用for (var i = 0, len = whatever.width; i < len; i++) { 遍历每个点,那么您可以使用var y = i - 2; var y *= y; var y += 4(对于上面的示例,方程为 y = (x - 2)^2 + 4
    猜你喜欢
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    相关资源
    最近更新 更多