U r*_*u s 5 javascript svg angularjs
我需要一双新鲜的眼睛来告诉我我做错了什么.
我想height和width并用它们来制定出另一个元素的位置.
HTML
<g>
<rect
class="graphic"
draggable="data"
ng-attr-x="{{ data.x }}"
ng-attr-y="{{ data.y }}"
ng-attr-height="{{ data.height }}"
ng-attr-width="{{ data.width }}"
></rect>
</g>
Run Code Online (Sandbox Code Playgroud)
返回我想要的值的函数
function getSVGRectDimensions(element) {
//logging
console.log('firstChild', element[0].firstElementChild);
console.log('firstChild.Clientrect', element[0].firstElementChild.getBoundingClientRect());
var viewportOffset = element[0].firstElementChild.getBoundingClientRect();
if (!element.jquery) {
element = angular.element(element);
}
return {
left: viewportOffset.left,
height: viewportOffset.height,
top: viewportOffset.top,
width: viewportOffset.width
}
}
Run Code Online (Sandbox Code Playgroud)
我如何使用该功能
var svgElement = getSVGRectDimensions(data.element);
Run Code Online (Sandbox Code Playgroud)
在控制台我得到
从日志中,你可以看到height和width的rect> 0.
<rect class="graphic" draggable="data" ng-attr-x="{{ data.x }}" ng-attr-y="{{ data.y }}" ng-attr-height="{{ data.height }}" ng-attr-width="{{ data.width }}" x="1033.78" y="364" height="46.22000000000003" width="106.8900000000001"></rect>
Run Code Online (Sandbox Code Playgroud)
然而,当我用getBoundingClientRect(),height和width= 0 调用函数时.
firstChild.Clientrect ClientRect {} bottom: 60.999996185302734 height: 0 left: 681.1538696289062 right: 681.1538696289062 top: 60.999996185302734 width: 0 __proto__: ClientRect
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
我也试图摆脱firstElementChild,这导致返回g而不是rect但仍然height和width= 0.
根据https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect getBoundingClientRect返回四个值:上、左、下、右。在您的控制台中,您可以看到存在这四个值。根据这些值计算宽度和高度很简单
你用:
var viewportOffset = element[0].firstElementChild.getBoundingClientRect();
Run Code Online (Sandbox Code Playgroud)
它返回一个 DOMRect ,然后:
return {
left: viewportOffset.left,
height: viewportOffset.height,
top: viewportOffset.top,
width: viewportOffset.width
}
Run Code Online (Sandbox Code Playgroud)
正如我所说, viewportOffset 是一个 DOMRect ,它没有属性width 和 height。相反,他们有权利,底部。
因此,要计算出宽度和高度,您的返回代码应如下所示:
return {
left: viewportOffset.left,
height: viewportOffset.bottom - viewportOffset.top,
top: viewportOffset.top,
width: viewportOffset.right - viewportOffset.left
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6939 次 |
| 最近记录: |