跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 工具系统 > 其他工具 > 一篇canvas带你画出整个特效世界

一篇canvas带你画出整个特效世界

时间:2024-04-08 20:25:34 来源:网络cs 作者:淼淼 栏目:其他工具 阅读:

标签: 整个  世界 

3ae4a751de6e4aa2a177128111927083.png

目录

一,canvas是啥?

1.初识canvas

2.路径绘制

3.拆分画法

4.清除画布 

5.绘制圆形笑脸

6.贝塞尔曲线

①二次贝塞尔曲线

②三次贝塞尔曲线


 

一,canvas是啥?

Canvas是HTML5中新出的一个元素,我们可以在上面绘制一系列图形。Canvas 在HTML文件中的写法很简单: <canvasid="canvas" width="宽度" height="高度"></canvas>,三个重要的属性,id,高度,宽度(这里就是指的你要在多宽多高的画布上来进行操作),canvas翻译过来就是画布的意思,所以我们也可以称他为画布

1.初识canvas

既然有画布了,那就得有画笔,所以我们的操作步骤为,创建画布,拿到该画布的元素,然后再拿起画笔,这里我们先画一个小矩形来看一下小效果,使用的是fillRect,参数分别为(x,y,w,h)这第一对参数啊就是坐标点,在哪一个坐标点开始画,第二对参数就是你画的东西多大,如果参数分别为(0,0,100,100)就是从远点开始,画一个宽高为100 的正方形

d535eb5a1f2e4449a427907a2170929b.png

<body>    <canvas id="c1" width="600" height="400"></canvas>    <script>    // 1.找到画布    var c1 = document.querySelector('#c1');    // 2.获取画笔    var ctx = c1.getContext('2d');    // 3.绘制图形 画一个矩形fillRect(位置x,位置y,宽度,高度)    ctx.fillRect(400,100,100,100)    </script></body>

2.路径绘制

路径顾名思义就是只把该图形的路径画出来,也就是不进行内部填充,只进行边框的绘制,这里使用的是strokeRect 他的参数和fillRect的参数一样

b46eb5248cd743fd816c172713e51216.png

<body>    <canvas id="c1" width="600" height="400">该浏览器不支持canvas</canvas>    <script>    var c1 = document.querySelector('#c1');    var ctx = c1.getContext('2d');    // 路径绘制矩形    ctx.strokeRect(100,100,100,100)    </script></body>

3.拆分画法

步骤为: beginPath开始绘制,rect绘制图形,绘制方式(fill、stroke)closePath绘制结束

<body>    <canvas id="c1" width="600" height="400">该浏览器不支持canvas</canvas>    <script>        var c1 = document.querySelector('#c1');        var ctx = c1.getContext('2d');        // 拆分路径绘制矩形        // 这里要使用beginPath,closePath        ctx.beginPath();// 开始绘画        ctx.rect(100, 100, 200, 100);        ctx.stroke();        ctx.closePath();// 绘画结束        // 拆分填充绘制矩形        ctx.beginPath();        ctx.rect(200, 150, 200, 100);        ctx.fill();        ctx.closePath();    </script></body>

绘制效果 

 

4.清除画布 

甲:画完了之后,我感觉效果并不是很好,我不想要的我想重新绘制,该咋办呢?

乙:这还不简单啊,直接选中del不就好啦

山鱼:简单粗暴(๑•̀ㅂ•́)و✧,但是呢这里有个比较文雅的方式使用clearRect,清除画布

不仅可以清除画布,配合定时器还能实现动态效果呢,ok先来看一下clearRect里面的参数,仨,分别是(x,y,清除谁,清除多少),这里是从整个画布的远点开始清除,清除c1这个画布的高度,每次清除高度++,开启一个定时器就能获得动态清除的效果啦

<body>    <canvas id="c1" width="600" height="400">该浏览器不支持canvas</canvas>    <script>        var c1 = document.querySelector('#c1');        var ctx = c1.getContext('2d');        // 路径绘制矩形        ctx.strokeRect(100, 100, 200, 100);        ctx.fillRect(200, 150, 200, 100);        // 逐渐的清除绘制的内容        let height = 0;        let t1= setInterval(() => {            height++;            ctx.clearRect(0, 0, c1.clientHeight,height);            if(height >c1.clientHeight){                clearInterval(t1);            }        },10)    </script></body>

清除效果

