Анимация фоновой позиции y в Firefox с помощью Jquery
Я пытаюсь анимировать только позицию y фонового изображения.
код отлично работает во всех браузерах, кроме Firefox. Я заметил в предыдущем обсуждении, что у FF есть проблема с background-position-y
но я не хочу включать плагин только для этого конкретного случая.
$(".module").animate({
"height": 160,
"background-position-y": cropsize //variable for needed position
}, "slow");
как ответили в этом вопросе:по - прежнему возникают проблемы с jQuery background animate-работает в safari и IE, ничего больше! я должен быть в состоянии использовать простой background-position
свойство, но это только нарушило анимацию в других браузерах.
$(".module").animate({
"height": 160,
"background-position": "0 "+cropsize+"px"
}, "slow");
возможно, это просто синтаксическая ошибка, которой мне не хватает, но я не могу заставить это работать в FF (последняя версия)
8 ответов
background-position-x/y
на самом деле не является частью какой-либо спецификации CSS, ее специфический CSS IE, добавленный в IE5.5, а затем реализован Webkit.
Opera и Firefox не принимают его.
лучшее решение-использовать step
метод, который позволит вам анимировать что угодно.
чтобы добавить немного к ответу Луки, что несколько неправильно, хотя метод правильный, самый простой способ использовать step
метод должен анимировать некоторое произвольное значение и зацепить шаг ему что-то вроде:
$('elem').animate({
'border-spacing': -1000
},
{
step: function(now, fx) {
$(fx.elem).css("background-position", "0px "+now+"px");
},
duration: 5000
});
элемент должен быть обернут в стиль jQuery, чтобы принять методы jQuery, такие как css()
.
Я использовал border-spacing
, но любое свойство css, которое не повлияет на ваш сайт, будет работать, просто не забудьте установить начальное значение в CSS для используемого свойства css.
The step
метод также может использоваться отдельно, если вы установите fx.старт и fx.конечные значения, используя его, как Лука делает с now+=1
в значительной степени равно просто с помощью setInterval но идея была все равно здравой.
EDIT:
С новыми версиями jQuery есть и другие варианты, см. Этот ответ :
firefox не понимает фоновую позицию с jQuery animate, но firefox принимает CSS3 animate.
код:
if ($.browser.mozilla) {
$('.tag').css({
'background-position': 'center 0px',
'-moz-transition': 'all 1500ms ease'
})
} else {
$('.tag').animate({
'background-position-y': 0
}, 1500);
}
похоже, что анимация jquery будет принимать только одно свойство фона, а не оба. Вы можете использовать либо проценты, либо пиксели, оба в порядке. Но из того, что я могу сказать, нет способа указать только координаты x или y. Надеюсь, кто-то может доказать мне, что я ошибаюсь, но это то, что эта скрипка, кажется, показывает:
http://jsfiddle.net/JMC_Creative/dPjSz/
кроме того, независимо от того, какие значения фоновой позиции вы помещаете в css, анимация jquery всегда кажется, что начинается с " 0 50%". Хммм...
используйте параметр шага:
$("item").animate({
opacity:1,
},
step: function(now, fx){
$(fx.elem).css("background-position","0px "+now+"px");
now+=1;
}
});
из документации jQuery:http://api.jquery.com/animate/#step
$initElement.addClass(initClass).animate(
{height:[0, 'easeInCirc'], top: ['+=' + initHeight, 'easeInCirc'] , borderSpacing:[initHeight,'easeInCirc']},
{step: function(now, fx) {
$initElement.css({"background-position" : "0px -"+now+"px"}
)},
},
{duration: time4design, queue:false},
function(){ $initElement.removeClass(initClass)});
var x = 0; var y = 0;
window.setInterval(function() {
$(".layer").css("background-position", x + "px " + y + "px");
x++; y--;
}, 50);
Это было легко : -) источник с примером в http://makeasite.ru/blog/animate-background-position-firefox.html
в jQuery вы можете анимировать background-position-x
или y
такой:
$(selector).animate({
backgroundPositionY: amountToAnimate
}, duration);
идея в том, что в JavaScript -
символ является зарезервированным оператором вне строк. jQuery использует camelcase для работы с этим.