请马上登录,朋友们都在花潮里等着你哦:)
您需要 登录 才可以下载或查看,没有账号?立即注册
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 指令了。
|