d767ed62a08d4d24a36003213edcfcca.gif

5.绘制圆形笑脸

方块可以绘制那么圆形也肯定能绘制,接下来就进行圆形笑脸的绘制 ,先来绘制一个圆弧,使用的是arc这个参数为六个(x,y,半径,起始角度,结束角度,顺/逆时针【默认的是顺时针】)经过绘制就能得到一个⚪,一个圆为360度也就是2π所以结束的度数为Math.PI*2

    <canvas id="c1" width="600" height="400"></canvas>    <script>        var c1 = document.querySelector('#c1');        var ctx = c1.getContext('2d');        // 使用arc()绘制圆形他有6个参数分别为        // 圆心x,圆心y,半径,起始角度,结束角度,顺/逆时针(默认为顺时针)        // false是顺时针true是逆时针        ctx.arc(300, 200, 50, 0, Math.PI*2,false);        ctx.stroke();    </script>

38a90b195e7e46c39ab02a3f1d35cf86.png 

开始绘制笑脸,这里使用的是moveTo和arc来共同完成的,moveTo() 方法把路径移动到画布中的指定点,不创建线条。绘制步骤为:创建画布,获取画布,获取画笔,开始绘制,绘制脸部

<body>    <canvas id="c1" width="600" height="400"></canvas>    <script>        var c1 = document.querySelector('#c1');        var ctx = c1.getContext('2d');        // 使用arc()绘制圆形他有6个参数分别为        // 圆心x,圆心y,半径,起始角度,结束角度,顺/逆时针(默认为顺时针)        // false是顺时针true是逆时针        // 1.绘制脸部        ctx.beginPath();        ctx.arc(75,75,50,0,Math.PI*2);        ctx.moveTo(110,75);        // 2.绘制嘴巴        ctx.arc(75,75,35,0,Math.PI);        ctx.moveTo(65,65);        // 3.绘制眼睛        // 左眼        ctx.arc(60,65,5,0,Math.PI*2)        ctx.moveTo(95,65);        // 右眼        ctx.arc(90,65,5,0,Math.PI*2);        ctx.stroke();        ctx.closePath();    </script></body>

578811bebe1c4de489520236aa157c95.png 

6.贝塞尔曲线

①二次贝塞尔曲线

使用二次贝塞尔曲线画一个气泡框

二次曲线:quadraticCurveTo (cp1x, cp1y, x, y) 贝塞尔曲线:bezierCurveTo (cp1x, cp1y, cp2x, cp2y, x, y) 画圆弧:arcTo (x1,y1,x2,y2,radius);

<body>    <canvas id="c1" width="600" height="400"></canvas>    <script>        var c1 = document.querySelector('#c1');        var ctx = c1.getContext('2d');        ctx.beginPath();        ctx.moveTo(200,300);        ctx.quadraticCurveTo(150,300,150,200);        ctx.quadraticCurveTo(150,100,300,100);        ctx.quadraticCurveTo(450,100,450,200);        ctx.quadraticCurveTo(450,300,250,300);        ctx.quadraticCurveTo(250,350,150,350);        ctx.quadraticCurveTo(200,350,200,300);        ctx.stroke();        ctx.closePath();    </script></body>

32fa8a1b7e3449c094631e3406734d1b.png 

 

②三次贝塞尔曲线

使用三次贝塞尔曲线画一个小爱心

<body>    <canvas id="c1" width="600" height="400"></canvas>    <script>        var c1 = document.querySelector('#c1');        var ctx = c1.getContext('2d');        ctx.beginPath();        // 起初点        ctx.moveTo(300,200);        // 两个控制点        ctx.bezierCurveTo(350,150,400,200,300,300);        ctx.bezierCurveTo(200,200,250,150,300,200);        ctx.stroke();        ctx.closePath();    </script></body>

d322692742c041e18db82cb44df655cc.png

我是Aic山鱼,感谢您的支持
​原 创 不 易 ✨还希望支持一下
点赞👍:您的赞赏是我前进的动力!
收藏⭐:您的支持我是创作的源泉!
评论✍:您的建议是我改进的良药!
山鱼🦈社区:山鱼社区💌💌

 

 

本文链接:https://www.kjpai.cn/news/2024-04-08/155663.html,文章来源:网络cs,作者:淼淼,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇:SadTalker项目上手教程

下一篇:返回列表

文章评论