我目前正在嘗試使用Zepto .anim()方法在頁面上跟蹤圖像的x和y位置。問題是,我用來試圖找到它們的任何方法只返回它最初加載的位置,而不是它現在的位置。我可以通過計算每當我需要它的位置來解決此問題,但該方法有點不可靠。有誰知道一個簡單的方法來做到這一點?如何跟蹤Zepto動畫圖像的位置?
編輯:要求:
$('#circle').anim({translateX: newX + 'px', translateY: newY + 'px'}, speed, 'linear')
我目前正在嘗試使用Zepto .anim()方法在頁面上跟蹤圖像的x和y位置。問題是,我用來試圖找到它們的任何方法只返回它最初加載的位置,而不是它現在的位置。我可以通過計算每當我需要它的位置來解決此問題,但該方法有點不可靠。有誰知道一個簡單的方法來做到這一點?如何跟蹤Zepto動畫圖像的位置?
編輯:要求:
$('#circle').anim({translateX: newX + 'px', translateY: newY + 'px'}, speed, 'linear')
這將會有點複雜,因爲您正在使用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)"
這些值存儲在變換矩陣。根據傳遞的內容,它可以是matrix
或matrix3d
。 See my answer to another SO question on how to extract X and Y values from this string.
很明顯,這是很多工作,您需要爲移動Firefox等添加更多邏輯。您可能想要考慮您嘗試的是什麼,並查看是否有其他方法。
代碼來自:Retrieve the position (X,Y) of an HTML element
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;
你可以用它來準確地獲取網頁上的元素的當前位置。
我試過了,它不適用於Zepto。它只是返回0,0,圓圈起源於此。 – CSturgess 2012-01-16 17:19:06
這是因爲瀏覽器在執行轉換時仍然認爲元素位於文檔的原始位置。 – 2012-01-16 19:04:12
你能提供更多的上下文嗎?你傳遞給'anim'的屬性是什麼? – 2012-01-16 16:59:42