【SVG】路径<Path>标签详解,一次搞懂所有命令参数

news2024/11/19 14:54:34

在上一篇文章 什么是SVG?——SVG快速入门 中我对SVG做了基础的介绍,这篇文章将集中讲解<path>标签

本站链接:什么是SVG?——SVG快速入门_gxyzlxf的博客-CSDN博客

稀土掘金链接:什么是SVG?——SVG快速入门 - 掘金

path的所有命令如下,除了M、L和Z 非常简单外,我会在这篇文章中对剩下的命令的用法进行详细介绍。

M = moveto 起始

L = lineto 连线

H = horizontal lineto 水平线

V = vertical lineto 垂直线

C = curveto 三次贝塞尔曲线

S = smooth curveto 三次贝塞尔曲线

Q = quadratic Bézier curve 二次贝塞尔曲线

T = smooth quadratic Bézier curveto 二次贝塞尔曲线

A = elliptical Arc 椭圆弧

Z = closepath 闭合(从最后一个点连直线到起始点)

使用大写字母表示绝对位置,小写字母表示相对位置(相对于起点的位置,向右向下为正)。

一、H和V命令,画水平/垂直线

这两个命令非常简单,命令后面跟上一个参数即可。

以H为例进行说明:使用大写H是绝对位置,表示从前一个点向该X坐标画一条水平线,比如下面第一行代码,相当于从(50,50)向(150,50)连线,线的长度为100。

而使用小写h是相对位置,相当于指定线的长度,长度为正表示向右向下,比如下面第二行代码,表示从(50,50)画一条长为150的水平线。

V和H用法完全相同,只不过把水平变成垂直而已。下面三行代码的效果如下:

<path d="M 50 50 H 150" stroke="blue" stroke-width="5" fill="none" />
<path d="M 50 80 h 150" stroke="blue" stroke-width="5" fill="none" />
<path d="M 50 80 v 50" stroke="blue" stroke-width="5" fill="none" />

二、Q和T命令,画二次贝塞尔曲线

(一)Q命令

Q后面跟两组坐标 x1 y1 x y 分别是控制点和终点,控制点的作用是确定起点和终点的曲线斜率

例子如下:前两行代码一个用的是大写Q,一个是小写q,绘制出了相同的形状。

<path d="M 50 250 Q 100 150 150 250" stroke="blue" stroke-width="5" fill="none" />
<path d="M 200 250 q 50 -100 100 0" stroke="blue" stroke-width="5" fill="none" />
<path d="M 350 250 q 20 -100 100 0" stroke="blue" stroke-width="5" fill="none" />

 

(二)T命令

T命令也是用来画二次贝塞尔曲线,但是后面只跟一组坐标,就是终点的坐标。

它其实是一种简写,让程序根据前一个控制点推测出这次的控制点(关于终点中心对称),所以使用T之前必须有一个控制点,换句话说,T必须跟着Q或T使用。如果单独使用,会默认控制点就是终点,则画出的是直线而不是曲线。

它的原理示意图是:

 

例子:第2行代码就是单独使用T命令的例子,画出的是直线 

<path d="M 50 450 q 50 -100 100 0 t 100 0 t 50 0" stroke="blue" stroke-width="5" fill="none" />
<path d="M 450 350 t 50 80" stroke="blue" stroke-width="5" fill="none" />

 

三、C和S命令,画三次贝塞尔曲线

(一)C命令

画三次贝塞尔曲线需要三组坐标点x1 y1 x2 y2 x y,分别是起点的控制点,用来控制曲线射出的方向;终点的控制点,用来控制曲线射入的方向;最后是终点。

原理示意图:

例:

<path d="M 100 550 C 50 600 250 600 200 550" stroke="blue" stroke-width="5" fill="none" />

 

(二)S命令

S命令和T命令一样,属于一种简写方式。只定义第二个控制点和终点,让程序根据之前的命令推测第一个控制点的位置(与前一条命令的第二个控制点关于前一条命令的终点中心对称),同样必须跟着C或S使用。如果单独使用,会默认两个控制点在同一位置,就变成了二次贝塞尔曲线。听着有点绕,看下面的原理示意图就很清晰了:

 

例:第2行代码就是单独使用T命令的例子,画出的是二次贝塞尔曲线 

<path d="M 300 550 C 250 600 450 600 400 550 s 150 -50 100 0" stroke="blue" stroke-width="5" fill="none" />
<path d="M 700 550 S 650 500 600 550" stroke="blue" stroke-width="5" fill="none" />

 

四、A命令,画椭圆弧

个人觉得是最复杂的一个命令,试了半天没试明白,又百度了半天,然后再自己尝试,总算搞懂了。

A后面跟的参数有点多,分别是:

1.x轴半径(可以写比例,写比例时默认用符合条件的最小值,参数4就没有意义了)

2.y轴半径(可以写比例,写比例时默认用符合条件的最小值,参数4就没有意义了)

3.x轴旋转度数(顺时针方向为正)

