如何使用jQuery动画更改背景图片?

18

我想使用缓慢的动画效果更改背景图像,但是它没有起作用。

 $('body').stop().animate({background:'url(1.jpg)'},'slow');

语法有问题吗!!


哪一部分没有工作?速度还是其他什么? - Matt Asbury
现在图片没有出现!!当我点击函数事件时!! - getaway
6个回答

47

你可以通过将图像的不透明度淡出到0,然后更改背景图像,最后再将图像淡入来获得类似的效果。

这将需要一个 div,在页面上其他所有元素的后面,宽度与 body 相同。

<body>
    <div id="bg"></div>
    ...
</body>

你可以使用CSS将其宽度设为整个页面宽度:

#bg {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
}

然后对它的属性进行动画处理。

$('#bg')
    .animate({opacity: 0}, 'slow', function() {
        $(this)
            .css({'background-image': 'url(1.jpg)'})
            .animate({opacity: 1});
    });

你可以创建一个在当前背景div上方的第二个背景div,然后将其淡入,这样可以获得更多的交叉效果。


1
这个方法可以实现,但是它会同时动画化body中所有内容的不透明度。我不确定这是否符合OP的要求。 - user113716
@patrick 当然,我不知道有什么办法可以(没有插件)使背景透明度动画化,所以可能需要一些额外的HTML来实现这种效果? - Marcus Whybrow
@Marcus:是的,你说得对,这需要一些额外的HTML,比如一个定位在z-index低于其他内容的元素,并将其拉伸到整个body的宽度/高度。编辑:我看到你已经更新了。不错的解决方案。+1 - user113716
.css({'background-image': 'url(img/'result.bgimage')'}) 我该如何将回调数据放入URL中? - getaway
@getaway 我不确定你的意思。你可以这样做:'background-image': 'url(img/result.bgimage)' - Marcus Whybrow
提供有效的解决方法比说 animate() 通常不能与图片一起使用更好(就像类似问题的答案一样)。这有潜力帮助许多程序员。 - EnKrypt

1

来自jQuery文档:

基本的jQuery功能无法对非数字属性进行动画处理。(例如,可以对宽度、高度或左侧进行动画处理,但不能对背景颜色进行处理。)

来源:http://api.jquery.com/animate/


使用jQuery UI?还是一些插件? - Šime Vidas
背景颜色是数字化的,可以进行动画处理。 背景图片是非数字化的,无法进行动画处理。 - Hussam

1

你无法对添加/替换背景图片进行动画处理。URL 要么存在,要么不存在,没有中间状态。


0
这是我实现的方法:
$(this).animate({
    opacity: 0
}, 100, function() {
    // Callback
    $(this).css("background-image", "url(" + new_img + ")").promise().done(function(){
        // Callback of the callback :)
        $(this).animate({
            opacity: 1
        }, 600)
    });    
});

0
我会使用一个伪装的div来覆盖背景作为固定元素,然后对该元素进行动画处理,例如:
<div id="bgDiv" style='display:none;background:URL("Water lilies.jpg");position:fixed; width: 100%; height: 100%; z-index: -1'></div>
<script type="text/javascript"> 
    $(document).ready(function(){  
        $('#bgDiv').toggle(1000); //You can plugin animate function here.

    }); 
</script>  

0
可能实现这个的方法是通过onclick添加一个带有背景图像的新类。然后对其进行动画处理? 或者淡出图像以显示新图像?

我在iPhone上,所以很难。但这里的一些答案可能会对你有所帮助。 - diagonalbatman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接