花潮论坛

搜索
热搜: 活动 交友 discuz
查看: 55|回复: 53

JS:获取svg路径设计坐标及宽高数据

[复制链接]
  • TA的每日心情
    慵懒
    2025-11-30 07:45
  • 签到天数: 1655 天

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

    发表于 2025-8-26 12:25 | 显示全部楼层 |阅读模式

    请马上登录,朋友们都在花潮里等着你哦:)

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x

    对复杂的svg路径,我们可能很难一眼瞧出它的实际占位情况,而我们总是希望路径的应用应该能适应svg的尺寸。为此,我们有必要事先获取svg路径是在什么宽高范围内进行设计,即弄懂path路径的x、y、width 和 height 的实值。JS内置的 getBBox() 函数能帮我们做到这一点,其语法非常简单:

    SVGElement.getBBox();

    任意拥有空间占位属性的svg内的元素,都可以使用 getBBox() 函数获取到类似于对象集合{x: x, y: y, width: width, height: height}的数据。通常,x、y 的值要分别考虑其右、其下的占位以寻求边界的均衡,在计算路径占位的时候 x、y 的值应乘以 2,这才是路径的实际占位情况。下面的例子,使用 svgdr 绘制一个路径图案,获取路径的起点坐标和宽高,然后依据坐标和宽高值给 svg 设置 viewBox 属性,这样所绘制的图像能够依据 svg 事先设置的宽高尺寸进行适配。

    <svg id="msvg" width="400" height="400"></svg> <script type="module"> import Dr from 'https://638183.freep.cn/638183/web/mod/svgdr.js'; var dr = Dr.dr(msvg); // 路径 var d = 'M88.618667 570.794667q18.645333 250.624 409.045333 403.925333l14.72 4.096 14.72-4.096q390.357333-153.301333 409.045333-403.925333l0.085334-1.578667-0.981334-388.565333h-40.149333q-187.904 0-359.466667-121.088l-23.253333-15.530667-23.296 15.530667Q317.525333 180.650667 129.621333 180.650667h-40.149333l-0.981333 388.565333 0.128 1.578667z m80.384-4.522667q15.744 194.858667 343.381333 327.637333 327.594667-132.778667 343.338667-327.637333l-0.810667-306.346667q-178.773333-10.837333-342.528-118.784Q348.586667 249.088 169.813333 259.925333l-0.810666 306.346667z m252.501333 40.96L330.965333 516.693333l60.373334-60.330666 90.496 90.496 150.869333-150.826667 60.330667 60.330667-211.2 211.2-60.330667-60.330667z'; dr.path(d, 'silver').id('path1'); // 绘制 id="path1" 的 path标签 var od = path1.getBBox(); // 获取 path 标签数据 var ww = od.x * 2 + od.width, hh = od.y * 2 + od.height; // 计算视口宽高 dr.setsvg({viewBox: `0 0 ${ww} ${hh}`}); // 设置视口 </script>

    如果追求绝对的适配,可以参考上述代码获得 ww 和 hh 的实际数值,根据此数值重新考虑 svg 标签的 width、height 属性如何设置,并将 viewBox 一并写好,后面的JS就无需 dr.setsvg 指令了。

    评分

    参与人数 3威望 +110 金钱 +220 经验 +110 收起 理由
    红影 + 50 + 100 + 50 赞一个!
    杨帆 + 30 + 60 + 30 赞一个!
    花飞飞 + 30 + 60 + 30 很给力!

    查看全部评分

  • TA的每日心情
    慵懒
    2025-11-30 07:45
  • 签到天数: 1655 天

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-8-26 12:28 | 显示全部楼层
    这个路径是从阿里巴巴icon图标站那里拿到的,它设计于靠近 1024*1024 的平面范围。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-11-30 07:45
  • 签到天数: 1655 天

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-8-26 12:29 | 显示全部楼层
    阿里巴巴矢量图标库:https://www.iconfont.cn/
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-11-30 00:22
  • 签到天数: 380 天

    [LV.9]以坛为家II

    297

    主题

    2548

    回帖

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生鹰傲苍穹飞龙在天王者至尊大将风范花潮版主

    发表于 2025-8-26 12:46 | 显示全部楼层
    点预览就是一个几何图形呀,看不到svg路径设计坐标及宽高数据呀
    ★青春是一个人的精神生命,奋斗是一个人最大的体面,学习是一个人最美的姿态。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-8-5 16:33
  • 签到天数: 44 天

    [LV.5]常住居民I

    62

    主题

    1万

    回帖

    2万

    积分

    贵宾

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮美女流光溢彩优雅神秘花潮贵宾

    发表于 2025-8-26 12:54 | 显示全部楼层
    马黑黑 发表于 2025-8-26 12:28
    这个路径是从阿里巴巴icon图标站那里拿到的,它设计于靠近 1024*1024 的平面范围。

    就是原来1024*1024大小的SVG盾牌图案,通过这个函数自动调整大小适用于400*400的窗口
    很智能。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-11-30 07:45
  • 签到天数: 1655 天

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-8-26 13:00 | 显示全部楼层
    花飞飞 发表于 2025-8-26 12:54
    就是原来1024*1024大小的SVG盾牌图案,通过这个函数自动调整大小适用于400*400的窗口
    很智能。。。{:4_1 ...

    这是实现适配的思路之一
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-11-30 07:45
  • 签到天数: 1655 天

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-8-26 13:02 | 显示全部楼层
    杨帆 发表于 2025-8-26 12:46
    点预览就是一个几何图形呀,看不到svg路径设计坐标及宽高数据呀

    你可以打印出来。获取到 ww 和 hh 后:

    console.log(ww, hh);

    这就在控制台打印出结果
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-8-5 16:33
  • 签到天数: 44 天

    [LV.5]常住居民I

    62

    主题

    1万

    回帖

    2万

    积分

    贵宾

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮美女流光溢彩优雅神秘花潮贵宾

    发表于 2025-8-26 13:12 | 显示全部楼层
    ww = od.x * 2 + od.width,
    hh = od.y * 2 + od.height;
    这样看比较好比较,
    视窗的宽度ww,除了路径本身宽度width之外,还要加上原来2个x边距,才能保证左右两边都距离一样。

    viewBox: `0 0 ${ww} ${hh}`});就是从原点开始,到之前设置好的视窗宽ww高hh大小。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-8-5 16:33
  • 签到天数: 44 天

    [LV.5]常住居民I

    62

    主题

    1万

    回帖

    2万

    积分

    贵宾

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮美女流光溢彩优雅神秘花潮贵宾

    发表于 2025-8-26 13:17 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-8-5 16:33
  • 签到天数: 44 天

    [LV.5]常住居民I

    62

    主题

    1万

    回帖

    2万

    积分

    贵宾

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮美女流光溢彩优雅神秘花潮贵宾

    发表于 2025-8-26 13:19 | 显示全部楼层
    马黑黑 发表于 2025-8-26 12:29
    阿里巴巴矢量图标库:https://www.iconfont.cn/

    这个素材网站收了,需要登陆。
    刚试了一个兔子形状的。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-8-5 16:33
  • 签到天数: 44 天

    [LV.5]常住居民I

    62

    主题

    1万

    回帖

    2万

    积分

    贵宾

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮美女流光溢彩优雅神秘花潮贵宾

    发表于 2025-8-26 13:21 | 显示全部楼层
    马黑黑 发表于 2025-8-26 13:00
    这是实现适配的思路之一

    思路是统帅,然后再具体实现。。效果完美
    看来只是思路之一,还有别的思路
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-11-30 00:22
  • 签到天数: 380 天

    [LV.9]以坛为家II

    297

    主题

    2548

    回帖

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生鹰傲苍穹飞龙在天王者至尊大将风范花潮版主

    发表于 2025-8-26 14:00 | 显示全部楼层
    本帖最后由 杨帆 于 2025-8-26 14:25 编辑

    马黑黑 发表于 2025-8-26 13:02 你可以打印出来。获取到 ww 和 hh 后: console.log(ww, hh);
    不是太明白,但感觉挺好玩呢
    ★青春是一个人的精神生命,奋斗是一个人最大的体面,学习是一个人最美的姿态。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-11-30 00:22
  • 签到天数: 380 天

    [LV.9]以坛为家II

    297

    主题

    2548

    回帖

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生鹰傲苍穹飞龙在天王者至尊大将风范花潮版主

    发表于 2025-8-26 14:06 | 显示全部楼层
    本帖最后由 杨帆 于 2025-8-26 14:51 编辑

    哇,终于显示出来了~
    ★青春是一个人的精神生命,奋斗是一个人最大的体面,学习是一个人最美的姿态。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-11-17 10:56
  • 签到天数: 1050 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2025-8-26 14:06 | 显示全部楼层
    这个好,可以获取视口数据并得到视口宽高,这样就可以按事先设置的宽高尺寸进行适配了
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-11-30 07:45
  • 签到天数: 1655 天

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-8-26 18:31 | 显示全部楼层
    红影 发表于 2025-8-26 14:06
    这个好,可以获取视口数据并得到视口宽高,这样就可以按事先设置的宽高尺寸进行适配了

    这是很巧妙的做法
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-11-30 07:45
  • 签到天数: 1655 天

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-8-26 18:31 | 显示全部楼层
    杨帆 发表于 2025-8-26 14:06
    本帖最后由 杨帆 于 2025-8-26 14:51 编辑 哇,终于显示出来了~

    多尝试,并多多体会。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-11-30 07:45
  • 签到天数: 1655 天

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-8-26 18:33 | 显示全部楼层
    杨帆 发表于 2025-8-26 14:00
    本帖最后由 杨帆 于 2025-8-26 14:25 编辑

    不是太明白,但感觉挺好玩呢

    要善用各种现有的工具。console.log(变量名1, 变量名2) 可以得到变量值,有了值就等于有了钱,你还不懂怎么用那也没办法了。

    console.log() 可以只打印一个值,多个值时各值有都好隔开
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-11-30 07:45
  • 签到天数: 1655 天

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-8-26 18:34 | 显示全部楼层
    花飞飞 发表于 2025-8-26 13:21
    思路是统帅,然后再具体实现。。效果完美
    看来只是思路之一,还有别的思路

    千对万对不如思路对
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-11-30 07:45
  • 签到天数: 1655 天

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-8-26 18:34 | 显示全部楼层
    花飞飞 发表于 2025-8-26 13:19
    这个素材网站收了,需要登陆。
    刚试了一个兔子形状的。

    登录才能收藏、下载和管理。一切免费。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-11-30 07:45
  • 签到天数: 1655 天

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2025-8-26 18:34 | 显示全部楼层
    花飞飞 发表于 2025-8-26 13:17
    import Dr from 'https://638183.freep.cn/638183/web/mod/svgdr.js';
            var dr = Dr.dr(msvg);
           
    ...

    很漂亮
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2025-11-30 15:47 , Processed in 0.093688 second(s), 29 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表