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>
相关推荐
阿阳微客35 分钟前
Steam 搬砖项目深度拆解:从抵触到真香的转型之路
前端·笔记·学习·游戏
德育处主任Pro1 小时前
『React』Fragment的用法及简写形式
前端·javascript·react.js
CodeBlossom1 小时前
javaweb -html -CSS
前端·javascript·html
打小就很皮...2 小时前
HBuilder 发行Android(apk包)全流程指南
前端·javascript·微信小程序
集成显卡3 小时前
PlayWright | 初识微软出品的 WEB 应用自动化测试框架
前端·chrome·测试工具·microsoft·自动化·edge浏览器
前端小趴菜054 小时前
React - 组件通信
前端·react.js·前端框架
Amy_cx4 小时前
在表单输入框按回车页面刷新的问题
前端·elementui
dancing9994 小时前
cocos3.X的oops框架oops-plugin-excel-to-json改进兼容多表单导出功能
前端·javascript·typescript·游戏程序
后海 0_o5 小时前
2025前端微服务 - 无界 的实战应用
前端·微服务·架构
Scabbards_5 小时前
CPT304-2425-S2-Software Engineering II
前端