有没有人可以看看我的代码。它应该做的是使用fadeIn和fadeOut动画的img标签,但它只淡出第一个img,而不是在第二个img淡出。我认为我的css可能是错误的,这就是为什么第二张图片没有显示我没有得到任何错误的原因
它是一个图像叠加在另一个图像之上
jQuery
$(document).ready(function() {
$('.social-media a').on('mouseenter', function(e) {
$(this).find("img:nth-child(2)").fadeIn();
$(this).find("img:nth-child(1)").fadeOut()
});
})HTML
<div class="social-media">
<a title="Share On Twitter" href="#">
<img alt="" src="images/icon_twitter.png" />
<img class="test" alt="" src="images/icon_twitter_active.png" />
</a>
</div>CSS
.social-media {
padding-top: 20px;
width: 166px;
margin: 0 auto 10px auto;
}
.social-media a {
position: relative;
width: 55px;
height: 51px;
}
.social-media a img:nth-child(1) {
opacity: 1;
}
.social-media a img:nth-child(2) {
position: absolute;
left: 0; top: -33px;
opacity: 0;
z-index: 2;
}发布于 2014-05-18 06:21:39
您应该改用display: none,而不是用零不透明度隐藏第二个<img>元素:
.social-media a img:nth-child(2) {
position: absolute;
left: 0; top: -33px;
display: none;
z-index: 2;
}http://jsfiddle.net/8vH4E/
但是,我强烈建议使用简单的CSS图像sprite来实现此效果,它不需要JS。
更新:自从OP询问是否可以使用CSS时,我已经修改了以排除JS的使用,并简单地依赖于CSS和伪元素:http://jsfiddle.net/8vH4E/2/。
.social-media a {
display: block;
position: relative;
width: 100px;
height: 100px;
background-image: url(http://placehold.it/200x200);
background-size: cover;
}
.social-media a::before {
background-image: url(http://placehold.it/200x200/4a7298/eeeeee);
background-size: cover;
content: '';
display: block;
opacity: 0;
pointer-events: none;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
-webkit-transition: all .25s ease-in-out;
transition: all .25s ease-in-out;
}
.social-media a:hover::before {
opacity: 1;
}我的策略很简单:
cover,但您可以自由地使用任何大小(绝对像素/点大小、相对百分比大小或动态计算的大小,如cover、contain)<a>的绝对定位伪元素(通过绝对定位并从所有四个方向零偏移)。我们不需要伪元素上的指针事件,所以我们将它设置为pointer-events: none<a>元素被悬停在上面(以:hover选择器为目标),我们将伪元素的不透明度从0切换到1。我们在伪元素上声明transition属性,以允许平滑的、浏览器计算的和JS不可知的转换。发布于 2014-05-18 07:31:28
精灵很好,但是没有给出平滑的淡入淡出动画(我想这是主要原因,KDM,不是吗?)
因此,让我们修复现有的代码:
fadeOut()将元素转换为display: none;状态,因为fadeIn()在元素为display: none;时开始工作。因此,让我们首先在display: none;中旋转第二个图像;$.fadeIn/Out()使用CSS中的不透明度作为动画的开始/结束点。当然,如果图像是在这样的way;display: inlibe-block;中设计的,那么您可以显式地为每个图像设置不透明度,因为<a>是一个很好的点,因为它包含可能会消失的内联元素(display: none;);这会导致整个<a>消失,并且mouseleave事件会触发意外的UI错误。享受http://jsfiddle.net/8vH4E/1/,并感谢Terry提供的小提琴:)
https://stackoverflow.com/questions/23716583
复制相似问题