0

我有一个带有背景图像的 div 元素,我正在尝试使用 Jquery 淡入和淡出背景图像。到目前为止,该功能运行良好,但它会淡出整个 div 而不仅仅是我希望的背景。

function rentPics()
{
    $('#d2').css('background-image','url(' + mazdaArr[1] + ')');
    interID=setInterval (changeImage,3000);
}

function changeImage()
    {
        $('#d2').animate({opacity: 0}, 1500, function(){
        $('#d2').css('background-image', 'url(' + mazdaArr[x] + ')');
        }).animate({opacity: 1}, 1500);
        x++;
        if (x==mazdaArr.length)
        {
            x=1;
        }
    }
4

4 回答 4

2

如果您正在寻找简单轻量级的交叉淡入淡出,请使用 CSS transition。这不会影响text元素内部, theborderbox-shadow.

transition: background-image 1s ease-in-out;
-webkit-transition: background-image 1s ease-in-out;
-moz-transition: background-image 1s ease-in-out;
-ms-transition: background-image 1s ease-in-out;
-o-transition: background-image 1s ease-in-out;

看看这个小提琴

Chrome、Safari 和 Opera 都支持它,但我不太确定 Firefox 和 IE

如果您有更大的图像列表要循环。您可能还需要考虑先缓存图像 URL,因为我注意到第一次使用时有些闪烁/闪烁。在此处查看解决方案 -预加载 CSS 背景图像

于 2013-11-13T02:48:45.167 回答
0

淡入将不透明度应用于包含背景图像的整个 div,您可以在要应用淡入和淡出的 div 后面创建一个图层。

于 2013-11-12T22:09:28.587 回答
0

您可以让它添加或删除一个类,而不是使用 jQuery 为不透明度设置动画。然后将过渡添加到您的 CSS,这应该会产生您想要的结果。像下面这样的东西可能会起作用。您可以在此处查看 CSS 过渡的文档。唯一的缺点是 IE,通常。

.element {
  -webkit-transition: ease 0.2 all;
  -moz-transition: ease 0.2 all;
  -o-transition: ease 0.2 all;
  -ms-transition: ease 0.2 all;
  transition: ease 0.2 all;
}
于 2013-11-12T22:09:41.543 回答
0

使用具有绝对定位覆盖的相对容器。您的 HTML 应如下所示:

<div id="d2" class="image-wrapper">
  <img src="/img/1.jpg" />
  <div class="overlay"> your text goes here </div>
</div>

...和你的CSS:

.image-wrapper {
    position: relative;
}
.image-wrapper .overlay {
    position: absolute;
    left: 0;
    top: 0;
    right: 0;
    bottom: 0;
    overflow: auto;
}
.image-wrapper img {
    display: block;
}

现在您可以更改图像的不透明度,而无需更改覆盖中的内容。

于 2013-11-12T22:15:08.410 回答