在前面三个参数确定的情况下,满足当前点到指定点(X,Y)位置条件的圆弧总是有四条,如图:

 

 

4.优弧还是劣弧(0或1,0表示劣弧,1表示优弧) 排除一半。(忘了椭圆是不是和圆一样有优弧和劣弧的概念,反正就是长度短的一条路径和长度长的一条路径)

5.弧线方向(0或1,0表示从起点到终点沿逆时针画弧,1表示从起点到终点沿顺时针画弧)再排除一半,只剩唯一一条。

6.终点x

7.终点y

一口气看这么多参数确实不好记,参照下面的例子可以帮助你更好的理解。

例:

1.x轴半径和y轴半径的比是1:2,不旋转,从起点逆时针画弧,终点为起点右侧100距离。

<path d="M 50 650 a 1 2 0 0 0 100 0" stroke="blue" stroke-width="5" fill="none"/>

2.顺时针旋转30°

<path d="M 170 650 a 1 2 30 0 0 100 0" stroke="blue" stroke-width="5" fill="none"/>

 

3.优弧和劣弧

下面的优弧和劣弧都是按逆时针画的

优弧

<path d="M 300 650 a 70 100 0 1 0 100 0" stroke="blue" stroke-width="5" fill="none"/>

 

劣弧

<path d="M 450 650 a 70 100 0 0 0 100 0" stroke="blue" stroke-width="5" fill="none"/>

 

4.顺时针画弧

<path d="M 600 650 a 1 2 0 0 1 100 0" stroke="blue" stroke-width="5" fill="none"/>

 

以上就是SVG中<path>标签所有命令的用法总结,希望能有所帮助。


写在最后

这是我在稀土掘金发过的文章,稀土掘金的个人主页为峰兄兄 的个人主页 - 动态 - 掘金,两边都会更新,那边一般会早个几天。欢迎大家关注~

文章中的所有图都是我运行自己练习时的代码截的图,原理图也是在截图的基础上,在画图工具中编辑的,希望能得到更多人的认可,也希望能尊重我的劳动成果,未经许可不要转载哦~ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/409184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

npm修改默认源(默认镜像)

1 npm修改默认源(默认镜像) 首先如果之前安装过node.js的需要先卸载&#xff0c;删除npm原始默认安装目录&#xff08;在cmd命令面板执行 npm config ls 查看npm默认路径&#xff09; 在cmd命令面板中输入npm config ls 查看npm默认路径 删除操作如下所示&#xff1a; 重新安…

js实现base64,url,blob之间的相互转换

一般来说前端展示图片会通过三种方式&#xff1a; url、base64、blob 1.url: 一般来说&#xff0c;图片的显示还是建议使用url的方式比较好。 let url "http://xxxxxx" 2.base64&#xff1a; 如果图片较大&#xff0c;图片的色彩层次比较丰富&#xff0c;则不适合…

【原创】基于JavaWeb的医院预约挂号系统(医院挂号管理系统毕业设计)

项目介绍&#xff1a;后端采用JspServlet。前端使用的是Layui的一个网站模板。开发一个在线的医院预约挂号系统。从角色的划分&#xff0c;包括用户、医生、管理员。功能模块上包括了公告发布、医院信息查看、医院医生信息查看、预约医生、病例记录、挂号审核、图表统计等模块。…

css常见居中方法总结

最近跟着网上的教程做了几个网页项目&#xff0c;做的过程中关于居中涉及到了好几种方法&#xff0c;遂想将其总结归纳下来&#xff0c;一是理清自己的思路&#xff0c;二是希望能分享给需要帮助的小伙伴们。 话不多数&#xff0c;直奔主题。 本次涉及到的居中方法有七种&…

微信小程序嵌入 H5 页面(web-view)

在开发微信小程序的时候&#xff0c;我们有时候会遇到将 H5 页面嵌入到小程序页面中的情况&#xff1b;微信小程序自带的 web-view 组件相当于 HTML 页面中的 iframe &#xff0c;方便我们在微信小程序中打开一个 H5 页面&#xff1b; 官网描述&#xff1a; 承载网页的容器&a…

微前端(无界)

前言&#xff1a;微前端已经是一个非常成熟的领域了&#xff0c;但开发者不管采用哪个现有方案&#xff0c;在适配成本、样式隔离、运行性能、页面白屏、子应用通信、子应用保活、多应用激活、vite 框架支持、应用共享等用户核心诉求都或存在问题&#xff0c;或无法提供支持。本…

vue项目中引入Luckysheet

Luckysheet 介绍 Luckysheet &#xff0c;一款纯前端类似excel的在线表格&#xff0c;功能强大、配置简单、完全开源。 实现功能 格式设置 样式 (修改字体样式&#xff0c;字号&#xff0c;颜色或者其他通用的样式)条件格式 (突出显示所关注的单元格或单元格区域&#xff1…

微信小程序(5)——如何制作好看的表格

