返回顶部
首页 > 资讯 > 前端开发 > JavaScript >html5 Canvas如何画直线与设置线条的样式
  • 150
分享到

html5 Canvas如何画直线与设置线条的样式

2024-04-02 19:04:59 150人浏览 八月长安
摘要

这篇文章给大家分享的是有关HTML5 canvas如何画直线与设置线条的样式的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在学画画的时候,线条是最基本的了,而线条的连接可以组成任

这篇文章给大家分享的是有关HTML5 canvas如何画直线与设置线条的样式的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

在学画画的时候,线条是最基本的了,而线条的连接可以组成任何图形。在Canvas中也是如此。
在开始之前我们先拿出画布和画笔:

代码如下:


var cvs = document.getElementById('cvs'); //画布
var ctx = cvs.getContext('2d'); // 画笔


我们画画的时候,落笔点是不固定的,随时都会变。canvas虽然不是通过手来决定落笔点,但也有一个方法,就是moveTo。moveTo的作用相当于把笔尖提离画布,然后移动到指定的点(即坐标)。

代码如下:


ctx.moveTo(x,y)


此过程中不会画出任何图形,相当于你提着笔在画布上晃来晃去。
但晃来晃去是没用的,我们必须开始画。先画最简单的:直线
画直线的方法即lineTo,他的参数和moveTo一样的,都是一个点。
ctx.lineTo(x,y)当然,你画线的时候,落笔点也跟着移动了,所以lineTo之后落笔点就变成了他的目标点了。

代码如下:


ctx.moveTo(100,100);
ctx.lineTo(200,100);


此时你刷新网页,会发现画布上没有预想中的线,什么也没有。因为我们还少了一个步骤.lineTo其实是画的一条“路径”,本身是不可见的。如果要让他显示出来,我们必须对他进行“画”的操作。
用过PS的同学,肯定能知道图形的两种模式,一种是填充,另一种是描边。现在我们已经画了一条线,相当于PS中勾了一条路径,此时给路径描一下边,就能显示出图形了。
canvas描边的方法是stroke().现在让我们把代码补全:

代码如下:


ctx.moveTo(100,100);
ctx.lineTo(200,100);


ctx.stroke();此时刷新,就能看到一条线了。当然,你也可以连续绘制出几百条路径,再执行描边动作,即可一下画出几百条线。现在我们来用4条线画一个矩形:

代码如下:


ctx.moveTo(100,100);
ctx.lineTo(200,100);
ctx.lineTo(200,200);
ctx.lineTo(100,200);
ctx.lineTo(100,100);
ctx.stroke();


这里我们就是先绘出全部路径,再一次性描边。
——–作者的抱怨:Canvas绘图有个不好的地方就是:基本靠猜,很不直观。
严重提示:canvas的绘图过程(即填充与描边)是非常消耗资源的,如果想节省系统资源提高效率,最好是绘制好所有路径,再一次性填充或描边图形。
由上面的图形我们可以看出,默认的线条粗细是1px,而线条颜色是黑色。当然我们可以设置他们,但奇怪的是设置线条宽度是lineWidth,而设置线条样式的却叫strokeStyle,为什么不是lineStyle呢?我也不知道。:

代码如下:


ctx.lineWidth = 10;
ctx.strokeStyle = 'rgba(255,0,0,0.5)';


上面的代码把线条宽度设置成了10px,线条颜色变成了半透明的红色。

html5 Canvas如何画直线与设置线条的样式

如图1,刷新一下,好像有点不对呢!怎么左上角缺了一小块似得?这不是错觉。原因嘛要从canvas的线条绘制方式说起。
问题:如果我画的矩形路径是宽高都是100,此时我的边线宽度是10px,那么这个描了边的矩形整体宽高是多少?是100+10*2=120吗?
如果边线是完全描在路径外侧的话,那么就是120。但Canvas不是。Canvas中的线条都有一条“中线”,这条中线位于line的绝对中间,线条的笔画以中线向两侧扩展。比如你的线条宽度是1,那么中线就在0.5的位置;宽度是5,那么中线就是在2.5。canvas的图形在描边的时候,都是路径与line的中线贴合,然后描边。如图2:

html5 Canvas如何画直线与设置线条的样式


