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

  • 怎么做微信营销来获取客户的信任,微信营销实战方法(如何做微信营销)

    怎么做微信营销来获取客户的信任,微信营销实战方法(如何做微信营销)

  • 手机号码被标记了怎么消除(手机号码被标记广告推销怎么取消)

    手机号码被标记了怎么消除(手机号码被标记广告推销怎么取消)

  • 怎么查手机登录几个微信号(怎么查手机登录设备信息)

    怎么查手机登录几个微信号(怎么查手机登录设备信息)

  • p40防抖功能怎么打开(p40pro ois防抖)

    p40防抖功能怎么打开(p40pro ois防抖)

  • 华硕热键启动是什么(华硕热键启动是哪个键)

    华硕热键启动是什么(华硕热键启动是哪个键)

  • 优酷tv版会员不通用吗(优酷的会员不能使在电视上这样合法吗?)

    优酷tv版会员不通用吗(优酷的会员不能使在电视上这样合法吗?)

  • 抖音头像修改达到上限怎么办(抖音修改头像会影响权重吗)

    抖音头像修改达到上限怎么办(抖音修改头像会影响权重吗)

  • 苹果16g内存不够怎么办(苹果16g内存不够用有什么办法增加)

    苹果16g内存不够怎么办(苹果16g内存不够用有什么办法增加)

  • 苹果手机贴膜后触摸不灵敏(苹果手机贴膜后面容不能用)

    苹果手机贴膜后触摸不灵敏(苹果手机贴膜后面容不能用)

  • 苹果手机微信信息延迟收到怎么解决(苹果手机微信信号接收慢原因)

    苹果手机微信信息延迟收到怎么解决(苹果手机微信信号接收慢原因)

  • 苹果11相机怎么设置镜像(苹果11相机怎么镜像转换)

    苹果11相机怎么设置镜像(苹果11相机怎么镜像转换)

  • 小米桌面云备份有用吗(小米桌面云备份删除有什么影响)

    小米桌面云备份有用吗(小米桌面云备份删除有什么影响)

  • 华为手机trt一al00a是什么型号(华为手机trt一al00a更多连接在哪)

    华为手机trt一al00a是什么型号(华为手机trt一al00a更多连接在哪)

  • ip属于哪一层(ip是哪一层的协议)

    ip属于哪一层(ip是哪一层的协议)

  • 苹果云盘照片怎么查看(苹果云盘照片怎么恢复)

    苹果云盘照片怎么查看(苹果云盘照片怎么恢复)

  • iphonex怎么修改营运商(iphonex怎么改apple id)

    iphonex怎么修改营运商(iphonex怎么改apple id)

  • 为什么公众号不能留言(为什么公众号不能置顶)

    为什么公众号不能留言(为什么公众号不能置顶)

  • 手机停机怎么查话费(手机停机怎么查余额话费)

    手机停机怎么查话费(手机停机怎么查余额话费)

  • win10怎么录屏(电脑win10怎么录屏)

    win10怎么录屏(电脑win10怎么录屏)

  • 怎么表达5g时代的具体含义(描述5g时代的一段话100字)

    怎么表达5g时代的具体含义(描述5g时代的一段话100字)

  • qq怎么设置闺蜜(QQ怎么设置闺蜜)

    qq怎么设置闺蜜(QQ怎么设置闺蜜)

  • 为什么玩游戏不能听歌(为什么玩游戏不能听书)

    为什么玩游戏不能听歌(为什么玩游戏不能听书)

  • 文字下沉2行怎么设置(word中将文字下沉2行)

    文字下沉2行怎么设置(word中将文字下沉2行)

  • 三维触控是什么(三维触控是什么手势)

    三维触控是什么(三维触控是什么手势)

  • Vue结合高德地图实现HTML写自定义信息弹窗(vue接入高德地图)

    Vue结合高德地图实现HTML写自定义信息弹窗(vue接入高德地图)

  • 增值税普通发票需要交税吗
  • 个体工商户需要交税吗?怎么交?
  • 应收账款可以挂其他应收款吗
  • 开的税票必须过期怎么办
  • 做网站的费用会计分录
  • 返利销售增值税
  • 会计中预付款余额是什么
  • 附加税减半征收政策从什么时候开始
  • 委托其他公司开票收款
  • 购买无形资产的价款超过正常信用
  • 脚手架出租生意
  • 税务季报都报啥
  • 营改增后建筑行业税率
  • 为什么增值税发票税率是1%
  • 普通发票汇总上传
  • 房企行业其他应收账款的来源是什么
  • 其他应付款可以用其他应收款代替吗
  • 残疾人名下有房产可以申请残疾人补贴吗?
  • 财政资金安排促进高质量发展
  • word字体平滑
  • 预付加油卡发票可以报销吗
  • 工会经费的计税依据包括劳务费吗
  • 如果工资少发怎么办
  • 银河麒麟操作系统价格
  • 公司的对公账户
  • 跨年度发票的发票要报销应该怎么办
  • 应收账款怎么做分录
  • 任意盈余公积金的用途
  • Yii2实现ajax上传图片插件用法
  • php表单内容写入txt
  • vscode插件大全
  • 人工智能lisp
  • 2022年最新公务接待标准
  • php自动加载函数
  • css中权重值是什么意思
  • 关于低值易耗品的说法中不正确的是
  • 注销企业账面大量现金如何处理
  • 商品流通企业采用售价法核算条件下
  • 车补贴是要缴纳增值税吗
  • 商誉需要交税吗
  • 混合销售的含义
  • 扣交社保会计分录
  • 印花税征收范围口诀
  • 如果不签合同会怎么样
  • 应交税费未交增值税借方表示什么
  • 业务招待费有
  • 银行备付金账户是什么帐户
  • 企业处置固定资产增值税税率
  • 先付款后开发票的会计分录?
  • 原料到产品
  • 资产负债表中应付职工薪酬是负数
  • 财务会计制度的基本要求
  • 实收资本挂在其他应收款现在股权转让
  • 收到投资款如何声明
  • 调整去年管理费用怎么做分录
  • 安装sql server需要注意什么
  • mysql 5.7.17 winx64安装配置教程
  • wlms.exe是什么
  • win10打开命令提示符窗口
  • Linux中环境变量的用法
  • qvp32.exe - qvp32是什么进程 有什么作用
  • 怎么清空windows8电脑里全部东西
  • win1021年更新
  • win10系统如何创建新用户
  • linux ii
  • linux bfs
  • perl中splice
  • nodejs readdir
  • node_modules复制
  • vue做一个table
  • js过滤filter
  • javascript运用
  • 猫咪的testflight
  • 要使物体从静止状态转变为运动状态需要对这个物体什么
  • jQuery模拟select实现下拉菜单功能
  • 摩托车车船税怎么收费标准
  • 河南电子税务局残保金怎么申报
  • 微信收款商业版和个人经营收款码区别
  • 纳税服务的背景是什么
  • 朝阳银行作息时间
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设