- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我需要一双新鲜的眼睛来告诉我我做错了什么。
我想获取 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>
返回我想要的值的函数
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
}
}
我如何使用这个函数
var svgElement = getSVGRectDimensions(data.element);
在控制台中我得到
从日志中可以看到rect
的height
和width
> 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>
然而,当我使用 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
为什么会这样?
我还尝试摆脱 firstElementChild
,这导致返回 g
而不是 rect
但仍然是 height
和 宽度
= 0。
最佳答案
根据 https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect getBoundingClientRect 返回四个值:top、left、bottom、right。在您的控制台中,您可以看到这四个值存在。从这些值计算宽度和高度很简单
您使用:
var viewportOffset = element[0].firstElementChild.getBoundingClientRect();
它返回一个 DOMRect,然后返回:
return {
left: viewportOffset.left,
height: viewportOffset.height,
top: viewportOffset.top,
width: viewportOffset.width
}
正如我所说,viewportOffset 是一个 DOMRect,它没有属性宽度和高度。 相反他们有右下。
所以为了计算出你的宽度和高度,你的返回码应该是这样的:
return {
left: viewportOffset.left,
height: viewportOffset.bottom - viewportOffset.top,
top: viewportOffset.top,
width: viewportOffset.right - viewportOffset.left
}
关于javascript - getBoundingClientRect() 不返回 SVG 矩形的高度和宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32628931/
我有一个在 windows-resize 事件上运行的 JS 函数 在该函数中,我设置了一个变量 width 以用于调整 d3 图表的大小。如果我“手动”调整窗口大小(即:拖动窗口边缘之一),宽度变量
我有一个 ClientRect 对象数组,这是我通过做得到的 var trackedElements = $('[track]'); var trackedBounds = []; _.each(tr
我正在使用 document.body.getBoundingClientRect().right 来查找顶部导航中的所有元素都在 View 之外,以便隐藏它们并将它们放在“更多”下拉列表下。但这个功
我一直在尝试使用一个函数来检测元素是否在视口(viewport)中: function isElementInViewport (el) { var rect = el[0].getBound
所以 jQuery 的 .width() always returns the clientWidth ,不管它是什么。但如果你想要亚像素精度,you have to opt for getBound
这里有一些有趣的东西:在任何 JS 窗口中运行: val = document.body.getBoundingClientRect(); console.log(val) val.left += 1
我对 DOMnode.getBoundingClientRect() 有疑问,因为返回的数据不一致。我正在使用 windows.onload(因为缺少更好的选择)来触发我的函数,该函数采用元素的 ge
下面的代码有什么问题吗? getBoundingClientRect 值并不总是相同,当我滚动后触发该函数时它会发生变化。如果我没有滚动页面,下面的函数才准确(滚动到正确的位置)。 scrollToT
我正在使用 getBoundingClientRect 来了解元素是否在页面中的特定点之上。所以我这样做: var rect = el.getBoundingClientRect(); if (rec
我正在为 ChartJS 使用自定义工具提示并定位工具提示,我需要使用 getBoundingClientRect 来获取图表的位置,然后相对于该位置移动工具提示。但是,从 getBoundingCl
我正在进入 div 元素的控制台顶部、左侧、右侧、底部属性: var offSet = document.getElementById("div").getBoundingClientRect();
我正在尝试向我的网站添加粘性导航,当它滚动到不同的部分时会发生变化。当滚动到带有 .dark 类的部分时,它应该将 Logo 和文本颜色更改为白色……否则为黑色。 下面是我一直在使用的 javascr
我已经在使用 getBoundingClientRect() 将子元素 wrt 的 getBoundingClientRect() 计算为 px 中的父元素并从一个组件传递到另一个组件,并且能够将子元
我正在使用 getBoundingClientRect函数并试图理解它的 top 行为。负顶是什么意思? 在下面的示例中,当您向下滚动时,top 的值变为负值。有人可以解释一下,我如何解释 getBo
这个问题在这里已经有了答案: How best to convert a ClientRect / DomRect into a plain Object (6 个答案) 关闭 3 年前。 func
getBoundingClientRect() 返回元素在 转换后屏幕上的坐标。如何在转换之前 计算这些坐标?即没有转换。 我发现的最简单的方法是: element.style.transform =
我构建了一个组件,该组件将根据其尺寸和在窗口中的位置确定其打开方向。我在 react-dom 节点上使用了 getBoundingClientRect() 函数。现在我已经更新了一些项目包,包括 re
也许这是个愚蠢的问题。 getBoundingClientRect() 返回什么类型?我有以下错误: var logo1: HTMLElement = document.getElementById(
背景:我目前正在开发一个项目,我的 JS 应用程序被嵌入到多个其他(父)JS 应用程序中。某些父应用程序可以通过将 display:block/none 设置为包含我的应用程序的某些元素来显示/隐藏我
我正在尝试获取图像上鼠标单击的坐标。所以我像这样使用 getBoundingClientRect function showCoords(canvas, event) { var rect =
我是一名优秀的程序员,十分优秀!