0

0

HTML5 Canvas的常用线条属性值总结_html5教程技巧

php中文网

php中文网

发布时间:2016-05-16 15:45:38

|

2626人浏览过

|

来源于php中文网

原创

线条属性概述
线条的属性共有以下四个:
1、linecap属性
linecap 定义上下文中线的端点,可以有以下 3 个值。

butt:默认值,端点是垂直于线段边缘的平直边缘。
round:端点是在线段边缘处以线宽为直径的半圆。
square:端点是在选段边缘处以线宽为长、以一半线宽为宽的矩形。

2、 lineJoin属性
lineJoin 定义两条线相交产生的拐角,可将其称为连接。在连接处创建一个填充三角形,可以使用 lineJoin 设置它的基本属性。

miter:默认值,在连接处边缘延长相接。miterLimit 是角长和线宽所允许的最大比例(默认是 10)。
bevel:连接处是一个对角线斜角。
round:连接处是一个圆。

3、线宽
lineWidth 定义线的宽度(默认值为 1.0)。

立即学习前端免费学习笔记(深入)”;


4、笔触样式
strokeStyle 定义线和形状边框的颜色和样式。
后面两个前面已经说过了,这里我们着重来看看前两个属性。
线条的帽子lineCap

废话不多说,直接上代码看效果。

