background-position-x/y
is not really part of any CSS spec, its IE specific CSS, added to IE5.5, and later implemented by Webkit.
Opera and Firefox do not accept it.
The best solution is to use the step
method, that will let you animate just about anything.
To add a little to Luka's answer, which is somewhat wrong even though the method is correct, the easiest way to use the step
method is to animate some arbitrary value, and hook a step to it, something like:
$('elem').animate({
'border-spacing': -1000
},
{
step: function(now, fx) {
$(fx.elem).css("background-position", "0px "+now+"px");
},
duration: 5000
});
The element will have to be wrapped jQuery style to accept jQuery methods, like css()
.
I've used border-spacing
, but any css property that will not affect your site will work, just remember to set an initial value in your CSS for the css property used.
The step
method can also be used alone, if you set the fx.start and fx.end values, using it like Luka does with now+=1
is pretty much equal to just using a setInterval instead, but the idea was sound all the same.
FIDDLE
EDIT:
with newer versions of jQuery there are other options as well, see this answer :
JQuery Animate Background Image on Y-axis
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…