所以,描边的时候线的一半在外侧,一半在内侧,即上面的矩形的整体宽度是100+(10/2)*2,等于110.
也正是因为这个原因,左上角出现缺角就理所当然了。因为这里没人画。
但为什么其余的角没有出现缺口呢?看你的图不是4个角都有缺口吗?
那是因为,我画线的过程中没有把画笔“提起来”,画笔是连续的,即没有moveTo过。不信我们现在来moveTo一下:

代码如下:


ctx.moveTo(100,100);
ctx.lineTo(200,100);
ctx.moveTo(200,100); //注意这里
ctx.lineTo(200,200);
ctx.lineTo(100,200);
ctx.lineTo(100,100);
ctx.lineWidth = 10;
ctx.strokeStyle = 'rgba(255,0,0,0.5)';
ctx.stroke();


我们再画第二条线之前moveTo了一下,而且moveTo连坐标都没变,还是那个点,但刷新后图形变成了这个样子[图3]:

html5 Canvas如何画直线与设置线条的样式


明白了?因为我们把笔提起来了。
现在我们删掉moveTo,不要纠结他了,我们来思考一下如何把左上角那个缺角给补上?
首先问个问题,我们的路径闭合了吗?这不是废话么,我们不是已经把路径绕回原点了么?当然算是闭合了!
错!这样只是让路径最后一个点和起点重合了而已,路径本身却没有闭合!
Canvas怎么闭合路径?用closePath().

代码如下:


ctx.moveTo(100,100);
ctx.lineTo(200,100);
ctx.lineTo(200,200);
ctx.lineTo(100,200);
ctx.lineTo(100,100);
ctx.closePath();//闭合路径
ctx.lineWidth = 10;
ctx.strokeStyle = 'rgba(255,0,0,0.5)';
ctx.stroke();


此时刷新,就是一个完美的正方形了。图4:

html5 Canvas如何画直线与设置线条的样式


无论我们把线条改到多粗————越粗越有人喜欢是吧?————这个四方形的四个角都是规矩的直角,不会出现圆滑的情况。圆滑的角是什么情况?请看PS中的四方形描边,图5:

html5 Canvas如何画直线与设置线条的样式


看到了吧,越粗的边线,他的角的圆弧越大。
如果我想Canvas里面的边线也和PS这种一样,有没有办法呢?当然有,就是lineJoin属性。
lineJoin,意思即线的交汇处,有3个属性:miter(默认,尖角),bevel(斜角),round(圆角),如图6:
html5 Canvas如何画直线与设置线条的样式 
毫无疑问我们一下就能明白我们的矩形用的是尖角,所以试着把他改成圆角看看:
图形变成了这样,图7:
html5 Canvas如何画直线与设置线条的样式 
有点像PS的了吧?
另外,通过前面图我们了解到,Canvas的线条两端是平的,可不可以改呢?毕竟平的不好看。
也是可以的,即lineCap属性,这个就是定义线条的端点。lineCap有3个值:butt(平,默认),round(圆),square(方),如图8
html5 Canvas如何画直线与设置线条的样式 
看图就能发现,其实平头跟方头是一样的,区别只是平头没有伸出去那么一截。圆头和方头都会伸出去一截,这一节是多长呢?就是线条宽度的一半。
你有没有想到什么?哈哈,前面的闭合路径的问题,如果我们把lineCap设为方头,效果也是一样的!
但为了保险起见,我们还是要把路径闭合了,切记!
我还要提醒一下:闭合的路径没有端点!所以闭合的路径上看不到端点的样式。
另外:lineCap与lineJoin有点相似,注意不要搞混。
如果你眼尖并且运气不好,你可能会发现有时候1像素的线条不是1像素宽,好像要宽一些,模糊一些。如图9:
html5 Canvas如何画直线与设置线条的样式

感谢各位的阅读!关于“html5 Canvas如何画直线与设置线条的样式”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: html5 Canvas如何画直线与设置线条的样式

