canvas使用

canvas使用

1 canvas绘制基本

1 概念

HTML5<canvas>元素用于图形的绘制,区别于css,它的绘制通过javascript来完成绘制的

<canvas>标签只是图形容器,必须使用及保本来绘制图形

Canvas API主要聚焦与2D图形。同时<canvas>元素的WebGL API则用于绘制硬件加速的2D和3D图形

2 绘制矩形

html 复制代码
<canvas id="canvas" width="200" height="200"></canvas>
<script>
    /* 获取画布 */
    var canvas = document.getElementById("canvas");
    /* 获取canvas上下文 getContent('2d') 可以返回一个对象,该对象提供了绘图的方法和属性 */
    const ctx = canvas.getContext('2d');
    /* 填充颜色 */
    ctx.fillStyle = '#ff2d51';
    /* 绘制矩形fillRect(x,y,width,height) x,y 分别是横轴 纵轴起点位置,width height 表示绘制的宽,高大小*/
    ctx.fillRect(10,10,100,100);
</script>

3 canvas中的坐标

canvas是一个二维网络

canvas的左上角坐标为(0,0)

绘制矩形fillRect(x,y,width,height) x,y 分别是横轴 纵轴起点位置,width height 表示绘制的宽,高大小

4 绘制途径

所谓的路径:就是连续的坐标点的集合

在canvas上画线,可以使用一下两种方法

  • moveTo(x,y) 定义线条开始坐标
  • lineTo(x,y) 定义线条结束坐标

绘制线条必须使用到stroke()方法,执行绘制

html 复制代码
<canvas id="canvas" width="200" height="200"></canvas>
<script>
    /* 获取画布 */
    var canvas = document.getElementById("canvas");
    /* 获取canvas上下文 getContent('2d') 可以返回一个对象,该对象提供了绘图的方法和属性 */
    const ctx = canvas.getContext('2d');
    /* 绘制路径 */
    ctx.moveTo(0,0)
    ctx.lineTo(100,100)
    /* 填充颜色 */
    ctx.strokeStyle = '#ff2d51';
    ctx.stroke();
</script>

5 绘制圆

html 复制代码
<canvas id="canvas" width="200" height="200"></canvas>
<script>
    /* 获取画布 */
    var canvas = document.getElementById("canvas");
    /* 获取canvas上下文 getContent('2d') 可以返回一个对象,该对象提供了绘图的方法和属性 */
    const ctx = canvas.getContext('2d');
    /* 绘制路径 */
    ctx.beginPath()
    /* arc(x,y,radius,startAngle,endAngle) 2*Math.PI=圆的周长 */
    ctx.arc(100,100,50,0,Math.PI*2)
    ctx.closePath()
    /* 填充颜色 */
    ctx.fillStyle = '#ff2d51';
    ctx.fill();
    /* 边颜色 */
    ctx.strokeStyle = '#333';
    /* 边宽 */
    ctx.lineWidth = 5;
    ctx.stroke();
</script>
1 绘制多个圆
html 复制代码
<canvas id="canvas" width="400" height="400"></canvas>
<script>
    /* 获取画布 */
    var canvas = document.getElementById("canvas");
    /* 获取canvas上下文 getContent('2d') 可以返回一个对象,该对象提供了绘图的方法和属性 */
    const ctx = canvas.getContext('2d');
    /* 绘制路径 */
    ctx.beginPath()
    /* arc(x,y,radius,startAngle,endAngle) 2*Math.PI=圆的周长 */
    ctx.arc(200,200,100,0,Math.PI*2)
    ctx.closePath()
    /* 填充颜色 */
    ctx.fillStyle = '#ff2d51';
    ctx.fill();

    // 后绘制 覆盖先绘制的

    ctx.beginPath()
    /* arc(x,y,radius,startAngle,endAngle) 2*Math.PI=圆的周长 */
    ctx.arc(200,200,50,0,Math.PI*2)
    ctx.closePath()
    /* 填充颜色 */
    ctx.fillStyle = '#333';
    ctx.fill();
    ctx.stroke();
