如何使用 jQuery 和 CSS 创建图像悬停淡入淡出效果?
How to create an image hover fade effect with jQuery and CSS?
我正在尝试通过淡入淡出两个图像来创建徽标悬停效果。我尝试使用 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;
}
根据您的描述,您甚至可能不需要 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>
我正在尝试通过淡入淡出两个图像来创建徽标悬停效果。我尝试使用 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;
}
根据您的描述,您甚至可能不需要 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>