2013-09-05 47 views
1

我在这方面遇到了相当多的麻烦。这是我到目前为止:查找水平移动元素的每个X,Y位置

var findPos = function(obj){ 
    var curLeft = 0; 
    var curTop = 0; 
    var arr = []; 

    curLeft += obj.offsetLeft; 
    curTop += obj.offsetTop; 
    arr[arr.length] = {x: curLeft, y: curTop}; 
    return arr; 
} 

这只会返回传递给函数的元素的起始位置。但随着对象的移动,我希望它将所有位置(x,y)存储在返回的数组中。有关如何做到这一点的任何建议?我尝试过递归,但那并没有真正解决。

如果相关,元素正在使用CSS @keyframes移动。

+0

如果声明的常用3作为findPos一个局部变量,那么它会被重置为空数组每次调用findPos时间。在此函数之外声明arr。 – mbeckish

回答

1

@mbeckish有正确的想法,并且由于该数组是全局的,所以您不一定需要返回它 - 它将被函数更新。另外,似乎没有必要使用变量“积累”x,y位置。偏移量应该足够。你需要的东西是这样的:

var arr = []; 

var findPos = function(obj){ 
    arr[arr.length] = {x:obj.offsetLeft, y:obj.offsetTop}; 
} 

要跟踪随着时间的推移,你可以使用setInterval()或setTimeout的()函数的动画,所以是这样的:

var intRef = window.setInterval(function(){ findPos(obj) }, 100); 

以上将火过每100毫秒并填充你的数组。然而,这会无限期地继续下去,直到你停止它,所以你需要某种触发器或结束时间。要关闭协调跟踪,使用:

window.clearInterval(intRef); 
+0

谢谢。我意识到我的一些代码是多余的,但我仍然在努力争取每个位置都随着对象的移动而变化。那里有任何提示? :) –

+0

@ Nilzone- - 您可能最好的做法是使用'setInterval()'函数每隔多久调用一次'findPos()'函数。但是,如果你走这条路线,你可能还需要手动设置元素的动画,并跟踪x,y位置并更新它们。 –

+0

我会试试 - 谢谢!但它有点让我感到事实,我不能让它与递归一起工作 –