jQuery在悬停时更改(带有淡入淡出动画)div的背景图像

Posted

技术标签:

【中文标题】jQuery在悬停时更改(带有淡入淡出动画)div的背景图像【英文标题】:jQuery to change (with fade animation) background image of div on hover 【发布时间】:2013-09-16 13:15:58 【问题描述】:

我正在尝试使用 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/

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

【问题讨论】:

jQuery 的动画不适用于图像。您需要使用 css 和转换才能使其正常工作。 看看这里***.com/questions/4630947/… 如果你真的想使用 jQuery,最好只在 css 中悬停 .logo:hover /*new img */动画 感谢您的提醒。我从没想过 jQuery 的动画不适用于图像... 【参考方案1】:

你不能在图像上使用 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');

【讨论】:

@TusharGupta 我没有拒绝你。但是,在检查了您的示例之后,这不是 OP 所要求的。 哦对不起,我还以为是你又对不起了:) 嗯,我又想多了 :) 谢谢@Archer。 这仅适用于 Chrome。背景图像动画未正式包含在 W3C 中。【参考方案2】:

您不能使用.animate() 为非数字属性设置动画

【讨论】:

感谢您的建设性回答。【参考方案3】:

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
                );
        );
);

【讨论】:

这不是 animate 所做的(或者如果它适用于图像,它会做)。 OP 正在寻找一个背景图像淡入另一个,而不是先淡出。 没错。虽然 Tushar 的解决方案效果很好,但我不喜欢淡出/淡入,我更喜欢从一张图像淡入到另一张图像。【参考方案4】:

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

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

【讨论】:

不错!感谢您的贡献。【参考方案5】:

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

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

【讨论】:

两个问题:他想将一张图片淡入另一张图片,而且他有背景图片,而不是&lt;img src="..."/&gt;标签。【参考方案6】:

尝试这样做:-

$('.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)"); 
    
);

【讨论】:

这是有效的,但它没有褪色......我需要一些不那么激进的东西,有褪色......

以上是关于jQuery在悬停时更改(带有淡入淡出动画)div的背景图像的主要内容,如果未能解决你的问题,请参考以下文章

如果动画在jQuery中停止,如何防止回调?

jQuery 淡入淡出切换

在 CSS 悬停事件中,我可以使用淡入淡出更改另一个 div 的样式吗?

如何仅使用 CSS 在具有淡入淡出效果的悬停时更改 DIV `background linear-gradient`? [复制]

jQuery不透明度/淡入淡出动画只能使用一次

jquery悬停图像淡入淡出交换