首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获得translate3d后的divs位置

获得translate3d后的divs位置
EN

Stack Overflow用户
提问于 2015-02-03 09:40:50
回答 3查看 4.6K关注 0票数 5

在Javascript中,当我通过translate3d方法使用gpu移动元素时,元素样式-左的位置根本不会改变。由于cpu甚至不知道任何运动已经发生。

在通过translate3d移动元素之后,如何跟踪元素的新位置?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-03 17:30:00

使用Element.getBoundingClientRect()获取元素坐标

下面是一个小示例,它从已翻译(动画)元素的.left中检索CSS3 Rect属性:

代码语言:javascript
复制
const box = document.getElementById('box');
const printer = document.getElementById('printer');
const printBoxRectLeft = () => {
  printer.textContent = box.getBoundingClientRect().left;
  requestAnimationFrame(printBoxRectLeft);
};

printBoxRectLeft();
代码语言:javascript
复制
#box{
  width:30px; height:30px; background:red;
  animation: animX 3s infinite alternate;
}
@keyframes animX { to{ transform:translateX(300px); }}
代码语言:javascript
复制
<div id="printer"></div>
<div id="box"></div>

票数 7
EN

Stack Overflow用户

发布于 2015-02-03 10:39:29

如果不手动设置样式属性左侧,则设置为auto。但是您应该能够使用jquery函数位置()。

代码语言:javascript
复制
    var position = $('#element').position();
    var left = position.left;

http://jsfiddle.net/nqab2aw7/2/

票数 3
EN

Stack Overflow用户

发布于 2017-05-26 00:45:29

在大多数情况下,使用getBoundingClientRect的其他答案都是有效的,但它是从视口计算的,而不是DOM的实际0、0。因此,如果父元素具有负的同弦,并且不显示屏幕,getBoundingClientRect将返回错误的坐标。

它还忽略了marginpaddingborderWidth,因此如果您需要非常精确地:

trueLeft = rect.left - margin.left - padding.left - borderWidth - offsetX

要获得其他值,可以使用RegExp

代码语言:javascript
复制
'translate3d(256px, 512px, 0px)'.replace(/translate3d|px|\(|\)/gi, '').split(',');

// { x: trueLeft, y: translate3d[1], z: translate3d[2] }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28295670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档