</script>
2 绘制动画的圆
html 复制代码
<canvas id="canvas" width="400" height="400"></canvas>
<script>
    /* 获取画布 */
    var canvas = document.getElementById("canvas");
    /* 获取canvas上下文 getContent('2d') 可以返回一个对象,该对象提供了绘图的方法和属性 */
    const ctx = canvas.getContext('2d');
    var increateFlag = true;
    var radius = 50
    function draw(){
        /* 清除指定矩形内的形状 */
        ctx.clearRect(0,0,canvas.width,canvas.height)
        /* 绘制路径 */
        ctx.beginPath()
        /* arc(x,y,radius,startAngle,endAngle) 2*Math.PI=圆的周长 */
        ctx.arc(200,200,radius,0,Math.PI*2)
        ctx.closePath()
        /* 填充颜色 */
        ctx.fillStyle = '#ff2d51';
        ctx.fill();
        ctx.stroke();

        if(radius > 100){
            increateFlag = false;
        }else if(radius < 50){
            increateFlag = true;
        }
        if(increateFlag){
            radius++;
        }else{
            radius--;
        }
    }

    // draw();
    setInterval(draw,20);
</script>
3 绘制多圈动画
html 复制代码
<canvas id="canvas" width="400" height="400"></canvas>
    <script>
        /* 获取画布 */
        var canvas = document.getElementById("canvas");
        /* 获取canvas上下文 getContent('2d') 可以返回一个对象,该对象提供了绘图的方法和属性 */
        const ctx = canvas.getContext('2d');
        var increateFlag = true;
        var radius = 50
        function draw(){
            /* 清除指定矩形内的形状 */
            ctx.clearRect(0,0,canvas.width,canvas.height)

            /* 绘制路径 */
            ctx.beginPath()
            /* arc(x,y,radius,startAngle,endAngle) 2*Math.PI=圆的周长 */
            ctx.arc(200,200,radius,0,Math.PI*2)
            ctx.closePath()
            /* 填充颜色 */
            ctx.fillStyle = '#ff2d51';
            ctx.fill();

            // 后绘制 覆盖先绘制的

            /* 绘制路径 */
            ctx.beginPath()
            /* arc(x,y,radius,startAngle,endAngle) 2*Math.PI=圆的周长 */
            ctx.arc(200,200,25,0,Math.PI*2)
            ctx.closePath()
            /* 填充颜色 */
            ctx.fillStyle = 'blue';
            ctx.fill();

            ctx.stroke();

            if(radius > 100){
                increateFlag = false;
            }else if(radius < 50){
                increateFlag = true;
            }
            if(increateFlag){
                radius++;
            }else{
                radius--;
            }
        }

        // draw();
        setInterval(draw,20);
    </script>
相关推荐
Csvn5 小时前
OpenSpec 详细使用教程
前端
之歆6 小时前
Day19_LESS 完全指南——从入门到工程实践
前端·css·less
云水一下7 小时前
HTML5 从入门到精通:实战收官——从零搭建完整静态网站,综合运用所有知识
前端·html5
不总是7 小时前
Windows 系统 Node.js 免安装版(zip)安装与配置教程(2026 最新)
前端·windows·node.js
冬奇Lab7 小时前
每日一个开源项目(第105篇):Twenty - 跳出 Salesforce 的圈套,定义现代开源 CRM
前端·后端·开源
zhangyao9403308 小时前
开发pc端时,表格的高度怎么设置才能铺满页面
前端·javascript·elementui
kjs--8 小时前
浏览器书签执行脚本
前端
之歆8 小时前
Day16_JavaScript 轮播图与事件工程实战(下篇)
服务器·开发语言·前端·javascript·网络·性能优化
沄媪9 小时前
CSRF 跨站请求伪造
前端·ctf·csrf
kyriewen9 小时前
我关掉了Copilot:因为我写的代码出现在了别人的建议里
前端·javascript·ai编程