视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
HTML5每日一练之Canvas标签的应用-坐标变换与路径结合使用
2020-11-27 15:16:20 责编:小采
文档


到目前为止,我们已经学会了很多Canvas的绘制方法,如果我们要绘制如下图的图形怎么办呢?
我们需要对矩形变形,使用坐标变换就足够了。但是对使用路径绘制出来的图形进行变幻的时候,那么要考虑的事情就 多了。因为使用坐标变换之后,已经创建好的路径就不可用了。必须要重新创建路径,重新创建路径后,坐标变换方法又失效了。

解决思路
1、必须先另外绘制一个创建路径的函数。
2、在坐标变幻的同时调用该函数。

代码案例
  • HTML5每日一练之Canvas标签的应用-坐标变换与路径结合使用
  • window.onload = function()
  • {
  • createPic();
  • }

  • //创建图形
  • function createPic()
  • {
  • var canvas = document.getElementById("W3Cfuns_canvas");
  • var context = canvas.getContext("2d");
  • context.fillStyle = "#d4d4d4";
  • context.fillRect(0, 0, 400, 300);
  • //绘制图形
  • context.translate(200, 50);
  • for(var i = 0; i < 50; i++)
  • {
  • context.translate(25, 25);
  • context.scale(0.95, 0.95);
  • context.rotate(Math.PI / 8);
  • createStar(context);//此方法专门绘制五角星
  • context.fill();
  • }
  • }

  • //创建五角星的方法
  • function createStar(c)
  • {
  • var n = 0;
  • var dx = 100;
  • var dy = 0;
  • var s = 50;
  • var x = Math.sin(0);
  • var y = Math.cos(0);
  • var dig = Math.PI / 5 * 4;
  • //创建路径
  • c.beginPath();
  • c.fillStyle = toRGB(parseInt(Math.random()*(255 - 0 + 1) + 0),parseInt(Math.random()*(255 - 0 + 1) + 0),parseInt(Math.random()*(255 - 0 + 1) + 0));
  • for(var i = 0; i < 5; i++)
  • {
  • x = Math.sin(i * dig);
  • y = Math.cos(i * dig);
  • c.lineTo(dx + x * s, dy + y * s);
  • }
  • c.closePath();
  • }

  • //小于10补零
  • function addZero(string){return string.length == 2 ? string : '0' + string;}

  • //随即颜色
  • function toRGB(redValue, greenValue, blueValue)
  • {
  • var
  • rgbR = addZero(redValue.toString(16), 2),
  • rgbG = addZero(greenValue.toString(16), 2),
  • rgbB = addZero(blueValue.toString(16), 2);
  • var rgb = "#" + rgbR + rgbG + rgbB;
  • return rgb;
  • }





  • 下载本文
    显示全文
    专题