jQuery在悬停时改变(使用淡入淡出动画)div的背景图像

时间:2013-09-12 08:38:24

标签: jquery html css jquery-ui jquery-animate

我正在尝试使用jQuery在悬停时更改div的背景图像。 这是我到目前为止所提出的,然而,它不起作用:

HTML

<div class="logo"></div>

CSS

.logo {
 width: 300px;
 height: 100px;
 background: url('http://placehold.it/300x100/ffffff/000000.png&text=first') no-repeat center top;
}

JS

$('.logo').hover(
    function(){
        $(this).animate({backgroundImage: 'http://placehold.it/300x100/ffffff/000000.png&text=second'},'fast');
    },
    function(){
        $(this).animate({backgroundImage: 'http://placehold.it/300x100/ffffff/000000.png&text=first'},'fast');
});

jsfiddle 此处:http://jsfiddle.net/26j6P/1/

我做错了什么? 如果我为背景颜色设置动画,它就可以正常工作......

6 个答案:

答案 0 :(得分:11)

你不能对图像使用jQuery的动画 - 它只是不起作用。

使用普通的CSS,就像这样...

http://jsfiddle.net/26j6P/9/

这是css ......

.logo {
    width: 300px;
    height: 100px;
    background: url('http://placehold.it/300x100/ffffff/000000.png&text=first') no-repeat center top;
    transition: 0.5s;
}
.logo:hover {
    background-image: url('http://placehold.it/300x100/ffffff/000000.png&text=second');
}

答案 1 :(得分:6)

您无法使用.animate()

为非数字属性设置动画

答案 2 :(得分:4)

DEMO

$('.logo').hover(

    function () {
        $(this).animate({
            opacity: 0
        }, 'fast', function () {
            $(this)
                .css({
                    'background-image': 'url(http://placehold.it/300x100/ffffff/000000.png&text=second)'
                })
                .animate({
                    opacity: 1
                });
        });
    },

    function () {
        $(this).animate({
            opacity: 0
        }, 'fast', function () {
            $(this)
                .css({
                    'background-image': 'url(http://placehold.it/300x100/ffffff/000000.png&text=first)'
                })
                .animate({
                    opacity: 1
                });
        });
});

答案 3 :(得分:2)

我知道我有点迟了。但如果有人需要这样做,那就有一个jquery插件。转到以下链接,向下滚动到演示,然后选择使用Backstretch作为幻灯片。它工作正常。

http://srobbin.com/jquery-plugins/backstretch/

答案 4 :(得分:1)

尝试这样做: -

$('.logo').hover(
    function() {
        $(this).css("background-image",
                    "url(http://placehold.it/300x100/ffffff/000000.png&text=second)"); 
    },
    function() {
        $(this).css("background-image",
                    "url(http://placehold.it/300x100/ffffff/000000.png&text=first)"); 
    }
);

答案 5 :(得分:1)

我看到有人说你不能用jQuery做到这一点,这是我的榜样,它有效。 $(".bannerImages img")直接调用我的图片,因此我们可以使用$(this)更改其属性。完成后,您可以致电$(this)并更改其attr,同时添加动画。

$(".bannerImages img").animate({opacity: 0}, 'slow', function() {
     $(this)
         .attr({'src': 'images/mainSlider/ps1.jpg'})
         .animate({opacity: 1});
});