我似乎无法让这个工作起来。
$('#product_family_options_dd').animate({
height: '300px',
width: '900px',
backgroundPosition: '-20px 0px',
},
高度和宽度会动画变化,但背景不会。
我似乎无法让这个工作起来。
$('#product_family_options_dd').animate({
height: '300px',
width: '900px',
backgroundPosition: '-20px 0px',
},
高度和宽度会动画变化,但背景不会。
如果你只是使用分开的值,就不需要使用背景动画插件:
$('.pop').animate({
'background-position-x': '10%',
'background-position-y': '20%'
}, 10000, 'linear');
我猜可能是因为它期望一个单一的值?
所有动画属性都应该被动画化为单个数字值, 除非以下情况特别说明; 大多数非数字的属性不能使用基本的jQuery功能来进行动画处理。(例如,可以对width、height或left进行动画处理,但无法对background-color进行动画处理)。属性值被视为像素数量,除非另有规定。适用时可以指定单位em和%。
background-position-x
和background-position-y
作为单独的值。不要只使用background-position
。 - Reinstate Monica Cellio由于jQuery默认不支持此功能,目前我找到的最佳解决方案是在jQuery中定义自己的CSS hooks。这基本上意味着定义自定义方法来获取和设置CSS值,并且还与jQuery.animate()一起使用。
已经有一个非常方便的实现版本存在于github上: https://github.com/brandonaaron/jquery-cssHooks/blob/master/bgpos.js
有了这个插件,您可以像这样做:
$('#demo1').hover(
function() {
$(this).stop().animate({
backgroundPositionX: '100%',
backgroundPositionY: '100%'
});
},
function () {
$(this).stop().animate({
backgroundPositionX: '105%',
backgroundPositionY: '105%'
});
}
);
对我而言,这个方法在所有测试过的浏览器上都可行,包括IE6+。
我之前还在线放了一个快速演示,如果你需要更进一步的指引,可以参考一下。
jQuery 的 animate 函数不仅可以直接用于 DOM 对象的属性动画,还可以 tween 变量,并使用 step 函数获取每个 tween 步骤的变量。
例如,要将背景位置从 background-position(0px 0px) 动画到 background-position(100px 500px),可以这样做:
$({temporary_x: 0, temporary_y: 0}).animate({temporary_x: 100, temporary_y: 500}, {
duration: 1000,
step: function() {
var position = Math.round(this.temporary_x) + "px " + Math.round(this.temporary_y) + "px";
$("#your_div").css("background-position", position);
}
});
请确保在步骤函数中不要忘记this.
backgroundPosition: '-20px 0px',
然而,在列出你想要在.animate()方法(和类似的方法)中更改的各种属性时,花括号之间列出的最后一个参数不应该在其后加逗号。我不能确定这是否是背景位置没有被更改的原因,但这是一个错误,我建议修复。
更新:在我刚刚进行的有限测试中,仅输入数字值(不带“px”)可以在.animate()方法中使用backgroundPosition。换句话说,这样做是可行的:
backgroundPosition: '-20 0'
backgroundPosition: '-20px 0'
background-position-x
属性的第一个值。如果你尝试用这种方法去动画化 background-position-y
属性,它将不起作用。而且你不能同时使用 background-position-y
并支持 Firefox… - Jasper你不能使用简单的jQuery Animate来完成这个操作,因为它涉及到2个值。
要解决这个问题,只需包含背景位置插件,就可以随心所欲地动画化背景了。
background-position-y
和background-position-x
。 - Jasper$(this).animate( {backgroundPositionX: "-=20px"} ,500);
我有一个div,名为My_div,大小为250px x 250px,背景图片也是250 x 250。
CSS:
#My_div {
background: url("..//img/your_image.jpg") no-repeat;
background-position: 0px 250px;
}
JavaScript:
$("#My_div").mouseenter(function() {
var x = 250;
(function animBack() {
timer = setTimeout(function() {
if (x-- >= 0) {
$('#My_div').css({'background-position': '0px '+x+'px'});;
animBack();
}
}, 10);
})();
});
$("#My_div").mouseleave(function(){
$('#My_div').css({'background-position': '0px 250px'});
clearTimeout(timer);
});
希望它有所帮助
backgroundPosition
应该改成background-position
,或者也可以设置background-position-x
和background-position-y
,你觉得呢? - Luke Duddridge