1

我目前正在尝试使用 Zepto .anim() 方法在我的页面上跟踪图像的 x 和 y 位置。问题是我用来尝试找到这些的任何方法都只返回它最初加载的位置,而不是它现在的位置。我可以通过在需要时计算它的位置来解决这个问题,但是这种方法有点不可靠。有谁知道一个简单的方法来做到这一点?

编辑:根据要求:

$('#circle').anim({translateX: newX + 'px', translateY: newY + 'px'}, speed, 'linear')
4

2 回答 2

3

这会有点复杂,因为您使用的是 CSS3 转换,并且实际上没有任何 Zepto API 公开用于检索此信息。

首先,您必须了解信息的存储位置。假设您使用的是 Android、iPhone、Safari 或 Chrome,这就是webkitTransform属性。

如果您访问$('#circle').css('webkitTransform'),您将看到translateX(somevalue) translateY(somevalue)值是您在 JavaScript 中传递的内容。

不幸的是,这是最终值而不是中间值。对于中间值,您将需要以下内容:

getComputedStyle($('#circle')[0]).webkitTransform
// == "matrix(1, 0, 0, 1, 87.66703796386719, 82.89203643798828)"

这些值存储在转换矩阵中。它可以是 amatrix或 amatrix3d基于传递的内容。 请参阅我对另一个 SO 问题的回答,了解如何从该字符串中提取 X 和 Y 值。

显然,这是很多工作,您需要为移动 Firefox 等添加更多逻辑。您可能想考虑一下您正在尝试什么,看看是否有替代方法。

于 2012-01-16T17:47:05.967 回答
2

代码来自:检索 HTML 元素的位置 (X,Y)

function getOffset( el ) {
    var _x = 0;
    var _y = 0;
    while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) {
        _x += el.offsetLeft - el.scrollLeft;
        _y += el.offsetTop - el.scrollTop;
        el = el.offsetParent;
    }
    return { top: _y, left: _x };
}
var x = getOffset( document.getElementById('yourElId') ).left; 

您可以使用它来准确获取页面上元素的当前位置。

于 2012-01-16T17:05:29.853 回答