本文链接: https://lsjlt.com/news/82969.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • html5 Canvas如何画直线与设置线条的样式
    这篇文章给大家分享的是有关html5 Canvas如何画直线与设置线条的样式的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在学画画的时候,线条是最基本的了,而线条的连接可以组成任...
    99+
    2024-04-02
  • html5如何使用canvas画一条线
    这篇文章将为大家详细讲解有关html5如何使用canvas画一条线,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。var canvas=document.getE...
    99+
    2024-04-02
  • Html5中怎么用canvas标签画多条直线
    这篇文章给大家分享的是有关Html5中怎么用canvas标签画多条直线 的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 下面例子为用canvas标签...
    99+
    2024-04-02
  • HTML5 Canvas中如何用路径描画线条
    HTML5 Canvas中如何用路径描画线条,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。对于HTML5 Canvas,我们可...
    99+
    2024-04-02
  • html5 Canvas中如何画曲线
    这篇文章给大家分享的是有关html5 Canvas中如何画曲线的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 在canvas画线条这篇文章中,我讲了...
    99+
    2024-04-02
  • 如何绘制HTML5中的Canvas基本线条
    本篇文章为大家展示了如何绘制HTML5中的Canvas基本线条,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。怎么画线条?和现实中画画差不多:1.移动画笔,使画笔移动...
    99+
    2024-04-02
  • 怎么用canvas组件绘画一条固定的直线
    这篇文章主要讲解了“怎么用canvas组件绘画一条固定的直线”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用canvas组件绘画一条固定的直线”吧!我们先了解一下canvas组件:wxm...
    99+
    2023-06-26
  • HTML5中如何用路径描画线条
    这篇文章主要介绍“HTML5中如何用路径描画线条”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“HTML5中如何用路径描画线条”文章能帮助大家解决问题。 对于HTM...
    99+
    2024-04-02
  • html5的画布canvas如何画出弧线和旋转的图形
    本篇文章给大家分享的是有关html5的画布canvas如何画出弧线和旋转的图形,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 ...
    99+
    2024-04-02
  • html5中如何使用canvas画一个对角线
    小编给大家分享一下html5中如何使用canvas画一个对角线,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • 如何用html5的canvas画布绘制贝塞尔曲线
    这篇“如何用html5的canvas画布绘制贝塞尔曲线”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来...
    99+
    2024-04-02
  • css如何设置边框线样式
    这篇文章将为大家详细讲解有关css如何设置边框线样式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。css的基本语法是什么css的基本语法是:1、css规则由选择器和一条或多条声明两个部分构成;2、选择器通...
    99+
    2023-06-14
  • css如何设置边框的虚线样式
    这篇文章主要为大家展示了“css如何设置边框的虚线样式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“css如何设置边框的虚线样式”这篇文章吧。   首先要知道...
    99+
    2024-04-02
  • 怎么设置微信小程序线条样式
    这篇文章主要介绍“怎么设置微信小程序线条样式”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么设置微信小程序线条样式”文章能帮助大家解决问题。canvasContext.setStrokeStyle...
    99+
    2023-06-26
  • 小程序怎么设置线条交点样式
    本篇内容介绍了“小程序怎么设置线条交点样式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!canvasContext.setLineJoin定...
    99+
    2023-06-26
  • 如何使用HTML5的Canvas绘制曲线
    这篇文章主要讲解了“如何使用HTML5的Canvas绘制曲线”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用HTML5的Canvas绘制曲线”吧!Ca...
    99+
    2024-04-02
  • visio2007如何设置线条长度
    本文小编为大家详细介绍“visio2007如何设置线条长度”,内容详细,步骤清晰,细节处理妥当,希望这篇“visio2007如何设置线条长度”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。visio2007设置线条...
    99+
    2023-07-06
  • 如何使用HTML5 Canvas画线技巧来实现绘制一个像素宽的细线
    如何使用HTML5 Canvas画线技巧来实现绘制一个像素宽的细线,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 ...
    99+
    2024-04-02
  • matlab之plot画图如何设置线条类型和颜色
    在Matlab中,可以使用plot函数来绘制图形。要设置线条类型和颜色,可以使用该函数的额外参数。 要设置线条类型,可以使用参数'L...
    99+
    2023-10-23
    matlab
  • HTML5中如何设置placeholder的样式
    这篇文章主要介绍了HTML5中如何设置placeholder的样式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。   首先我们来了解一下p...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作