【发布时间】:2015-02-28 23:29:02
【问题描述】:
getBoundingClientRect() 返回屏幕上元素在被变换后的坐标。我如何计算这些坐标之前被转换?即没有转换。
我找到的最简单的方法是:
element.style.transform = 'none'; //temporarily reset the transform
var untransformedOffset = element.getBoundingClientRect().top; //get the value
element.style.transform = ''; //set it back
但这会导致缓慢的布局抖动,尤其是在许多元素上进行时尤其明显。现场演示:http://jsbin.com/nibiqogosa/1/edit?js,console,output
有没有更好的办法?
该javascript代码可应用于:
<div id="element"></div>
<style> #element { transform: translateY(20px); }</style>
结果为0(不包括页边距)
element.getBoundingClientRect().top 的结果为 20(不包括页边距)
编辑:答案汇总
【问题讨论】:
-
读取变换矩阵,并对矩阵值和当前边界矩形进行一些计算。
-
有趣,如果你把它作为答案,我会赞成。如果结果在每个浏览器中始终是
matrix或matrix3d,这将是hacky。 -
@fregante 感谢您抽出宝贵的时间来完成您的“答案综述”,它是一颗宝石。和本杰明的选择一样
标签: javascript