您现在的位置是:网站首页> 编程资料编程资料
HTML5中canvas中的beginPath()和closePath()的重要性html5 Canvas绘制线条 closePath()实例代码
2021-09-02
2199人已围观
简介 这篇文章主要介绍了HTML5中canvas中的beginPath()和closePath()的重要性,需要的朋友可以参考下
beginPath的作用很简单,就是开始一段新的路径,但在使用canvas绘图的过程中却非常重要
先来看一小段代码:
var ctx=document.getElementById("canvas").getContext("2d"); ctx.beginPath(); ctx.rect(150,150,100,100); ctx.fillStyle="green"; ctx.fill(); ctx.rect(0,0,100,100); ctx.fillStyle="yellow"; ctx.fill();我们的代码没有错误,但得到的却是两个边长100px的黄色的正方形,而不是一绿一黄,这是为什么呢?
事实上,canvas中的绘制方法(fill,stoke),都会以上一次“beginPath”之后的所有路径进行绘制,在上面的代码中第一个矩形fill了两次,第一次绿色,第二次黄色,所以得到了两个黄色矩形,同样的对于画线段,或其他曲线,图形,不管你moveTo到哪,只要你没有beiginPath,你都是在画一条路径。
如果你画的图形和你想象的不一致,记得查看一下beginPath。
谈到beginPath就不得不提一下closePath,事实上两者并无关系,closePath的意思是关闭路径,不是结束路径,它只是将路径的终点与起点相连,不是开始一个新路径。
我们在上面代码中第一个fill的后面添加一个closePath,得到的仍是两个黄色矩形。
但我们在后面添加一个beginPath,则得到两个不同颜色的矩形。
总而言之,不要试图通过闭合一段路径来开始新的路径,而且如果你不闭合路径,即使开始新的路径,其也不会闭合。
补充:canvas的Beginpath和Closepath理解
beginPath()方法
var ctx = document. getElementById ( 'cvs' ) . getContext ( '2d' ) ; ctx. beginPath ( ) ; ctx. moveTo ( 100.5 , 20.5 ) ; ctx. lineTo ( 200.5 , 20.5 ) ; ctx. stroke ( ) ; ctx. moveTo ( 100.5 , 40.5 ) ; ctx. lineTo ( 200.5 , 40.5 ) ctx. strokeStyle = '#f00' ; ctx. stroke ( ) ;
其中的0.5是为了避免线条模糊问题。那么上面的代码会得到什么样的图形呢?是不是一条黑线一条红线呢?
从代码上看,我们的逻辑毫无问题,但结果是我们得到的是两条红线,并不是一黑一红。
如果你明白这是为什么,那后面的你就不用看了。这就是beginPath的重要性。
canvas中的绘制方法(如stroke,fill),都会以“上一次beginPath”之后的所有路径为基础进行绘制。比如上面的代码里面我stroke了两次,其实这两次都是以第一次beginPath后的所有路径为基础画的。也就是说第一条路径我们stroke了两下,第一下是黑的,第二下是红的,所以最终也是红的。
1.不管你用moveTo把画笔移动到哪里,只要不beginPath,那你一直都是在画一条路径。
2.fillRect与strokeRect这种直接画出独立区域的函数,也 不 会打断当前的path.
如果你画出的图形和你想像的不一样,记得查看是否有合理的beginPath.
————————————–
说到 beginPath ,就不得不提到 closePath ,两者是不是有很“紧”的联系呢?答案是 几乎没有关系 。
closePath的意思不是结束路径,而是 关闭 路径,它会试图从当前路径的终点连一条路径到起点,让整个路径闭合起来。但是,这并不意味着它之后的路径就是新路径了!
我们在上面的代码的第一个lineTo后面加上closePath,可以发现还是得到了两条红线。
但如果我们在第一个stroke后面加上beginPath,则会如愿得到一条黑线一条红线。
ctx. stroke ( ) ; ctx. beginPath ( ) ; //注意啦! ctx. moveTo ( 100.5 , 40.5 ) ; ctx. lineTo ( 200.5 , 40.5 ) ctx. strokeStyle = '#f00' ; ctx. stroke ( ) ;
总而言之,就是 不要企图通过闭合现有路径来开始一条新路径 ,而开始一条新路径,以前的路径也不会闭合。
相关内容
- 基于HTML5的WebSocket的实例代码HTML5+WebSocket实现多文件同时上传的实例HTML5-WebSocket实现聊天室示例浅析HTML5的WebSocket与服务器推送事件HTML5实现WebSocket协议原理浅析html5的websockets全双工通信详解学习示例利用html5的websocket实现websocket聊天室html5-websocket基于远程方法调用的数据交互实现
- 基于Html5实现的react拖拽排序组件示例HTML5实现拖拽互动改变元素颜色特效html5拖拽应用记录及注意点HTML5拖拽功能实现的拼图游戏html5 拖拽及用 js 实现拖拽功能的示例代码
- 详解Html5微信支付爬坑之路HTML5仿微信支付页面代码html5仿支付宝密码框的实现代码基于HTML5+tracking.js实现刷脸支付功能
- html5 利用canvas手写签名并保存的实现方法canvas画布实现手写签名效果的示例代码如何用canvas实现在线签名的示例代码Html5基于canvas实现电子签名并生成PDF文档
- canvas绘制表情包的示例代码canvas里面如何基于随机点绘制一个多边形的方法详解canvas在圆弧周围绘制文本的两种写法canvas绘制视频封面的方法HTML5 canvas基本绘图之绘制阴影效果HTML5 canvas基本绘图之绘制曲线HTML5 canvas基本绘图之绘制线条HTML5 canvas基本绘图之绘制五角星HTML5 canvas基本绘图之绘制矩形HTML5 canvas基本绘图之绘制线段html5 canvas绘制矩形和圆形的实例代码
- canvas实现飞机打怪兽射击小游戏的示例代码H5 canvas实现贪吃蛇小游戏html5 canvas-2.用canvas制作一个猜字母的小游戏
- 你可能不熟练的十个前端HTML5经典面试题前端HTML+CSS笔试题面试题腾讯前端面试题相关知识点集锦这是今年前端最常见的面试题,你都会了吗(推荐)前端常见面试题总结1 前端高频面试题最全的前端面试题 前端面试题集合BAT及各大互联网公司2014前端笔试面试题(Html,Css篇)面试官一问一答式的前端面试题
- canvas学习笔记之绘制简单路径html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
- Html5如何唤起百度地图App的方法html5唤起app的方法
- 详解通过变换矩阵实现canvas的缩放功能html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
