svg缩放-如何使用SVG进行缩放和平移
2023-06-28 · 百度认证:重庆猪八戒网络有限公司官方账号
以鼠标为焦点缩放=以原点为焦点缩放+位移。利用svg的属性viewbox:x,y控制位移,width,height控制缩放。
在当前视窗内,改变viewBox的width与height即可实现以左上角为原点的缩放,故只需计算以左上角为焦点缩放后和以鼠标位置为焦点缩放后两个原点的偏移量即可。后文不再赘述scale与viewbox的关系。
以鼠标位置为基准计算新原点位置
如何使用SVG进行缩放和平移对SVG图进行缩放和平移的最简单方法是使用浏览器自带的缩放和滚动功能。在InternetExplorer9中,下表描述了与缩放相关的鼠标和键盘快捷方式。
用户操作
键盘快捷键鼠标快捷键
放大Ctrl+加号Ctrl+<向前滚动滚轮>
缩小Ctrl+减号Ctrl+<向后滚动滚轮>
返回默认缩放级别Ctrl+0不适用
使用浏览器的滚动条可在缩放图中轻松进行平移。
如何让SVG整体任意自动缩放有一个SVG地图,原始宽高已定,现在需要在任意分辨率下确保地图可以缩放到合理大小,并且是全图显示的,不能只出来一截半截的样子.
我们都知道SVG是矢量图,矢量图的最大优势就是可以任意缩放而不失真,关键是如何让SVG整体缩放呢?而且缩放时必须确保全图按比例缩放.
参考的实现,发现关键在与确定SVG的viewBox属性
将viewBox属性设置为:00原始svg的宽原始svg的高,再就可以任意修改svg的宽高,其内容就会自动缩放了
PS:如果你无法确定原始SVG的宽高可以通过一些矢量图编辑工具(例如:Inkscape)来获得
或者通过代码来获取
<svgxmlns=""version="1.1"
style="width:150px;height:150px;">
<circlecx="200"cy="200"r="200"fill="red"></circle>
<circlecx="300"cy="500"r="200"fill="red"></circle>
</svg>
//{x:0,y:0,width:500,height:700}
();
那么何为viewBox呢?
viewBox是SVG的虚坐标系,为根节点svg元素加上viewBox属性后,在svg下的各图形元素的大小和位置都是按viewBox限定的坐标,而不是页面的实际坐标
例如
<svgwidth="100px"height="100px"viewBox="00300300">
<rectx="5"y="15"width="200"height="200"/>
</svg>
在100x100的svg区域中,放入一个200x200的方块,按理不能正常显示,会被裁去一部分.但是因为加入了viewBox属性,svg区域会完整显示rect.可以理解为在svg中加入一个新坐标系,按上例把svg划分为300x300份,rect占用200x200份,而不是像素,实际图形会缩放或拉伸.
下面来看一个直观的例子,下面是我们原始的SVG内容
<svgxmlns=""version="1.1">
<!--这个圆的大小是400x400,那么这个SVG的宽和高就是400了-->
<circlecx="200"cy="200"r="200"fill="red"/>
</svg>
固定SVG的viewBox,测试任意宽高缩放
<svgxmlns=""version="1.1"width="100"height="100"
viewBox="00400400">
<!--固定viewBox,关键是确定原始SVG的宽高-->
<circlecx="200"cy="200"r="200"fill="red"/>
</svg>