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>
相关推荐
AI 编程助手GPT37 分钟前
VS Code 1.133 实战:Claude 可免 GitHub 登录,HTML 保存后自动刷新
前端·html·github
灯澜忆梦1 小时前
【基于GO的Web开发3】gin框架_HTML渲染
前端·golang·gin
小徐_23337 小时前
wot-ui-cli 1.1.0 发布:支持 OpenCode、Antigravity,wot-ui 图标迁移不再靠猜
前端
__zRainy__8 小时前
Node.js Web 框架选型指南:从 Express 到 Hono 的全景对比
前端·node.js·express·koa·nestjs·egg·fastify
西瓜有点饿8 小时前
PostCSS 和 UnoCSS 的作用和区别
前端·postcss
伟大的兔神9 小时前
我做了一个本地优先的 AI 图片工作台:Loomora v1.0.0 正式发布
前端·javascript·vue.js
90后的晨仔10 小时前
uni-app项目 Vue3 状态管理 Pinia 完全指南:从概念到实战的深度解析
前端
90后的晨仔10 小时前
uni-app 在 iOS 平台跳转页面时移除底部安全区域的完整技术指南
前端
用户9385156350710 小时前
React + JWT 登录鉴权底层原理与工程化实践
前端·react.js
zww894911110 小时前
家政派单系统开发实战:架构设计与派单算法指南
前端·系统架构