2016-02-05 39 views
2

我正在嘗試使用jQuery和css從當前位置移動元素位置。但是,我使用似乎並沒有語法上,做任何事情:使用增量移動css位置

var ball = $("#ball1"); 
var movement = { 
    x: 5, 
    y: 5 
} 
ball.css({ 
    top: "+="+movement.y, //+= adds the value 
    left: "+="+movement.x 
}); 

任何人都可以證實,如果我的ball.css({下的代碼是正確的?

回答

5

這是不正確的。你給使用這樣

ball.css({ 
    top: parseInt(ball.css('top')) + movement.y + 'px', 
    left: parseInt(ball.css('left')) + movement.x + 'px' 
}); 

獲取計算樣式屬性在匹配的元素集合的第一個元素。

,你可以在documentation網站上看到,jQuery.css會給我們的計算值,這意味着我們沒有得到15如果left15px,例如。爲此,我們必須使用parseInt。檢查這個答案更好的用法parseInt。因此,這應該在它的工作,但有人回答對後,我們可以創建一個jQuery插件,讓它看起來更好:

jQuery.fn.cssNumber = function(prop){ 
    var v = parseInt(this.css(prop), 10); 
    return isNaN(v) ? 0 : v; 
}; 

ball.css({ 
    top: ball.cssNumber('top') + movement.y + 'px', 
    left: ball.cssNumber('left') + movement.x + 'px' 
}); 

我也爲你創建了一個working example

+0

聖鉬,烏爾男人! :) – MarksCode

+0

很高興你喜歡它:) – Victor

+0

我試過閱讀Jquery.fn文檔,但我不完全理解它。它重寫'cssNumber'還是創建一個名爲'cssNumber'的新函數? – MarksCode

0

嘗試......

ball.css({ 
    top: +movement.y, 
    left: +movement.x 
}); 
+0

這似乎移動它,然後它回到它的原始 – MarksCode

+0

@MarksCode你可以把你的代碼放在一個小提琴中,以便於理解嗎? – Illaya

+0

是的,在這裏你去,謝謝你的幫助:) https://jsfiddle.net/vo1zysds/在我的本地機器上有一個「BlueBall.png」,但它不會出現在小提琴 – MarksCode