2011-05-05 51 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