惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Vercel News
Vercel News
B
Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
GbyAI
GbyAI
IT之家
IT之家
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
博客园_首页
C
Check Point Blog
博客园 - 【当耐特】
美团技术团队
Last Week in AI
Last Week in AI
A
About on SuperTechFans
雷峰网
雷峰网
MongoDB | Blog
MongoDB | Blog
Microsoft Azure Blog
Microsoft Azure Blog
M
MIT News - Artificial intelligence
Martin Fowler
Martin Fowler
J
Java Code Geeks
B
Blog RSS Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
Google Developers Blog
F
Fortinet All Blogs

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活
SVG任意基本图形转path路径 « 张鑫旭-鑫空间-鑫生活
张鑫旭,zhangxinxu · 2021-08-07 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=10047 鑫空间-鑫生活
本文欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可以联系授权。

图形路径封面图

一、背景

之前介绍“使用SVG实现CSS无法实现的模糊和阴影效果”这篇文章的底部,有人评论,希望我写篇介绍“svg的基本形状转path”的文章,如下截图:

评论截图

实际上,这个没什么好介绍的。

如果是对path路径指令感兴趣,可以参考我多年前的这篇文章:“深度掌握SVG路径path的贝塞尔曲线指令”。

如果是想知道SVG基本图形元素全部转为<path>的代码,则之前也有文章展示过,不过比较隐蔽,是“巧借CSS var变量实现任意的CSS自定义语法”这篇文章的“Polyfill案例之offset-path”这部分。

offset-path属性目前只支持path()函数,其他CSS图形基本函数并不支持,所以需要将其他基本函数转为path()函数,里面用到了SVG 基本元素转path路径的能力。

不过这段能力藏的太深了,我自己找都要找一会儿,既然有人询问,想一想,还是专门拎出来吧。

二、其实就一段JS代码

SVG基本元素除了<path>,还有<rect>矩形元素(支持圆角)、<circle>圆形元素、<ellipse>椭圆元素、<line>直线元素、<polygon>多边形元素、<polyline>折线元素。

想要进行转换,只需要找到对应元素的坐标,套用path指令就可以了。

拿最简单的直线举例,假设<line>元素对象是 node,则,转路线代码就是下面这样的:

var x1 = node.getAttribute('x1')
var y1 = node.getAttribute('y1')
var x2 = node.getAttribute('x2')
var y2 = node.getAttribute('y2')

var path = 'M' + x1 + ' ' + y1 + 'L' + x2 + ' ' + y2

其他图形也是类似的。

为了方便大家使用,我专门建了个git项目:svg-to-path

项目资源截图

其中的svg2path.js就是需要的JS资源,使用如下:

  1. 引入svg2path.js
    <script src="https://gitee.com/zhangxinxu/svg-to-path/raw/master/svg2path.js"></script>
  2. 执行转换
    var path = svg2path(node);
  3. 根据返回的path路径做你想做的其他事情。

语法

path = svg2path(node)

参数

node
必需。表示需要转换的基本 SVG 图形节点,例如 <circle><rect><ellipse><polygon> 等元素。

返回值

返回值 path 是转换后的路径字符串。

演示

例如有个SVG图形是个圆:

<svg width="100" height="100">
  <circle cx="50" cy="50" r="40"></circle>
</svg>

找到对应的 <circle> 元素,执行 svg2path(circle) 生成 path 路径,设置在<path>元素上后(代码如下),可以得到一样的图形效果:

<svg width="100" height="100">
  <path d="M10 50a40 40 0 1 0 80 0a40 40 0 1 0 -80 0z"></path>
</svg>

下面就是demo.html原型图案使用基本图形和路径图形表现后的效果和代码截图:

转换示意

三、结束语

看吧,真的没什么好讲的,对了,这段代码转换的核心部分是很多年前我从哪里看到记录下来的,具体出处不详了,在实践过程中发现了一些问题,自己改了不少地方,目前这个版本还算稳定。

如果基本图形元素的属性不合法,path会是undefined,大家使用的时候注意判断。

另外,播报一则预告,抽奖用的新书到了,下周我会在微博和掘金(关注我的沸点)上进行新书的抽奖,大家可以关注下,应该都是周一发(如果我忘记了那就是周二):

// zxx: 不要找了,已经结束了

我的新书

新书厚度是前两本之和,已经是精简过很多内容之后的了,目前均价到手要100元左右,抽到就是赚到。

有人留言问我可不可以赠书,是这样的,一般送新书都是送行业有影响力的,然后人家会友情帮忙晒一下,互惠互利,如果你是行业小透明,可以寄希望于抽奖。

好了,祝大家都有好运!

本文为原创文章,欢迎分享,勿全文转载,如果实在喜欢,可收藏,永不过期,且会及时更新知识点及修正错误,阅读体验也更好。
本文地址:https://www.zhangxinxu.com/wordpress/?p=10047

(本篇完)