位置: 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盘)

  • 苹果11微信变成黑色怎么改回来(苹果11微信变成黑色了)

    苹果11微信变成黑色怎么改回来(苹果11微信变成黑色了)

  • 打96067为什么是空号(为什么打96008是空号)

    打96067为什么是空号(为什么打96008是空号)

  • ps显示程序错误是什么原因(ps显示程序错误关不了)

    ps显示程序错误是什么原因(ps显示程序错误关不了)

  • 笔记本的del键在哪(笔记本del键坏了怎么办)

    笔记本的del键在哪(笔记本del键坏了怎么办)

  • 淘宝不合理评价有什么影响(淘宝不合理评价的处理是卖家举报的吗)

    淘宝不合理评价有什么影响(淘宝不合理评价的处理是卖家举报的吗)

  • qq被邀请进群需要本人同意怎么设置(qq邀请进群需要本人同意怎么设置)

    qq被邀请进群需要本人同意怎么设置(qq邀请进群需要本人同意怎么设置)

  • 网上高仿的苹果耳机跟真的有什么区别(网上高仿的苹果是正品吗)

    网上高仿的苹果耳机跟真的有什么区别(网上高仿的苹果是正品吗)

  • 打印机扫描是干嘛用的(打印机扫描作用)

    打印机扫描是干嘛用的(打印机扫描作用)

  • 移动光猫重置了怎么办(移动光猫重置了上不了网)

    移动光猫重置了怎么办(移动光猫重置了上不了网)

  • 苏宁会员有什么用(苏宁会员有什么好处)

    苏宁会员有什么用(苏宁会员有什么好处)

  • 华为5x能用电信卡吗(华为5x能用电信吗)

    华为5x能用电信卡吗(华为5x能用电信吗)

  • vivos1怎么分屏(vivos1怎么分屏两个光遇)

    vivos1怎么分屏(vivos1怎么分屏两个光遇)

  • 怎么删除文本占位符(怎么删除文本占用空间)

    怎么删除文本占位符(怎么删除文本占用空间)

  • wps怎么查关键词(wps怎样查找关键词)

    wps怎么查关键词(wps怎样查找关键词)

  • 苹果x有锁啥意思(苹果x有锁什么意思)

    苹果x有锁啥意思(苹果x有锁什么意思)

  • 手机拨号盘怎么恢复(手机拨号盘怎么设置)

    手机拨号盘怎么恢复(手机拨号盘怎么设置)

  • 小米6屏幕尺寸是多少(小米6屏幕尺寸几乘几)

    小米6屏幕尺寸是多少(小米6屏幕尺寸几乘几)

  • soul聊天小绿点什么意思(soul聊天的小绿点)

    soul聊天小绿点什么意思(soul聊天的小绿点)

  • get请求和post请求的区别(get请求和post请求的用法)

    get请求和post请求的区别(get请求和post请求的用法)

  • 爱奇艺怎么收藏视频(爱奇艺怎么收藏一集视频)

    爱奇艺怎么收藏视频(爱奇艺怎么收藏一集视频)

  • 华为mate20怎么开启NFC(华为mate20怎么开启高清通话)

    华为mate20怎么开启NFC(华为mate20怎么开启高清通话)

  • 小米mix2怎么开空调(小米mix2怎么开热点)

    小米mix2怎么开空调(小米mix2怎么开热点)

  • 小米9支持无线充电吗(小米9支持无线充电的手机)

    小米9支持无线充电吗(小米9支持无线充电的手机)

  • 详解Linux系统中crontab命令处理定时任务的用法(linux c gui)

    详解Linux系统中crontab命令处理定时任务的用法(linux c gui)

  • 营业税金及附加包括哪些
  • 计提个税与实际缴纳不一致
  • 所得税季度预缴纳税申报表
  • 进货增值税税率
  • 无票收入在增值税表中填哪
  • 代缴职工社保手续怎么办
  • 税局函调准备哪些资料
  • 事业单位下属企业员工转事业编
  • 退回投资款转为借款怎么记账
  • 2019小规模纳税人税率
  • 进项税未抵扣完怎么结转
  • 去年发生的成本但今年9月份才开票付款
  • 当天收入支出日报表怎么做
  • 个人给公司垫付款起诉状
  • 制造费用结转生产成本金蝶怎么操作
  • 无形资产换出
  • 公司合并后业务怎么办
  • 事业单位乱报销出纳怎么办?
  • 固定资产报废需要税务备案吗
  • 离线开票时间超限怎么办 发票都已经报送
  • 餐饮消费,碰到商家不愿意开发票怎么办?
  • 卖仪表赚钱吗
  • 往年银行余额和账目不符怎么调整
  • 应收账款负数可以调到哪个科目
  • 电子发票字体不同
  • 金税盘月末做哪些事情
  • 申报个税按计提工资还是实际发放
  • 应付职工薪酬的贷方表示什么
  • 计提本月短期借款利息1000元
  • 保证合同的担保范围包括
  • 如何取消置顶聊天折叠
  • 局域网解决方案
  • 多交的增值税可以做营业外支出吗?
  • 股东未实缴资本,因为经营困难借给公司钱,可以要求返还
  • 固定资产原值,净值,价值的区别
  • 2021前端面试题目100及最佳答案
  • 小规模核定征收突然转查账
  • 应付职工薪酬包括个人社保和个税吗
  • vue-cli typescript
  • 企业破产时的退出机制
  • cuda安装步骤
  • 火爆全网的头像男
  • transformer模型包含哪些结构
  • 微擎框架安装教程
  • 货币盘盈盘亏账怎么算
  • 抄税前要做什么
  • 小规模印花税可以按次申报吗
  • 同一控制下企业合并发生的审计费用计入
  • sql函数coalesce
  • 公司车辆过户给个人需要多少费用
  • 个别计价法下,把每一种存货的实际成本
  • 投资收益账户属于所有者权益类吗
  • 未开票收入不入账以规避税收
  • 企业稳岗补贴计算公式
  • 会计记错账有什么后果
  • 餐费计入哪个科目合理避税
  • 银行贷款损失的计算公式
  • 发票为什么被列为金额
  • 装修工程人工费占总价比例
  • 企业多结转的成本跨年怎么冲回?
  • 满减送的购物券在哪里看
  • ubuntu怎么安装包
  • windows提示音神曲
  • 强制关闭mac系统的快捷键
  • 怎么把硬盘安装到电脑上
  • win8.1隐藏文件夹
  • linux在实际工作中的应用
  • cocos2dx-js
  • LayoutInflater.inflate方法解析
  • bat关闭bat
  • 全面了解中国历史英文
  • Unity3D中ScreenPointToRay函数的分析-个人见解
  • android中文文档
  • unity教程完整版
  • 安卓开源好处
  • 税务局试用期
  • 成都税务局发票查询
  • 居间服务费税收优惠政策
  • 交社保去地税局交吗
  • 城镇土地使用税减免税政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设