在 snapSVG 中获取 SVG 容器大小?
Getting SVG container size in snapSVG?
创建 'paper' 对象后,使用 SnapSVG 获取其大小的正确方法是什么?
我的 HTML 看起来如下:
<div id="myContainer" style="width: 900px; height: 100px" />
然后是 Javascript 代码:
function initViewer(elementId) {
var element, elementRef, snap;
elementRef = '#' + elementId;
element = $(elementRef);
element.append('<svg style="width: ' + element.width() + 'px; height: ' + element.height() + 'px; border: solid 1px black;"/>');
snap = Snap(elementRef + ' svg');
console.log(snap.getBBox());
}
我在这里观察到边界框的所有属性都是“0”,所以我不能依赖这里的边界框值。有什么方法可以做到这一点,而不必转到父元素吗?
我基本上想要的是 SVG 的宽度和高度,这样我就可以为视图绘制适当大小的形状。
JS Fiddle,说明问题:https://jsfiddle.net/ajmas/kdnx2eyf/1/
getBBox() on a canvas returns 包含 canvas 上所有元素的边界框。由于您的 SVG 中没有元素,因此 returns 全为 0。
但是 SVG 元素与任何其他 DOM 元素一样 - 您可以通过多种不同的方式获得它的宽度和高度。您可以通过 ID 或其他方式检索对象并使用 .offsetWidth 或 .offsetHeight。
您也可以遍历对象本身。我不知道这是否适用于所有浏览器,但如果你真的想使用 snap 对象,你可以这样做:
snap=Snap(elementRef + ' svg');
snap.node.clientHeight
snap.node.clientWidth
但是您也可以使用它包含的 div 来设置它的高度和宽度。为什么不能只使用 element.width() 和 element.height() ?
我发现 getBBox()
不适用于论文(Snap "drawing surface"),仅适用于论文中的 elements。但是 node.clientWidth
适合我 Snap.svg 论文。下面演示。
var paper = Snap("#mySVG");
paper.rect(0, 0, 200, 100).attr({fill : "#cde"});
//var tMessage0 = paper.getBBox().width; // throws an error
var tMessage1 = paper.text(4, 24, "paper width = " + paper.node.clientWidth);
var tMessage2 = paper.text(4, 48, "text width = " + tMessage1.getBBox().width);
<script src="https://cdn.jsdelivr.net/snap.svg/0.1.0/snap.svg-min.js"></script>
<body>
<svg id="mySVG" width="200" height="100">
</svg>
</body>
创建 'paper' 对象后,使用 SnapSVG 获取其大小的正确方法是什么?
我的 HTML 看起来如下:
<div id="myContainer" style="width: 900px; height: 100px" />
然后是 Javascript 代码:
function initViewer(elementId) {
var element, elementRef, snap;
elementRef = '#' + elementId;
element = $(elementRef);
element.append('<svg style="width: ' + element.width() + 'px; height: ' + element.height() + 'px; border: solid 1px black;"/>');
snap = Snap(elementRef + ' svg');
console.log(snap.getBBox());
}
我在这里观察到边界框的所有属性都是“0”,所以我不能依赖这里的边界框值。有什么方法可以做到这一点,而不必转到父元素吗?
我基本上想要的是 SVG 的宽度和高度,这样我就可以为视图绘制适当大小的形状。
JS Fiddle,说明问题:https://jsfiddle.net/ajmas/kdnx2eyf/1/
getBBox() on a canvas returns 包含 canvas 上所有元素的边界框。由于您的 SVG 中没有元素,因此 returns 全为 0。
但是 SVG 元素与任何其他 DOM 元素一样 - 您可以通过多种不同的方式获得它的宽度和高度。您可以通过 ID 或其他方式检索对象并使用 .offsetWidth 或 .offsetHeight。
您也可以遍历对象本身。我不知道这是否适用于所有浏览器,但如果你真的想使用 snap 对象,你可以这样做:
snap=Snap(elementRef + ' svg');
snap.node.clientHeight
snap.node.clientWidth
但是您也可以使用它包含的 div 来设置它的高度和宽度。为什么不能只使用 element.width() 和 element.height() ?
我发现 getBBox()
不适用于论文(Snap "drawing surface"),仅适用于论文中的 elements。但是 node.clientWidth
适合我 Snap.svg 论文。下面演示。
var paper = Snap("#mySVG");
paper.rect(0, 0, 200, 100).attr({fill : "#cde"});
//var tMessage0 = paper.getBBox().width; // throws an error
var tMessage1 = paper.text(4, 24, "paper width = " + paper.node.clientWidth);
var tMessage2 = paper.text(4, 48, "text width = " + tMessage1.getBBox().width);
<script src="https://cdn.jsdelivr.net/snap.svg/0.1.0/snap.svg-min.js"></script>
<body>
<svg id="mySVG" width="200" height="100">
</svg>
</body>