JavaScript Code复制内容到剪贴板
  1. nbsp;html>   
  2. "zh">   
  3.   
  4.      "UTF-8">   
  5.     线条的帽子   
  6.   
  7.   
  8. "canvas-warp">   
  9.     "canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
  10.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
  11.        
  
  •   
  •     window.onload = function(){   
  •         var canvas = document.getElementById("canvas");   
  •         canvas.width = 800;   
  •         canvas.height = 600;   
  •         var context = canvas.getContext("2d");   
  •   
  •         context.lineWidth = 50;   
  •         context.strokeStyle = "#1BAAAA";   
  •   
  •         context.beginPath();   
  •         context.moveTo(100,100);   
  •         context.lineTo(700,100);   
  •         context.lineCap = "butt";   
  •         context.stroke();   
  •   
  •         context.beginPath();   
  •         context.moveTo(100,300);   
  •         context.lineTo(700,300);   
  •         context.lineCap = "round";   
  •         context.stroke();   
  •   
  •         context.beginPath();   
  •         context.moveTo(100,500);   
  •         context.lineTo(700,500);   
  •         context.lineCap = "square";   
  •         context.stroke();   
  •   
  •         //下面画两个基准线方便观察   
  •         context.lineWidth = 3;   
  •         context.strokeStyle = "black";   
  •   
  •         context.beginPath();   
  •         context.moveTo(100,0);   
  •         context.lineTo(100,600);   
  •         context.moveTo(700,0);   
  •         context.lineTo(700,600);   
  •         context.stroke();   
  •     }   
  •   
  •   
  •   
  •   
  • 运行结果:
    2016317114136241.jpg (850×500)

    这里我还做了两条平行线做一下参考,这样一眼就能看清lineCap三个值的特点。但要注意,这个帽子只在线条的端点处起作用,哪怕是折点很多的折线,也仅仅是在开始和终止的两个端点带帽子。如果想改变线条折点(两个线段的连接处)的样式,那就要用到下面的lineJoin属性。
    线条的连接lineJoin

    X Detector
    X Detector

    最值得信赖的多语言 AI 内容检测器

    下载

    废话不多说,直接上代码看效果。这段代码改自4-3,只是设置了一下连接的属性。

    JavaScript Code复制内容到剪贴板
    1. nbsp;html>   
    2. "zh">   
    3.   
    4.      "UTF-8">   
    5.     线条的连接   
    6.   
    7.   
    8. "canvas-warp">   
    9.     "canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
    10.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
    11.        
      
  •   
  •     window.onload = function(){   
  •         var canvas = document.getElementById("canvas");   
  •         canvas.width = 800;   
  •         canvas.height = 600;   
  •         var context = canvas.getContext("2d");   
  •   
  •         context.beginPath();   
  •         context.moveTo(100,100);   
  •         context.lineTo(300,300);   
  •         context.lineTo(100,500);   
  •         context.lineJoin = "miter";   
  •         context.lineWidth = 20;   
  •         context.strokeStyle = "red";   
  •         context.stroke();   
  •   
  •         context.beginPath();   
  •         context.moveTo(300,100);   
  •         context.lineTo(500,300);   
  •         context.lineTo(300,500);   
  •         context.lineJoin = "bevel";   
  •         context.lineWidth = 20;   
  •         context.strokeStyle = "blue";   
  •         context.stroke();   
  •   
  •         context.beginPath();   
  •         context.moveTo(500,100);   
  •         context.lineTo(700,300);   
  •         context.lineTo(500,500);   
  •         context.lineJoin = "round";   
  •         context.lineWidth = 20;   
  •         context.strokeStyle = "black";   
  •         context.stroke();   
  •     }   
  •   
  •   
  •   
  • 运行结果:
    2016317114422384.jpg (850×500)

    看不清的童鞋自己放大网页或者自己将代码的线宽调宽一点。
    这里有一个很隐蔽的属性,就是当lineJoin设置为miter时(默认),会解锁一个成绩,可以使用miterLimit属性。
    举个例子看看。

    JavaScript Code复制内容到剪贴板
    1. nbsp;html>   
    2. "zh">   
    3.   
    4.      "UTF-8">   
    5.     miterLimit   
    6.   
    7.   
    8. "canvas-warp">   
    9.     "canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
    10.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
    11.        
      
  •   
  •     window.onload = function(){   
  •         var canvas = document.getElementById("canvas");   
  •         canvas.width = 800;   
  •         canvas.height = 600;   
  •         var context = canvas.getContext("2d");   
  •   
  •         context.beginPath();   
  •         context.moveTo(100,100);   
  •         context.lineTo(300,300);   
  •         context.lineTo(100,500);   
  •         context.lineJoin = "miter";   
  •         context.miterLimit = 10;   
  •         context.lineWidth = 5;   
  •         context.strokeStyle = "red";   
  •         context.stroke();   
  •   
  •         context.beginPath();   
  •         context.moveTo(300,200);   
  •         context.lineTo(500,300);   
  •         context.lineTo(300,400);   
  •         context.lineJoin = "miter";   
  •         context.miterLimit = 10;   
  •         context.lineWidth = 5;   
  •         context.strokeStyle = "blue";   
  •         context.stroke();   
  •   
  •         context.beginPath();   
  •         context.moveTo(500,290);   
  •         context.lineTo(700,300);   
  •         context.lineTo(500,310);   
  •         context.lineJoin = "miter";   
  •         context.miterLimit = 10;   
  •         context.lineWidth = 5;   
  •         context.strokeStyle = "black";   
  •         context.stroke();   
  •     }   
  •   
  •   
  •   
  • 运行结果:
    2016317114500411.jpg (850×500)

    会发现,这个miterLimit规定了一个自动填充连接点的极限值。如果超过了这个值,会导致lineJoin属性失效,会从 miter 变成 bevel。可以看出来,这个值和线宽以及夹角有关,具体是啥关系。看下图。
    2016317114533839.jpg (1241240×530)

    可以看到,关系有点复杂。有兴趣的小伙伴可以推导一下这个值与线宽、夹角的函数关系。其实,大多时候用不到这个隐藏属性,即便用到了也是凭感觉写个数然后不满意再调试即可。
    高级线段绘制举例
    实际在画布上绘制线段时,会有一些奇怪的现象发生,这里融合本节课学到的两个线段的属性讲解一个。

    JavaScript Code复制内容到剪贴板
    1. nbsp;html>   
    2. "zh">   
    3.   
    4.      "UTF-8">   
    5.     miterLimit   
    6.   
    7.   
    8. "canvas-warp">   
    9.     "canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
    10.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
    11.        
      
  •   
  •     window.onload = function(){   
  •         var canvas = document.getElementById("canvas");   
  •         canvas.width = 800;   
  •         canvas.height = 600;   
  •         var context = canvas.getContext("2d");   
  •   
  •         // 实例1: 圆形端点,斜角连接,在画布左上角   
  •         context.beginPath();   
  •         context.moveTo(0,0);   
  •         context.lineTo(180,0);   
  •         context.lineTo(180,180);   
  •         context.lineJoin = 'bevel';   
  •         context.lineCap = 'round';   
  •         context.lineWidth = 10;   
  •         context.strokeStyle = "red";   
  •         context.stroke();   
  •   
  •         // 实例2: 圆形端点,斜角连接,不在画布左上角   
  •         context.beginPath();   
  •         context.moveTo(300,200);   
  •         context.lineTo(480,200);   
  •         context.lineTo(480,380);   
  •         context.lineJoin = 'bevel';   
  •         context.lineCap = 'round';   
  •         context.lineWidth = 10;   
  •         context.strokeStyle = "blue";   
  •         context.stroke();   
  •   
  •         // 实例3: 平直端点,圆形连接,不在画布左上角   
  •         context.beginPath();   
  •         context.moveTo(600,400);   
  •         context.lineTo(780,400);   
  •         context.lineTo(780,580);   
  •         context.lineJoin = 'round';   
  •         context.lineCap = 'butt';   
  •         context.lineWidth = 10;   
  •         context.strokeStyle = "black";   
  •         context.stroke();   
  •     }   
  •   
  •   
  •   
  • 运行结果:
    2016317114621147.jpg (850×500)

    这 3 个线段和连接的实例有助于说明在画布上绘制线段时不同属性的组合。
    实例 1 尝试从画布左上角开始绘制,结果发生了一个奇怪的现象。Canvas 路径在 x 轴和 y 轴方向上都绘制到了起点的外侧。由于这个原因实例 1 上面的线看起来要细些。另外,左上角水平部分中圆形端点也无法看到,它们都被绘制到了屏幕之外的负值坐标区域。此外,lineJoin 定义的对角线斜角也没有绘出。
    实例 2 调整了例子 1 中出现的问题,将起始点离开左上角。这样就绘制出了完整的水平线,并且圆形 lineCap 和斜角 lineJoin 都被绘制出来了。
    实例 3 显示了去掉 lineCap 设置后的默认端点效果,并且将 lineJoin 调整为圆角。

    相关文章

    H5页面制作适合哪些应用场景

    H5页面制作如何进行测试

    H5页面制作的流程是怎样的

    H5页面制作能做什么

    H5页面制作是开发网页吗

    HTML速学教程(入门课程)
    HTML速学教程(入门课程)

    HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    上一篇:HTML5 画布canvas使用方法_html5教程技巧 下一篇:多视角3D逼真HTML5水波动画 _html5教程技巧

    热门AI工具

    更多

    相关专题

    更多
    Java 桌面应用开发(JavaFX 实战)
    Java 桌面应用开发(JavaFX 实战)

    本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

    37

    2026.01.14

    php与html混编教程大全
    php与html混编教程大全

    本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

    19

    2026.01.13

    PHP 高性能
    PHP 高性能

    本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

    37

    2026.01.13

    MySQL数据库报错常见问题及解决方法大全
    MySQL数据库报错常见问题及解决方法大全

    本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

    19

    2026.01.13

    PHP 文件上传
    PHP 文件上传

    本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

    16

    2026.01.13

    PHP缓存策略教程大全
    PHP缓存策略教程大全

    本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

    6

    2026.01.13

    jQuery 正则表达式相关教程
    jQuery 正则表达式相关教程

    本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

    3

    2026.01.13

    交互式图表和动态图表教程汇总
    交互式图表和动态图表教程汇总

    本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

    45

    2026.01.13

    nginx配置文件详细教程
    nginx配置文件详细教程

    本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

    9

    2026.01.13

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    相关下载

    更多

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    HTML5/CSS3/JavaScript/ES6入门课程
    HTML5/CSS3/JavaScript/ES6入门课程

    共102课时 | 6.7万人学习

    HTML+CSS基础与实战
    HTML+CSS基础与实战

    共132课时 | 9.5万人学习

    前端开发(基础+实战项目合集)
    前端开发(基础+实战项目合集)

    共60课时 | 3.8万人学习

    最新文章

    更多
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号