2011-05-05 54 views
1

我正在創建一個改變背景圖像值的動畫。如果我在座標中硬編碼,它是完美的工作,但我試圖修改它,以便它將該位置平均增加20px。如何使用jQuery增加CSS Y位置座標?

下面是我使用的檢索原始Y位置的代碼 - 完美的作品:

$('.rss,.twitter,.jquery').each(function(){ 
// Returns "##px" and "##px" 
var backgroundPositions = $(this).css('background-position').split(" "); 
// Retrieve the original Y position 
$(this).data("originalYpos", backgroundPositions[1].slice(0, -2)); 
}); 

現在我想通過20px的遞增originalYpos的價值,但是這不工作:

var animateNum = function() { 
$('.rss,.twitter,.jquery').animate({ 
var YPos = $(this).data('originalYpos')+20; 
backgroundPosition: 0 + "px " + YPos + "px"}, 400, "easeOutCirc"); 
}; 

我確實相信這是因爲在.animate()內部不允許聲明var Ypos,但我需要引用$(this),這意味着3個單獨選擇器中的每一個的值都是動畫。

任何建議,非常感謝!

回答

0

應該是這樣的:

var animateNum = function() { 
$('.rss,.twitter,.jquery').animate({ 
    backgroundPosition: $(this).data('originalYpos')+20 + "px"}, 400, "easeOutCirc"); 
}; 
+0

您好,感謝您的答覆。不幸的是,我確實有過這種方式,它不起作用 - 它在Firebug中返回這個錯誤:「丟失:屬性ID後」。我的解釋是,聲明不允許在.animate()內(它期望一個屬性)。 – 2011-05-05 14:33:33

+0

@Al,你說得對。我正在編輯答案 – 2011-05-05 16:22:13

+0

感謝百萬埃德加 - 這就是訣竅! – 2011-05-05 18:58:31

1

嘗試:

var animateNum = function() { 
    $('.rss,.twitter,.jquery').animate({ 
     backgroundPosition: "0 " + ($(this).data('originalYpos')+20) + "px" 
    }, 400, "easeOutCirc"); 
}; 
+0

感謝您的迴應 - 不幸的是這不起作用 - 我在Firebug中收到「缺少:屬性ID後」錯誤。由於背景圖像動畫不是本機支持的,因此我使用在此處找到的「背景位置動畫」插件:http://plugins.jquery.com/project/backgroundPosition-Effect在我看來,它只是期待一個屬性在.animate()中。我只需要一種方法來使位置座標變成一個可以在.animate()函數內讀取的增量變量。 – 2011-05-05 16:12:32

1

爲什麼保存舊價值可言:

動畫性能也可相對的。如果某個值的前面加上了+或 - =字符序列,則目標值是通過從屬性的當前值中加上或減去給定數字來計算的。

所以,下面應該工作代碼(雖然我還沒有嘗試過自己)

var animateNum = function() { 
    $('.rss,.twitter,.jquery').animate({ 
     backgroundPosition: "+=20px" 
    }, 400, "easeOutCirc"); 
}; 
+0

感謝您的響應 - 不幸的是這不起作用 - 我收到一個「丟失:在財產ID後」在Firebug中的錯誤。由於背景圖像動畫不是本機支持的,因此我使用在此處找到的「背景位置動畫」插件:http://plugins.jquery.com/project/backgroundPosition-Effect在我看來,它只是期待一個屬性在.animate()中。我只需要一種方法來使位置座標變成一個可以在.animate()函數內讀取的增量變量。 – 2011-05-05 16:12:14