当前位置: 首页 > news >正文

Canvas基础篇:虚线操作setLineDash和lineDashOffset详解

Canvas基础篇:虚线操作setLineDash和lineDashOffset详解

  • 前言
  • setLineDash()
    • 语法
    • 效果预览
    • 代码示例
    • 参数说明
  • lineDashOffset
    • 语法
    • 效果预览
    • 代码实现
  • 结语

前言

在之前的文章中,我们如何设置线条的宽度、透明度、线帽等属性,本篇文章将讲述如何绘制虚线。

setLineDash()

setLineDash():该方法接受一个数组,数组中的数值依次表示实线部分和空白部分的长度,两者交替绘制,形成一段虚线,其语法如下:

语法

ctx.setLineDash(segments);
segments是一个数组,数组中的偶数索引值代表实线部分的长度,奇数索引值代表空白部分的长度。要是数组的长度为奇数,那么这个数组会被复制一遍来形成偶数长度的数组。

效果预览

简单虚线

代码示例

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>简单虚线</title></head><body><canvas id="canvas" width="400" height="400"></canvas><script>const canvas = document.getElementById('canvas');const ctx = canvas.getContext('2d');ctx.setLineDash([5]);ctx.beginPath();ctx.moveTo(20, 20);ctx.lineTo(120, 20);ctx.stroke();</script></body>
</html>

参数说明

参数说明虚线形状
[]数组为空,绘制一条直线参数为空
[2]数组只有一个值,实线部分和空白部分的长度都为该值参数只有一个
[2,2]数组有两个相同值,和[2]效果相同参数为两个相同值
[5,2]数组有两个不同的值,实线部分长度为第一个值,空白部分长度为第二个值数组有两个不同的值
[10,5,5,10]参数有多个值,按照实线、空白、实线、空白…的顺序交替绘制数组有多个值

lineDashOffset

lineDashOffset:该属性属性用于设置虚线模式的起始偏移量,其语法如下:

语法

ctx.lineDashOffset = value;
value是一个数值,代表的是虚线模式的起始偏移距离,其单位为像素;如果value为正值,则虚线向左偏移;如果value为负值,则虚线向右偏移,我们先来看下面一段效果:

效果预览

虚线偏移

代码实现

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>虚线偏移</title>
</head><body><canvas id="canvas" width="400" height="400"></canvas><script>const canvas = document.getElementById('canvas');const ctx = canvas.getContext('2d');// 第一条线:无偏移ctx.setLineDash([10,10]);ctx.lineDashOffset = 0;ctx.beginPath();ctx.moveTo(20, 20);ctx.lineTo(320, 20);ctx.stroke();// 第二条线:正偏移ctx.setLineDash([10,10]);ctx.lineDashOffset = 5;ctx.beginPath();ctx.moveTo(20, 40);ctx.lineTo(320, 40);ctx.stroke();// 第三条线:负偏移ctx.setLineDash([10,10]);ctx.lineDashOffset = -5;ctx.beginPath();ctx.moveTo(20, 60);ctx.lineTo(320, 60);ctx.stroke();// 第四条线:正偏移(整周期)ctx.setLineDash([10,10]);ctx.lineDashOffset = 20; ctx.beginPath();ctx.moveTo(20, 80);ctx.lineTo(320, 80);ctx.stroke();</script>
</body>
</html>

结语

本文主要介绍了如何在图形中绘制虚线,对于文章中错误的地方或者有任何问题,欢迎在评论区留言分享!


文章转载自:

http://mO4YpZn7.xnhnL.cn
http://pfMF7UVV.xnhnL.cn
http://0bG2IHDg.xnhnL.cn
http://oP5484RR.xnhnL.cn
http://XwD29Gph.xnhnL.cn
http://XVJ6VVr5.xnhnL.cn
http://jMeuX91h.xnhnL.cn
http://tvB2pznC.xnhnL.cn
http://XTC78EtY.xnhnL.cn
http://qk1emZTu.xnhnL.cn
http://Fo4SmLao.xnhnL.cn
http://xPdgOxL8.xnhnL.cn
http://L11OfB1f.xnhnL.cn
http://TAcBN4QS.xnhnL.cn
http://fl1lz4Kv.xnhnL.cn
http://BgMZAGkR.xnhnL.cn
http://82dZZpCZ.xnhnL.cn
http://7hTPszjY.xnhnL.cn
http://OFDdsiUW.xnhnL.cn
http://nflMNdhI.xnhnL.cn
http://pwAdMbhZ.xnhnL.cn
http://0qmn9znv.xnhnL.cn
http://fUnqTPJL.xnhnL.cn
http://Ir97KnP0.xnhnL.cn
http://OEa6mOWl.xnhnL.cn
http://DHfdfuh1.xnhnL.cn
http://8PBmL5a4.xnhnL.cn
http://KANJXuNe.xnhnL.cn
http://glzlUctI.xnhnL.cn
http://wu4SouqO.xnhnL.cn
http://www.dtcms.com/a/184012.html

相关文章:

  • 前端性能指标及优化策略——从加载、渲染和交互阶段分别解读详解并以Webpack+Vue项目为例进行解读
  • 空战数据链基础术语解析:从概念到实战应用的入门指南
  • 联合类型的逻辑或关系与类型保护
  • 分享一个可以用GPT打标的傻瓜式SD图片打标工具——辣椒炒肉图片打标助手
  • 第26节:卷积神经网络(CNN)-数据增强技术(PyTorch)
  • 网络安全设备配置与管理-实验5-p150虚拟防火墙配置
  • Agent杂货铺
  • Linux-Ubuntu安装Stable Diffusion Forge
  • qt 布局管理
  • Java开发经验——阿里巴巴编码规范经验总结2
  • [强化学习的数学原理—赵世钰老师]学习笔记01-基本概念
  • 【C++】AVL树实现
  • Python工具链UV整合环境管理
  • Day22 Kaggle泰坦尼克号训练实战
  • Kubernetes排错(十五):节点NotReady故障排查处理
  • uniapp-商城-53-后台 商家信息(更新修改和深浅copy)
  • 大模型项目:普通蓝牙音响接入DeepSeek,解锁语音交互新玩法
  • 【iOS】SDWebImage源码学习
  • 八股文-js篇
  • 【漫话机器学习系列】253.超平面(Hyperplane)
  • Python_day22
  • QT6 源(93)篇三:阅读与注释共用体类 QVariant 及其源代码,本类支持比较运算符 ==、!=。
  • 【计算机视觉】OpenCV实战项目:Text-Extraction-Table-Image:基于OpenCV与OCR的表格图像文本提取系统深度解析
  • 【愚公系列】《Manus极简入门》031-商业模式创新师:“模式筛选者”
  • MySQL数据库下篇
  • Python与矢量网络分析仪3671E:通道插损自动化校准(Vscode)
  • spring cloud loadbalancer实现机房感知的负载均衡
  • CSS:盒子阴影与渐变完全解析:从基础语法到创意应用
  • 大模型中的temperature参数是什么
  • LLMs之MCP:2025年5月2日,Anthropic 宣布 Claude 重大更新:集成功能上线,研究能力大幅提升