【问题标题】:Fade one image into another using css or jquery使用 css 或 jquery 将一个图像淡入另一个图像
【发布时间】:2026-02-21 12:40:01
【问题描述】:

我需要能够在悬停时淡入初始图像上方的第二张图像。我需要确保第二张图片最初是不可见的,直到它淡入。另一个重要的注意事项是,任何一张图片都不应在任何时候完全淡出。我尝试了几种方法,例如使用 1 张图片、2 张图片、jquery animate 和 css 过渡。

我听说可以使用 jquery 为属性更改设置动画?如果这是真的,我如何使用 jquery 为 img 中的 'src' 的变化设置动画?

$(".image").mouseenter(function() {
        var img = $(this);
        var newSrc = img.attr("data-hover-src");

        img.attr("src",newSrc);
        img.fadeTo('slow', 0.8, function() {
            img.attr("src", newSrc);
        });
        img.fadeTo('slow', 1);
}).mouseleave(function() {
        var img = $(this);
        var newSrc = img.attr("data-regular-src");

        img.fadeTo('slow', 0.8, function() {
            img.attr("src", newSrc);
        });
        img.fadeTo('slow', 1);
});

这是我目前正在使用的。这是我得到的最接近的。但是你可以看到不理想的图像变化。

【问题讨论】:

  • 你尝试了什么?你有什么代码可以给我们看吗?
  • 只需将两个 div 上下浮动并在悬停时淡出一个。
  • 这是您要找的吗? jsbin.com/fepegoce/1/edit
  • 您已经提到两个图像都不应该完全淡出。这是否意味着在最终状态下仍然应该有初始图像的提示,而在悬停之前应该有最终图像的提示?还是应该在淡入淡出的终点只有一张图像可见?
  • 意思是我不希望初始图像变为 opacity:0,然后图像发生变化,然后新图像变为 opacity:1。我希望它是流畅的运动。

标签: javascript jquery html css image


【解决方案1】:

使用带有背景图片的单个 html 元素

HTML - 没有比这更简单的了

<div id="imgHolder"></div>

CSS

#imgHolder {
    width: 200px;
    height: 200px;
    display: block;
    position: relative;
}

/*Initial image*/
 #imgHolder::before {
    content:"";
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    position: absolute;
    background-image:url(http://placehold.it/200x200);
    -webkit-transition: opacity 1s ease-in-out;
    -moz-transition: opacity 1s ease-in-out;
    -o-transition: opacity 1s ease-in-out;
    transition: opacity 1s ease-in-out;
    z-index:10;
}

#imgHolder:hover::before {
    opacity:0;
}

#imgHolder::after {
    content:"";
    background: url(http://placehold.it/200x200/FF0000);
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    position: absolute;
    z-index: -1;
}

Demo

或者如果你想使用图片标签...

直接窃取:http://css3.bradshawenterprises.com/cfimg/

HTML

<div id="cf">
  <img class="bottom" src="pathetoImg1.jpg" />
  <img class="top" src="pathetoImg2.jpg" />
</div>

CSS

#cf {
  position:relative;
  height:281px;
  width:450px;
  margin:0 auto;
}

#cf img {
  position:absolute;
  left:0;
  -webkit-transition: opacity 1s ease-in-out;
  -moz-transition: opacity 1s ease-in-out;
  -o-transition: opacity 1s ease-in-out;
  transition: opacity 1s ease-in-out;
}

#cf img.top:hover {
  opacity:0;
}

链接中还有许多其他示例可供使用,但这将帮助您入门。

最终不透明度

您提到您不希望初始图像完全消失。为此,请将 opacity:0 更改为 opacity:0.5 或类似的东西。您需要对该值进行试验以获得所需的结果。

Demo with final opacity of 0.8

动态图像尺寸

我认为如果只使用 CSS,你会被 两个图像 版本卡住。 HTML 也一样。

CSS

#cf {
    position:relative;
}

#cf img {
    -webkit-transition: opacity 1s ease-in-out;
    -moz-transition: opacity 1s ease-in-out;
    -o-transition: opacity 1s ease-in-out;
    transition: opacity 1s ease-in-out;
}

#cf img.bottom {
    z-index:-1;
    opacity:0;
    position:absolute;
    left:0;
}

#cf:hover img.top {
    opacity:0.8;
}

#cf:hover img.bottom {
    display:block;
    opacity:1;
}

Demo

【讨论】:

  • 我将如何使用动态宽度/高度来执行这些示例中的任何一个?每个图像的宽度/高度都会改变,因此在大多数情况下,宽度/高度不会是 200/200。感谢您的时间和示例。
  • 所以你要转换的图片大小不同?