• canvas 基础


    canvas

    • 游戏
    • 可视化数据 重点
    • banner广告
    • 多媒体
    • 未来
      • 模拟仿真 threejs.org 将3d引擎引入
      • 远程协作
      • 图形编辑

    入门

    //默认宽高 300*150 300*150个像素点
    //不要用css来设置,如果使用css来设置画布的大小,不会增加像素点,只会将像素扩大
    //canvas只能展示画图的内容,不能绘图,每一个canvas都有一套工具,利用工具可以在cancas上进行绘图
    //canvas.getContext('2d') 就返回一个在当前页面上绘图的工具集
    //这个工具集专门绘制平面图形,里面有很多方法
    //<canvas width="600" height="400"></canvas>
    //从页面获取canvas的DOM元素
    //开始绘图
    var ctx = cas.getContext('2d');
     
    ctx.moveTo(100, 100);//描点
    ctx.lineTo(200, 200);//描点
     
    ctx.stroke();//描边绘图

    canvas的直角坐标系

     

    canvas绘制虚线

    <body>
    <canvas id="canvas"></canvas>
    <script>
    var cas = document.getElementById("canvas");
    var ctx = cas.getContext('2d');
     
    ctx.moveTo(100, 100);//描绘图的起始点
    ctx.lineTo(200, 200);//描点
    直线的终点
     
    ctx.stroke();//连点描边
    </script>
    </body>

    非零环绕原则

    • 如果需要判断某区域是否要填充颜色,我们需要
      非零环绕原则来判断,在这块区域选点,随便向任意
      方向拉出去一条线L,如果画的图的线条穿过L线
      是顺时钟方向的记1,反之记-1

    闭合路径

    • closePath(): 将绘图的起点和终点连接起来
    • closePath与lineto直接闭合的区别:closePath是完美闭合

    线宽的问题

    lineWidth()

    canvas在进行绘制线条的时候,如果线宽只要是奇数值都会去做取消锯齿的操作

    路径

    • 状态: 在需要改变颜色绘制方法,改变颜色,绘制方法,改变一些属性...就需要改变绘图状态.使用beginPath()方法.开启一个新的路径.不会影响其他的路径

    线型相关的属性

    • lineCap(): 线帽
    • lineJoin(): 两线相交的处理

    虚线

    • ctx.setLineDash(数组); : 设置虚线的数组
    • ctx.getLineDash(); : 获取虚线的数组
    • ctx.lineDashOffset = 值 : 初始位置的偏移量
    //绘制水平的虚线
    ctx.moveTo(100,100);
    ctx,lineTo(400,100);
    //数组里面表示每段的长度,会循环遍历的去数组里面的值
    ctx.setLineDash([10,5,5,5,6,7,8,9]);
    ctx.stroke();

    给线设置颜色

    • ctx.strokeStyle = 'rgb(0,255,0)'; 设置描边的颜色
    • ctx.fillStyle = 'rgb(0,255,0)'; 设置填充的颜色

    绘制坐标网格

    var width = 10;
    var rows = cas.height / width;
    var cols = cas.width / width;
     
    for (var i = 0; i < rows ; i++){
    for (var j = 0 ; j < cols; j++) {
     
    ctx.moveTo( j * width, ( i + 1 ) * width );
    ctx.lineTo( j * width + width, ( i + 1 ) * width );
     
    // 开始绘制竖着的
    ctx.lineTo( j * width + width, i * width );
    }
    }
     
    ctx.stroke();

    绘制坐标系

    见demo

    在坐标轴中绘制折线图

    封装Line构造函数

    • 如何使用面向对象的方式进行编程
      • 找找看有没有第三方库可以帮你完成功能
      • 如果没有,自己创建一个对象来完成功能

    绘制矩形

    //矩形
    //ctx.rect(x,y,w,h);
    //ctx.strokeRect(x,y,w,h);
     
    ctx.rect(100,50,200,100);
    ctx.stroke();//或者用 ctx.fill
     
    //2
    ctx.strokeRect(100,140,200,100);
     
    //3
    ctx.fillRect(100,400,200,100);
     
    //4
    crx.clearRect(100,400,200,100);//清除矩形区域

    圆弧

    • ctx.arc(x,y,r,startAngle,endAngle,clockwise);
      • ctx.arc(cas.width/2,cas.height/2, 100,0,2*Math.PI);
        • x,y是圆心坐标
        • r是圆的半径
        • startAngle 圆弧开始的角度
        • endAngle 圆弧结束的角度
        • clockwise true按顺时针方向挥绘制,反之,亦然

    动态画圆

    var timer=setIntercal(function(){
    a++;
    if(a>=270){
    clearInterval(timer);
    a=270;
    }
     
    ctx.moveTo(cas.width/2,cas.height/2);
    ctx.arc(cas.width/2,cas.height/2,100,toRadian(-90),
    toRadian(a)
    );
    },15);
  • 相关阅读:
    定制事件 观察者模式
    定时器的高级运用 优化
    tamper-proof 对象 nonextensible对象 sealed对象 frozen对象
    函数柯理化
    跨域 Ajax 其他可选技术 异步
    Ajax 跨域 异步 CORS
    原样输出html标签
    JavaScript
    css 中name的用途
    iview 按需引入解决加载慢的问题
  • 原文地址:https://www.cnblogs.com/tutumissed/p/8276407.html
Copyright © 2020-2023  润新知