Мне нужно анимировать свойство background-position элемента с помощью jQuery. Следуя этому руководству, в котором по умолчанию используется функция анимации jQuery, мне не повезло.
http://snook.ca/archives/javascript/jquery-bg-image-animations
Моя функция была такой:
$('#content').css( {backgroundPosition: "0 0"} )
.animate(
{backgroundPosition:"(0 -900px)"},
{duration:500}
);
Мне не повезло с этим, поэтому я попытался написать свою собственную функцию, которая изменяет вертикальное положение фона элемента. Похоже:
$.fn.moveBackgroundY = function( pixels, duration, easing ) {
return this.animate(
{ pixels: pixels },
{
step: function(now,fx) {
console.log("Background Y position - " + now);
$(this).css({
backgroundPosition: '0px ' + now + 'px',
});
},
duration: duration,
complete: function() {
$(this).css({
backgroundPosition: '0px 0px',
});
}
}, easing);
};
Чтобы анимировать положение фона элемента Y до -900, я вызываю функцию следующим образом:
$('#content').moveBackgroundY(-900, 2100, 'easeInOutCubic');
Обратите внимание, что здесь переменная сейчас (положение фона Y) внутри step: будет уменьшаться с 0 до -900.
Это прекрасно работает, но тут возникает моя проблема. После этого мне нужно сбросить эту фоновую позицию на «0px 0px» напрямую с помощью функции jQuery .css (), а затем снова анимировать ее, например:
$('#content').moveBackgroundY(300, 2100, 'easeInOutCubic');
В этом случае при сбросе моей фоновой позиции на «0px 0px» параметр now должен изменяться от 0 до 300, но он изменяется от -900 до 300, где -900 было значением Сначала я вызываю свою функцию.
Кто-нибудь знает, что не так или как я могу сбросить этот параметр, чтобы он каждый раз принимал правильные значения?
У меня есть другая функция, подобная этой, которая вращает элемент, изменяющий свойство CSS3 transform - rotate, и у меня та же проблема.
Спасибо за вашу помощь!