位置: IT常识 - 正文

一篇canvas带你画出整个特效世界(canvas画线条)

编辑:rootadmin
一篇canvas带你画出整个特效世界

推荐整理分享一篇canvas带你画出整个特效世界(canvas画线条),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:canvas画一条线,canvas画线条,canvas怎么画图,绘制canvas,canvas怎么画图,canvas怎么画图,canvas怎么画,canvas怎么画,内容如对您有帮助,希望把文章链接给更多的朋友!

目录

一,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 的正方形

<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的参数一样

一篇canvas带你画出整个特效世界(canvas画线条)

<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>

清除效果

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>

 

开始绘制笑脸,这里使用的是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>

 

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>

 

②三次贝塞尔曲线

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

<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>

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

本文链接地址:https://www.jiuchutong.com/zhishi/297888.html 转载请保留说明!

上一篇:【Leetcode】设计循环队列("设计")

下一篇:Google Chrome装到D盘的方法(chrome os安装到u盘)

  • 手机超级qq秀在哪里打开(手机版qq秀)

    手机超级qq秀在哪里打开(手机版qq秀)

  • 酷狗字体大小在哪里设置(酷狗字体变大)

    酷狗字体大小在哪里设置(酷狗字体变大)

  • 小爱同学声音怎么变换(小爱同学声音怎么自定义)

    小爱同学声音怎么变换(小爱同学声音怎么自定义)

  • 荣耀x10的分辨率是多少(荣耀x10屏幕分辨率)

    荣耀x10的分辨率是多少(荣耀x10屏幕分辨率)

  • 抖音搬运视频被限流了怎么办(抖音搬运视频被作者发现举报)

    抖音搬运视频被限流了怎么办(抖音搬运视频被作者发现举报)

  • 手机上显示502badg怎么办(手机上显示电话打叉是什么意思)

    手机上显示502badg怎么办(手机上显示电话打叉是什么意思)

  • 淘抢购自运营活动能取消吗(淘宝淘抢购自运营入口)

    淘抢购自运营活动能取消吗(淘宝淘抢购自运营入口)

  • 原装硒鼓能加粉吗(原装硒鼓加粉怎么加)

    原装硒鼓能加粉吗(原装硒鼓加粉怎么加)

  • 超话如何迅速升到12级(超话快速升级)

    超话如何迅速升到12级(超话快速升级)

  • 笔记本电脑需要关机吗(笔记本电脑需要贴膜吗屏幕)

    笔记本电脑需要关机吗(笔记本电脑需要贴膜吗屏幕)

  • 正在通话中请稍后再拨是什么意思(拨打电话正在通话中请稍后再)

    正在通话中请稍后再拨是什么意思(拨打电话正在通话中请稍后再)

  • realtek可以卸载吗(realtek能删吗)

    realtek可以卸载吗(realtek能删吗)

  • 隐藏幻灯片在哪个选项卡(隐藏幻灯片在哪个选项卡里面)

    隐藏幻灯片在哪个选项卡(隐藏幻灯片在哪个选项卡里面)

  • 小米9有没有反向充电(小米有没有反监听设备)

    小米9有没有反向充电(小米有没有反监听设备)

  • 快手怎么看具体人数(快手怎么看具体有多少粉丝)

    快手怎么看具体人数(快手怎么看具体有多少粉丝)

  • 苹果手机已启用缩放是什么意思(苹果手机已启用优化电池充电是什么意思)

    苹果手机已启用缩放是什么意思(苹果手机已启用优化电池充电是什么意思)

  • 手机怎么解锁屏密码(手机怎么解锁屏幕锁)

    手机怎么解锁屏密码(手机怎么解锁屏幕锁)

  • 小爱同学可以语音唤醒吗(小爱同学可以语音留言吗)

    小爱同学可以语音唤醒吗(小爱同学可以语音留言吗)

  • 电脑屏幕开不了怎么回事(电脑屏幕开不了机怎么办?如何解决?)

    电脑屏幕开不了怎么回事(电脑屏幕开不了机怎么办?如何解决?)

  • Mac 磁盘未能分区 Mac磁盘分区出错解决办法(mac 磁盘未能分区)

    Mac 磁盘未能分区 Mac磁盘分区出错解决办法(mac 磁盘未能分区)

  • Win10系统通知中心总弹出广告怎么永久关闭?(win10系统通知中心在哪)

    Win10系统通知中心总弹出广告怎么永久关闭?(win10系统通知中心在哪)

  • 沃特金斯格伦州立公园的彩虹瀑布,纽约州北部芬格湖群 (© Kenneth Keifer/Alamy)(沃特金斯格伦州立公园)

    沃特金斯格伦州立公园的彩虹瀑布,纽约州北部芬格湖群 (© Kenneth Keifer/Alamy)(沃特金斯格伦州立公园)

  • chgrp命令  更改文件所属用户组(命令行改gpt)

    chgrp命令 更改文件所属用户组(命令行改gpt)

  • 建筑公司收到预付款怎么开票
  • 资产交换的涉税处理
  • 劳务报酬申报个税流程
  • 什么是资本性支出和支出
  • 资产总额全年季度平均值怎么填写
  • 联合开发合作模式
  • 存货盘亏损失可以扣除吗
  • 物业公司付电业公司的电费如何做账务处理?
  • 公司租的员工宿舍退租,现在要开发票给人家退房租
  • 个人交的工会经费个税
  • 公司报销学费属于 薪酬还是福利呢
  • 公户买理财产品怎么做账
  • 跨月冲红的发票怎么做账
  • 企业开税票申报个人所得税怎么申报?
  • 滞留发票的税收处理
  • 城市生活垃圾处理与资源化利用工艺设计
  • 票面税费和实际上税为什么不一样
  • 个人劳务费增值税税率是多少2023
  • 超市买的日用品没消毒直接用
  • 抄报不了是怎么回事?
  • 企业押金怎么管理
  • qq助手有什么用处
  • 合同终止后发生的效果包括
  • 月底财务为什么要关账,暂时开不了发票
  • 生产企业出口退税全部流程
  • 销售二手车减免税额会计分录
  • php数组函数输出《咏雪》里有多少"片"字
  • win切换平板模式
  • 跟踪路由如何实现
  • 公司账户转账到出纳个人账户
  • PHP:pg_fetch_object()的用法_PostgreSQL函数
  • 处置子公司的收益
  • 固定资产减少和固定资产折旧
  • 其他应付款不需要支付的怎么处理,预算会计
  • 减免活动怎么做
  • 数组 php
  • vue生命周期分别做了什么
  • nodejs 2020
  • 以股权抵债的会计分录
  • 发票必须在什么时候开
  • 购进小汽车自用为什么可以抵扣进项税
  • 帝国cms专题
  • python中socket怎么用
  • 快递费报销要明细吗
  • 背书转让流程图
  • 利息收入计入科目
  • 库存现金太多违反什么规定
  • 失控发票多久能查出
  • 进项留抵月末要结转吗
  • 货物已发出可以退款吗
  • 原始凭证的审核内容
  • 境外企业向境内企业提供技术服务
  • 公司五金是哪五金
  • 平销返利销项税
  • 加班餐费报销计入什么费用
  • 什么服务费发票可以免税的
  • 劳务发票成本怎么做账
  • linux 查看numa
  • win10关掉搜索
  • linux系统中的用户分为哪几类
  • 帮我打开双击锁屏
  • 在u盘安装软件插上就能用
  • 系统设置用户密码在哪里
  • Mac怎么更改锁屏密码
  • linux操作系统的安装步骤
  • Linux中SSH的SCP传输命令运用详解
  • linux中密码信息存在哪个文件
  • Unity3D游戏开发标准教程吴亚峰于复兴人民邮电出版社
  • bat文件加密bat解密脚本
  • javascript类的继承
  • node优秀库
  • document.getElementById().src
  • JavaScript window.setTimeout() 的详细用法
  • java教程
  • 微信扫码开票的记录怎么查询
  • 营业税发票现在可以冲红么
  • 重庆税务局app下载官网
  • 全国城管改革什么时候结束
  • 山西税务体检医院
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设