✅ 因为 “表格” 在日常统计中无处不在&#xff0c;所以今天来做一做。但是微信小程序不支持 table 标签&#xff0c;我准备用 “上一篇——Flex布局” 学的 flex 来实现一下。 文章目录一、从“html的table”到 “微信小程序的table”二、统一格式的表格三、非统一格式的表格…

【vuex】unknown action type:home/categoryList报错

记录一下今天遇到的bug。在做项目时&#xff0c;想进行vuex模块化开发。 在src/store下暂且建了两个小仓库home和search src/store/index.js import {createStore} from vuex; // 引入小仓库 import home from /store/home/index import search from /store/search/index// 对…

vue3.0运行npm run dev 报错Cannot find module ‘node:url‘

目录 一、问题描述&#xff1a; 二、原因 三、解决方案 一、问题描述&#xff1a; 学习vue3.0&#xff08; Vue.js - 渐进式 JavaScript 框架 | Vue.js&#xff09;的时候一直使用的家里电脑&#xff0c;项目搭建运行一直没问题&#xff0c;公司近期用vue3.0写项目 npm init…

(前后端都开源)Activiti Flowable Camunda json转bpmn 仿钉钉流程设计器 vue2vue3 Ant Design Wflow-web smart-flow-design

仿钉钉流程设计器前后端源码 2022年10月17日,重磅开源! 话不多说上码云项目链接,各位觉得有帮助可以点一个star 本项目是基于这个Flowable6.7.2实现的, 后面会开一个Activiti567的分支 本项目在码云地址: Flowable-Activiti仿钉钉流程设计器前后台源码--工作流中台项目-基于…

第一次尝试制作一个钓鱼网站,小白教程,超细!

**声明&#xff1a;小白一枚&#xff0c;写下来为了记录和学习交流&#xff0c;大神不喜勿喷。 **大体思路&#xff1a;仿页面&#xff0c;社工诱导用户填写信息&#xff0c;提交传入后端&#xff0c;后端获取信息并存储&#xff0c;传回“服务器繁忙”或虚假信息并重定向到真…

js 各种时间格式的转换

js 各种时间格式的转换 时间格式示例中国标准时间Fri Mar 18 2022 14:24:45 GMT0800(中国标准时间)部分可读字符串Fri Mar 18 2022格林威治时间Fri,18 Mar 2022 06:24:45 GMT现在用的时间标准UTCFri Mar 18 2022 06:24:45 GMTIOS标准时间&#xff08;JSON时间格式&#xff09;…

Echarts常用配置项

一、常用配置项描述 title:{}//标题组件 tooltip:{},//提示框组件 yAxis:[],//y轴 xAxis:[],//x轴 legend:{},//图例组件 grid:{},//内绘网格 toolbox:{},//工具 series:[],//数据有关 calculable:true//可计…

JS高级中的constructor构造函数

1.对象原型__proto__和构造函数原型对象prototype里面都有一个constructor属性 2.constructor 称为构造函数 因为它的作用是用于new的实例对象指回构造函数本身 3.constructor 主要用于记录该对象是用于那个构造函数 它可以让原型对象prototype重新指向原来构造他的构造函数…

Vue|计算属性

1. 计算属性1.1 差值语法1.2 methods1.3 计算属性1. 计算属性 1.1 差值语法 开始前分别在项目目录创建文件夹及页面如下 需求1&#xff1a;在两个文本框中分别输入姓和名的同时需要在下方将数据进行拼接组装&#xff0c;效果如下图 如果用传统的方式来实现的话&#xff0c;需要…

vue2.x的h函数(createElement)与vue3中的h函数

1. vue2.x的 h 函数(createElement) 使用方法及介绍&#xff1a;&#xff08;参考官网提取&#xff09;h函数第一个是标签名字 或者是组件名字&#xff0c;第二个参数是配置项&#xff0c;第三个参数是 innerText &#xff0c;不会帮你转换节点&#xff0c;如果需要转换成节点…

background-size 之 背景图的尺寸设置

目录 一&#xff1a;background-size参数取值 1.0 1.1 二&#xff1a;实例分析 2.1 参数分析 2.2 代码实例分析 引&#xff1a;background-size: 没有设置任何尺寸时使用图片本身的大小&#xff0c;宽度和高度都是auto默认值 可以用px设置成具体的值&#xff0c;也可以使…

二、pytest+selenium+allure实现web ui自动化

上一章&#xff1a; 一、web ui自动化环境搭建 pytestallureselenium_傲娇的喵酱的博客-CSDN博客_pytestseleniumallure pytest二次开发相关文章&#xff1a; pytest框架二次开发之自定义注解_傲娇的喵酱的博客-CSDN博客 pytest框架二次开发之机器人报警_傲娇的喵酱的博客-…

前端面试:浅拷贝和深拷贝的区别?

前些天发现了一个巨牛的人工智能学习博客&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转 那么大家晚上好&#xff0c;我是今天晚上的主讲老师&#xff0c;我是兔哥。 我们在面试中经常会被问到浅拷贝和深拷贝的区别&#xff0c;正好群里…