如何让SVG整体任意自动缩放

 我来答
就烦条0o
2017-02-13 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46499
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
有一个SVG地图, 原始宽高已定, 现在需要在任意分辨率下确保地图可以缩放到合理大小, 并且是全图显示的, 不能只出来一截半截的样子.
我们都知道SVG是矢量图, 矢量图的最大优势就是可以任意缩放而不失真, 关键是如何让SVG整体缩放呢? 而且缩放时必须确保全图按比例缩放.
参考svg.map的实现, 发现关键在与确定SVG的viewBox属性
将viewBox属性设置为: 0 0 原始svg的宽 原始svg的高, 再就可以任意修改svg的宽高, 其内容就会自动缩放了
PS: 如果你无法确定原始SVG的宽高可以通过一些矢量图编辑工具(例如: Inkscape)来获得
或者通过代码来获取
<svg xmlns="" version="1.1"
style="width: 150px; height: 150px;">
<circle cx="200" cy="200" r="200" fill="red"></circle>
<circle cx="300" cy="500" r="200" fill="red"></circle>
</svg>
// {x: 0, y: 0, width: 500, height: 700}
svgEl.getBBox();

那么何为viewBox呢?
viewBox是SVG的虚坐标系, 为根节点svg元素加上viewBox属性后, 在svg下的各图形元素的大小和位置都是按viewBox限定的坐标, 而不是页面的实际坐标
例如
<svg width="100px" height="100px" viewBox="0 0 300 300">
<rect x="5" y="15" width="200" height="200"/>
</svg>
在 100x100 的svg区域中, 放入一个200x200的方块, 按理不能正常显示, 会被裁去一部分. 但是因为加入了viewBox属性, svg区域会完整显示rect. 可以理解为在svg中加入一个新坐标系, 按上例把svg划分为 300x300 份, rect占用200x200份, 而不是像素, 实际图形会缩放或拉伸.

下面来看一个直观的例子, 下面是我们原始的SVG内容
<svg xmlns="" version="1.1">
<!-- 这个圆的大小是400 x 400, 那么这个SVG的宽和高就是400了 -->
<circle cx="200" cy="200" r="200" fill="red"/>
</svg>

固定SVG的viewBox, 测试任意宽高缩放
<svg xmlns="" version="1.1" width="100" height="100"
viewBox="0 0 400 400">
<!-- 固定viewBox, 关键是确定原始SVG的宽高 -->
<circle cx="200" cy="200" r="200" fill="red"/>
</svg>
day忘不掉的痛
2018-06-28 · 知道合伙人数码行家
day忘不掉的痛
知道合伙人数码行家
采纳数:62646 获赞数:223953
本人担任公司网络部总经理多年,有充足的网络经验、互联网相关知识和资讯。

向TA提问 私信TA
展开全部
对 SVG 图进行缩放和平移的最简单方法是使用浏览器自带的缩放和滚动功能。在 Internet Explorer 9 中,下表描述了与缩放相关的鼠标和键盘快捷方式。

  用户操作
   键盘快捷键 鼠标快捷键

  放大 Ctrl + 加号 Ctrl + <向前滚动滚轮>
  缩小 Ctrl + 减号 Ctrl + <向后滚动滚轮>
  返回默认缩放级别 Ctrl + 0 不适用

  使用浏览器的滚动条可在缩放图中轻松进行平移。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式