如何使用jQuery和CSS创建图像悬停淡入淡出效果?

时间:2016-05-02 19:04:29

标签: jquery css hover fadein fadeout

我试图通过淡入和淡出两个图像来创建徽标悬停效果。我尝试使用CSS,但结果看起来并不像预期的那样好(即使它完全适用于其他目的),所以我决定尝试jQuery。 (忽略标签,他们是博主)。

这是我的第一种方法(当涉及到褪色时看起来很好,但是'display:none'在第一次悬停在它上面时没有正确地成为'display:block',所以图像从其初始位置移开。然后它回到那个位置,当它悬停时效果很好。

<script type='text/javascript'>
//<![CDATA[
$(function() {
$('#MyLogoContainer').hover(function() {
    $('#MyLogoHover').fadeIn('slow');
    $('#MyLogo').fadeOut('slow');  
}, function() { 
    $('#MyLogo').fadeIn('slow'); 
    $('#MyLogoHover').fadeOut('slow');   
});
});
//]]>
</script>

我的第二种方法解决了CSS位置问题,但动画看起来并不流畅,两个图像在某些时候几乎完全消失,这看起来并不好,而且我的拳头方法没有发生。

<script type='text/javascript'>
//<![CDATA[
$(function() {
$('#MyLogoContainer').hover(function() {
    $('#MyLogoHover').fadeIn('slow').css('display','block');
    $('#MyLogo').fadeOut('slow').css('display','none');  
}, function() { 
    $('#MyLogo').fadeIn('slow').css('display','block'); 
    $('#MyLogoHover').fadeOut('slow').css('display','none');   
});
});
//]]>
</script>

问题必须在CSS中。不知何故,我必须找到一种方法,因此显示属性在定位这两个SVG图像中的任何一个方面都不起作用,所以我可以使用第一个jQuery代码而不会对我的SVG图像的位置发生任何变化。

#MyLogoContainer {
    width: 100%;
    left: 50%;
    margin: 0 0 0 -350px;
    position: absolute;
}
#MyLogo {
    width: 700px;
    display: block;
    position: absolute;
}

#MyLogoHover {
    width: 700px;
    display: none;
    position: absolute;
}

1 个答案:

答案 0 :(得分:2)

根据您的描述,您可能甚至不需要JS来执行此操作:

.container {
  position: relative;
  display: inline-block;
  box-sizing: border-box;
  border: 1px solid black;
  cursor: pointer;
  overflow: hidden;
  background: #ccc;
  height: 150px;
  width: 150px;
}

.container:hover .logo--static-state {
  opacity: 0;
}

.container:hover .logo--hover-state {
  opacity: 1;
}

.logo {
  position: absolute;
  transition: opacity 300ms ease-in-out;
}

.logo--static-state {
  z-index: 9999;
}

.logo--hover-state {
  opacity: 0;
  z-index: 9998;
}
<div class="container">
  <img class="logo logo--static-state" src="http://placehold.it/150x150?text=Static" height=150 width=150>
  <img class="logo logo--hover-state" src="http://placehold.it/150x150?text=Hovered" height=150 width=150>
</div>