• Canvas基础


    检查支持性

    if (canvas.getContext) {
        var ctx = canvas.getContext('2d')
    } else {
        // canvas-unsupported code here
    }
    

    绘制矩形

    // 绘制一个填充的矩形
    ctx.fillRect(x, y, width, height)
    // 绘制一个矩形边框
    ctx.strokeRect(x, y, width, height)
    // 清除指定矩形区域
    ctx.clearRect(x, y, width, height)
    // 执行该方法时,moveTo方法自动设置左边参数(0, 0)。也就是说,当前笔触自动重置回默认坐标
    ctx.rect(x, y, width, height)
    

    绘制路径

    // 新建一条路径,生成之后,图形绘制命令被指向到路径上生成路径
    ctx.beginPath()
    // 闭合路径之后,图形绘制命令又会重新指向到上下文
    ctx.cloasePath()
    // 通过线条绘制图形轮廓
    ctx.stroke()
    // 通过填充路径的内容区域来生成实心的图形
    ctx.fill()
    

    生成路径的第一步叫做beginPath(),本质上路由是由很多子路径组成的,这些子路径在一个列表中,所有的子路径(线、弧形等)构成图形。而每次调用这个方法之后,列表都会被清空,然后我们可以重新绘制图形。

    第二步就是调用函数绘制指定路径

    第三步是闭合路径closePath(),不是必须的。这个方法会绘制一条从当前点到起始点的直线来闭合图形。如果图形已经闭合,即当前点就是起始点,则该函数什么也不做。

    注意:当调用fill()函数时,所有没有闭合的形状都会闭合,所以不用调用closePath()函数。但是调用stroke()不会自动闭合。

    绘制三角形

    ctx.beginPath()
    ctx.moveTo(75, 50)
    ctx.lineTo(100, 75)
    ctx.lineTo(100, 25)
    ctx.fill()
    

    移动笔触

    ctx.moveTo(x, y)
    

    绘制直线

    ctx.lineTo(x, y)
    

    绘制圆弧

    ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise)
    
    • x,y为圆心位置
    • radius为半径
    • startAngle和endAngle为用弧度定义了开始和结束的弧度。这些都是以X轴为基准
    • anticlockwise是布尔值,为true时为逆时针,否则顺时针方向,默认顺时针方向

    二次贝塞尔曲线及三次贝塞尔曲线

    // 绘制二次贝塞尔曲线,cp1x、cp1y为一个控制点,x、y为结束点
    quadraticCurveTo(cp1x, cp1y, x, y)
    // 绘制二次贝塞尔曲线,cp1x、cp1y为第一个控制点,cp2x、cp2y为第二个控制点,x、y为结束点
    bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)
    

    Path2D对象

    为了简化代码和提高性能,Path2D对象已可以在较新版本的浏览器中使用,用来缓存或记录绘画命令,这样你将能快速地回顾路径。

    Path2D()

    Path2D()会返回一个新初始化的Path2D对象,可能将某一个路径作为变量,创建一个它的副本,或者将一个包含SVG path数据的字符串作为变量。

    new Path2D() // 创建空的Path2D对象
    new Path2D(path) // 克隆path对象
    new Path2D("M10 10 h 80 v 80 h -80 Z") // 从svg创建path对象
    

    所有的路径方法比如moveTo, rect, arc或quadraticCurveTo等,如我们前面见过的,都可以在Path2D中使用。

    Path2D.addPath(path [, transform])

    添加了一条路径到当前路径(可能添加了一个变换矩阵)。

    在这个例子中,我们创造了一个矩形和一个圆。它们都被存为Path2D对象,后面再派上用场。随着新的Path2D API产生,几种方法也相应地被更新来使用Path2D对象而不是当前路径。在这里,带路径参数的stroke和fill可以把对象画在画布上

    function draw() {
      var canvas = document.getElementById('canvas');
      if (canvas.getContext){
        var ctx = canvas.getContext('2d');
        
        var rectangle = new Path2D();
        rectangle.rect(10, 10, 50, 50);
        
        var circle = new Path2D();
        circle.moveTo(125, 35);
        circle.arc(100, 35, 25, 0, 2 * Math.PI);
        
        ctx.stroke(rectangle);
        ctx.fill(circle);
      }
    }
  • 相关阅读:
    吃货联盟订餐系统
    第一章课后习题
    hostapd阅读(openwrt)-1
    通过C语言获取MAC地址(转)
    OpenWrt 编译分割
    ubuntu 12.04无盘工作站
    WEB前端性能优化-如何提高页面加载速度
    HTML6
    easyui 根据值查找匹配
    收藏的网站
  • 原文地址:https://www.cnblogs.com/cherishSmile/p/11102481.html
Copyright © 2020-2023  润新知