首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何旋转线性梯度?

如何旋转线性梯度?
EN

Stack Overflow用户
提问于 2016-06-07 01:41:17
回答 2查看 807关注 0票数 3

我怎样才能使我的白线完美地对角线从点到点,我的底部矩形?

https://jsfiddle.net/a7rs5qu5/

代码语言:javascript
复制
  <canvas id="canvas" width="300" height="300"></canvas>

_canvas = document.getElementById('canvas');
_stage = _canvas.getContext('2d');

_stage.fillStyle = "#00FF00";
_stage.fillRect(0, 0, 300, 200);

var gradient = _stage.createLinearGradient(0, 200, 300, 300);
gradient.addColorStop(0, "blue");
gradient.addColorStop(.5, "white");
gradient.addColorStop(1, "blue");

_stage.fillStyle = gradient;
_stage.fillRect(0, 200, 300, 300);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-07 01:57:18

通过数学和改变梯度坐标。你需要设置梯度坐标,这样他们就可以描述一条与之正交的直线。

代码语言:javascript
复制
_canvas = document.getElementById('canvas');
_stage = _canvas.getContext('2d');

_stage.fillStyle = "#00FF00";
_stage.fillRect(0, 0, 300, 200);

var radius = 100;
var angle = Math.atan2(100, 300) + Math.PI / 2;
var gx = radius * Math.cos(angle);
var gy = radius * Math.sin(angle);
var cx = (0 + 300) / 2;
var cy = (200 + 300) / 2;

var gradient = _stage.createLinearGradient(cx - gx, cy - gy, cx + gx, cy + gy);
gradient.addColorStop(0, "blue");
gradient.addColorStop(.5, "white");
gradient.addColorStop(1, "blue");

_stage.fillStyle = gradient;
_stage.fillRect(0, 200, 300, 300);
代码语言:javascript
复制
<canvas id="canvas" width="300" height="300"></canvas>

radius的选择控制梯度的宽度;上面的值只是给出与上面代码中使用的值类似的值。

票数 6
EN

Stack Overflow用户

发布于 2016-06-11 03:24:30

这里有一个更通用的解决方案,用于懒人。

代码语言:javascript
复制
    function createDiagonalGradient(startx, starty, endx, endy)
    {

    var height = endy - starty; 

    var radius = height; 

//-1 or 1 depending on which diagonal you want
    var angle = -1 * Math.atan2(height, endx) + Math.PI / 2;


    var gx = radius * Math.cos(angle);
    var gy = radius * Math.sin(angle);
    var cx = (startx + endx) / 2;
    var cy = (starty + endy) / 2;

    var gradient = _stage.createLinearGradient(cx - gx, cy - gy, cx + gx, cy + gy);
    gradient.addColorStop(0, "black");
    gradient.addColorStop(.5, "white");
    gradient.addColorStop(1, "black");

    return gradient; 


    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37669239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档