花潮论坛

搜索
热搜: 活动 交友 discuz
查看: 20|回复: 6

获取SVG viewBox属性内部数据

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

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

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

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

    发表于 2025-9-26 18:24 | 显示全部楼层 |阅读模式

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

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

    x

    SVG 的 viewBox 属性用于定义 SVG 视口在用户空间中的位置和尺寸。其语法结构为:

    viewBox="0 0 1024 768" viewBox="0,0,1024,768"

    可以看到,viewBox 共有四个属性值,第一、二个是 x、y,规定视口起点坐标,第三、四个是 width、height,设定视口宽、高。各值放在小角引号内,彼此间用小角空格或小角逗号隔开。

    获取 viewBox 值可以通过 element.getAttribute('viewBox') 实现。getAttribute 方法拿到的将是 ① 一个字符串(如果设置了 viewBox 属性),② 或一个无效字符串(如果设置 viewBox 出现错误),③ 或一个空值(如果未设置 viewBox)。要获得可用于后续计算需要的数值,需要做相应处理,例如下面的例子——

    /*** getViewBoxValue 函数 @param svg : svg元素 @param pointNum : 顶点数量 @param radius : 顶点所在外切圆半径 @returns {Array} 顶点坐标数组 [[x1,y1], [x2,y2], ...] **/ function getViewBoxValue(svg, pointNum, radius) { // 获取 viewBox 属性值 let viewbox = svg.getAttribute('viewBox'); // 初始化变量 : 取 SVG 缺省设置值 let x = 0, y = 0, width = 300, height = 150; // 如果拿到 viewBox 属性值 if (viewbox) { // 拆分属性值并将各值强制为浮点数 const ar = viewbox.split(/[\s,]+/).map(parseFloat); // 如果值合法 if (ar.length === 4) { x = ar[0]; y = ar[1]; width = ar[2]; height = ar[3]; } } else {// 如果没有拿到 viewBox 属性值 // 则取 SVG 元素的宽高作为 viewBox 的宽高(宽高缺省则取默认值) width = parseFloat(svg.getAttribute('width')) || 300; height = parseFloat(svg.getAttribute('height')) || 150; } // 以对象形式返回各值 return { x:x, y: y, width: width, height: height }; }

    getViewBoxValue 函数对前述三种情形都一一做了处理,能够正常拿到 viewBox 属性各个数值。不过还有一个更为简洁的获取方法,它是直达的——

    const mysvg = document.getElementById('mysvg'); const vb = mysvg.viewBox.baseVal; console.log(vb.x,vb.y,vb.width, vb.height);

    svgElement.attribute.baseVal 拿到的是SVG或其子元素的基础属性值,上例的第二行代码获取到的是 id="mysvg" 的 SVG 标签的 viewBox 属性值并赋值给变量 vb,vg 是一个对象,里面的键值对有 x、y、width、height,和此前的函数返回值的设计一模一样。

    评分

    参与人数 1威望 +50 金钱 +100 经验 +50 收起 理由
    红影 + 50 + 100 + 50 赞一个!

    查看全部评分

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

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

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

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

    发表于 2025-9-26 20:42 | 显示全部楼层
    这个代码的设计,是为了能够正常拿到 viewBox 属性各个数值吧。可以在拿到基础属性值后,返回各项值
     
    回复 支持 反对

    使用道具 举报

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

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

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

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

     楼主| 发表于 2025-9-26 21:12 | 显示全部楼层
    红影 发表于 2025-9-26 20:42
    这个代码的设计,是为了能够正常拿到 viewBox 属性各个数值吧。可以在拿到基础属性值后,返回各项值{:4_187 ...

    viewBox属性在SVG中非常重要,它里面的数值对后续的计算不可或缺。很多人都会使用函数方法拿到里面的数据,极少有人会用到 basVal,除非是做游戏的可能会关注到这个方法。
    回复 支持 反对

    使用道具 举报

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

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

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

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

    发表于 2025-9-26 22:05 | 显示全部楼层
    马黑黑 发表于 2025-9-26 21:12
    viewBox属性在SVG中非常重要,它里面的数值对后续的计算不可或缺。很多人都会使用函数方法拿到里面的数据 ...

    这个方法还是很奇特高效的呢
     
    回复 支持 反对

    使用道具 举报

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

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

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

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

     楼主| 发表于 2025-9-26 22:07 | 显示全部楼层
    红影 发表于 2025-9-26 22:05
    这个方法还是很奇特高效的呢

    配套svg的JS文档里都谈到,好多人都不会去细查文档
    回复 支持 反对

    使用道具 举报

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

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

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

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

    发表于 2025-9-27 23:11 | 显示全部楼层
    马黑黑 发表于 2025-9-26 22:07
    配套svg的JS文档里都谈到,好多人都不会去细查文档

    主要用得少,也想不起查呢。
     
    回复 支持 反对

    使用道具 举报

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

    [LV.Master]伴坛终老

    3024

    主题

    13万

    回帖

    28万

    积分

    管理员

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

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

     楼主| 发表于 2025-9-28 12:42 | 显示全部楼层
    红影 发表于 2025-9-27 23:11
    主要用得少,也想不起查呢。

    做开发的不是额。只是现在做开发的也都是集团作战,通常就先去拉一个源码改改,而这些源码通常又是几年甚至十几年前人家开源的,不含有最新的标准、技术。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-11-30 15:07 , Processed in 0.068320 second(s), 28 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

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