2013-09-05 46 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

我會試試 - 謝謝!但它有點讓我感到事實,我不能讓它與遞歸一起工作 –