美文网首页
Canvas入门3

Canvas入门3

作者: David_Rao | 来源:发表于2020-01-30 22:58 被阅读0次

绘制弧度

  1. 基本概念
    角度:一个圆360度,一个半圆是180度
    弧度:一个圆2Π,一个半圆Π
  2. 角度转换弧度
    弧度 = 角度 × Π / 180
  3. 弧度转换角度
    角度 = 弧度 × 180 / Π
/* context.arc(x, y, radius, startAngle, endAngle [, anticlockwise]); */
/* (圆心x,圆心y,半径,开启弧度,结束弧度,可选参数false/true) */
// false顺时针,true逆时针

绘制文字

// 设置字体
oCtx.font = "50px 微软雅黑";
// 垂直对齐方式
oCtx.textBaseline = “middle”;  // top buttom middle
// 水平对齐方式
oCtx.textAlign = "center";  // start end center

oCtx.strokeText("字符串", 默认左下角x, 默认左下角y);
oCtx.fillText("字符串", 默认左下角x, 默认左下角y);

绘制图片

// 加载图片
let oImg = new Image();
// 监听图片加载,为了避免图片已经加载好了才执行这个函数而漏掉监听,要写在前面
oImg.onliad = function() {
    // 绘制图片。三个参数,五个参数,九个参数
    oCtx.drawImage();
};
oImg.src = "img/img.jpg";
oCtx.drawImage();
  1. 三个参数:
  • 图片
  • 左上位置x,左上位置y
  1. 五个参数:
  • 图片
  • 左上位置x,左上位置y
  • 拉伸图片宽度,拉伸图片高度
  1. 九个参数:
  • 图片
  • 原始图片上的位置x,原始图片上的位置y
  • 从原始图片指定位置截取宽度,从原始图片指定位置截取高度
  • 左上位置x,左上位置y,
  • 拉伸图片宽度,拉伸图片高度

绘制动画

let oImg = new Image();
oImg.onload = function() {
    // 计算每一张图片的宽高
    let imageWidth = oImg.width;
    let imageHeight = oImg.height;
    let personWidth = imageWidth / 4;
    let personHeight = imageHeight / 4;
    // 计算绘制的位置
    let canvasWidth = oCtx.canvas.width;
    let canvasHeight = oCtx.canvas.height;
    let originX = canvasWidth / 2;
    let originY = canvasHeight / 2;
    // 绘制图片
    oCtx.drawImage(oImg, 0, personHeight * 2, personWidth, personHeight, originX, originY, personWidth, personHeight);
    // 实现逐帧动画
    let index = 0;
    setInterval(function () {
        oCtx.clearRect(0, 0, canvasWidth, canvasHeight);
        oCtx.drawImage(oImg, index*personWidth, personHeight * 2, personWidth, personHeight, originX, originY, personWidth, personHeight);
        index++;
        if(index > 3)  index = 0;
    })
}
oImg.src = "img/person.jpg"

平移、旋转、缩放

注意点:在canvas中所有的形变属性操作的都是坐标系,而不是图形本身

  1. 平移
oCtx.translate(100, 0);
oCtx.strokeRect(100, 100, 200, 100);
  1. 旋转
oCtx.rotate(Math.PI/6);
oCtx.strokeRect(100, 100, 200, 100);
  1. 缩放
oCtx.scale(0.5, 1);
oCtx.strokeRect(100, 100, 200, 100);

图形交互

// 1. 拿到canvas
let oCanvas = document.querySelector("canvas");
// 2. 从canvas中拿到绘图工具
let oCtx = oCanvas.getContext("2d");
// 3. 绘制矩形
let rectX = 100;
let rectY = 100;
let rectWidth = 100;
let rectHeight = 100;
oCtx.rect(rectX, rectY, rectWidth, rectHeight);
oCtx.fill();
// 4. 添加点击事件
oCanvas.onclick = function(event){
    let x = event.offsetX;
    let y = event.offsetY;
    if(x >= rectX && x <= rectX + rectWidth &&
      y >= rectY && y <= rectY + rectHeight){
          console.log("矩形被点击了");
    }
    else{
        console.log("矩形没有被点击");
    }
}

方式2

  • 如果没有开启新路径,所有图形内部点击都返回true,否则返回false
  • 如果开启了一个新的路径,那么判断的就是点是否在新的路径的图形中
oCtx.isPointInPath(x, y);  

解决图形交互的框架有:
zrender.js、Knova.js、three.js、egret.js、pixi.js

相关文章

  • canvas

    canvas 入门 : w3cschool HTML 标签_w3cschoolhttps://www.w3cs...

  • Canvas入门3

    绘制弧度 基本概念角度:一个圆360度,一个半圆是180度弧度:一个圆2Π,一个半圆Π 角度转换弧度弧度 = 角度...

  • canvas入门-小时钟

    canvas入门-小时钟

  • canvas简单入门(3)

    Canvas进阶 阴影 渐变 线性渐变 径向渐变 createRadiaGradient(x1, y1, r1, ...

  • android随笔之自定义View的Canvas用法

    对Canvas进行操作: 1,Canvas平移 2,Canvas缩放 3,Canvas旋转 Canvas操作例子 ...

  • HTML5中canvas使用

    1、Canvas基础 2、Canvas画直线 3、Canvas画矩形 4、Canvas画文字 5、Canvas画圆...

  • Unity3D进阶教程(一)UI

    Unity3D进阶教程 [toc] 回顾2d版入门教程一 UI初步 添加Canvas 添加控件Text字体Imag...

  • canvas入门

    标签插入 获取标签var canvas = document.getElementById('canvas');获...

  • canvas 入门

    绘制倒计时时钟 1 绘制一条线 然后利用刚学的线条绘制个七巧板 2 绘制弧线 canvas 中的方法 圆的起始状态...

  • canvas入门

    一、什么是 canvas? HTML5 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成可以...

网友评论

      本文标题:Canvas入门3

      本文链接:https://www.haomeiwen.com/subject/kzpbthtx.html