如何在transform:scale()之前得到元素的位置(相对于它的容器)?

时间:2016-06-17 21:50:13

标签: javascript jquery html css css3

我在容器中有一个浮动的,固定大小的盒子网格。我需要使用JS / jQuery获取每个盒子相对于容器的位置。我知道我可以在容器上设置position: relative并使用jQuery $box.position(),但它不起作用,因为我的<body>是使用transform: scale()缩放的。 (我有另一个脚本可以缩放<body>以匹配视口宽度,类似于this,但对于这个问题,只需知道<body>transform: scale()任意比例因子。)

jQuery&#39; $box.position()似乎在缩放后返回位置,但我希望之前的原始位置缩放。例如,如果每个框都有width: 300px; margin-right: 10px,则第三列中的框应该具有偏移620px(缩放前)。但是,如果$box.position().left310px,则<body>会给transform: scale(0.5)(缩放后)。

在不知道缩放系数的情况下,有没有办法在缩放之前获得位置?我找到了原生DOM方法getBoundingClientRect(),但是(1)it still gives the position after scaling和(2)it's relative to the viewport而不是容器。

感谢。

1 个答案:

答案 0 :(得分:0)

尝试使用原生DOM属性offsetLeftoffsetTopBrowser support看起来不错:基本上所有浏览器和IE8 +。我尝试了这些属性,他们似乎至少在Chrome,Firefox和IE11扩展之前给出了正确的位置。

因为它们是原生DOM属性,所以首先需要$element[0]来获取基础DOM元素:$box[0].offsetLeft$box[0].offsetTop。另请注意,它们给出了元素边框的左上角位置,不是边距框。