有没有一种准确的方法可以从JavaScript内部获取包括描边、滤镜或其他对元素实际大小有贡献的元素在内的SVG元素的真实大小?
我已经尝试了我能想到的几乎所有方法,现在感觉走到了死胡同 :-(
更新问题以添加更多上下文(JavaScript)
有没有一种准确的方法可以从JavaScript内部获取包括描边、滤镜或其他对元素实际大小有贡献的元素在内的SVG元素的真实大小?
我已经尝试了我能想到的几乎所有方法,现在感觉走到了死胡同 :-(
更新问题以添加更多上下文(JavaScript)
直接获取值是不可能的,但是您可以获取边界矩形的尺寸:
var el = document.getElementById("yourElement"); // or other selector like querySelector()
var rect = el.getBoundingClientRect(); // get the bounding rectangle
console.log( rect.width );
console.log( rect.height);
它至少在所有主流浏览器的最新版本中得到支持。
Raphael JS http://dmitrybaranovskiy.github.io/raphael/和D3 JS http://d3js.org/都有各种方法来查找SVG对象或一组SVG对象的大小。这取决于是圆形、正方形、路径等等,要使用哪种方法。
我怀疑您正在使用复杂的形状,在这种情况下,边界框将是最好的选择http://raphaeljs.com/reference.html#Element.getBBox
(编辑:更新参考网站。)http://dmitrybaranovskiy.github.io/raphael/reference.html#Element.getBBox
<div style="border:1px solid lightgray;"></div>
这段JavaScript代码看起来像这样:
var myDiv = d3.select('div');
var mySvg = myDiv.append('svg');
var myPath = mySvg.append('path');
myPath.attr({
'fill': '#F7931E',
'd': 'M37,17v15H14V17H37z M50,0H0v50h50V0z'
});
// Get height and width.
console.log(myPath.node().getBBox());
node()
看起来更简洁。 - kiewicimport { useBackgroundImageSize } from 'background-image-size-hook'
const App = () => {
const [ref, svg] = useBackgroundImageSize()
console.log(svg) // { width, height, src }
return <SVGBackgroundImageComponent ref={ref} />
}
您没有指定任何编程语言。因此,我建议使用Inkscape。
在文件菜单中,您可以找到文档属性,在第一页中有“调整页面大小以适应内容”的命令。通过这种方式,您可以删除绘图周围的所有空白,并查看实际大小。然后,宽度和高度值将出现在svg的页眉中。
我知道Inkscape支持脚本和命令行操作,但我不知道是否可以以这种方式进行修剪操作。但是,如果可能的话,您可以从任何编程语言中执行该操作。