canvas - 基础知识 - 绘制剪纸图形

html代码:

<!DOCTYPE html>
<html>
  <head>
    <title>Sprite sheet</title>
    <style>
      body {
        background: #ddd;
      }
      #canvas {
        position: absolute;
        left: 0;
        top: 20px;
        margin: 20px;
        background: #fff;
        border: thin inset rgba(100, 150, 230, 0.5);
        cursor: pointer;
      }
    </style>
  </head>
  <body>
    <canvas id="canvas" width="500" height="500">
      canvas not supported 
    </canvas>
    <script src="cutpaper.js"></script>
  </body>
</html>

js逻辑代码:

var context = document.getElementById('canvas').getContext('2d');

// functions

function drawGrid(color, stepx, stepy) {
  context.strokeStyle = color;
  context.lineWidth = 0.5;

  for(var i = stepx + 0.5; i< context.canvas.width; i+= stepx) {
    context.beginPath();
    context.moveTo(i , 0);
    context.lineTo(i, context.canvas.height);
    context.stroke();
  }

  for(var i= stepy + 0.5; i<context.canvas.height; i += stepy) {
    context.beginPath();
    context.moveTo(0, i);
    context.lineTo(context.canvas.width, i);
    context.stroke();
  }
}

function draw() {
  context.clearRect(0, 0, context.canvas.width, context.canvas.height);
  drawGrid('lightgray', 10, 10);
  context.save();

  context.shadowColor  = 'rgba(200, 200, 0, 0.5)';
  context.shadowOffsetX = 12;
  context.shadowOffsetY = 12;
  context.shadowBlur = 15;

  drawCutouts();
  strokeCutoudShapes();
  context.restore();
}

function drawCutouts() {
  context.beginPath();
  addCirclePath(); // CW
  addOuterRectanglePath();
  addTrianglePath();

  context.fill();
}

function strokeCutoudShapes() {
  context.save();

  context.strokeStyle = 'rgba(0,0,0, 0.7)';
  context.beginPath();
  addOuterRectanglePath();
  context.stroke();
  context.beginPath();

  addCirclePath();
  addRectanglePath();
  addTrianglePath();
  context.stroke();

  context.restore();
}

function rect(x, y, w, h, direction) {
  if(direction) {
    context.moveTo(x, y);
    context.lineTo(x, y+h);
    context.lineTo(x+w, y+h);
    context.lineTo(x+w, y);
    context.closePath();
  } else {
    context.moveTo(x, y);
    context.lineTo(x+w, y);
    context.lineTo(x+w, y+h);
    context.lineTo(x, y+h);
    context.closePath();
  }

}

function addOuterRectanglePath() {
  context.rect(110, 25, 370, 335);
}

function addCirclePath() {
  context.arc(300, 300, 40, 0, Math.PI*2, true);
}

function addRectanglePath() {
  rect(310, 55, 70, 35, true);
}

function addTrianglePath() {
  context.moveTo(400, 200);
  context.lineTo(250, 115);
  context.lineTo(200, 200);
  context.closePath();
}

// Initialization.....................

context.fillStyle = 'goldenrod'
draw();

效果图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值