【发布时间】:2016-05-02 19:04:29
【问题描述】:
我正在尝试通过淡入和淡出两个图像来创建徽标悬停效果。我尝试使用 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 上。不知何故,我必须找到一种方法,使 display 属性在定位这两个 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;
}
【问题讨论】:
-
如果你想要一个 javascript 方法,jQuery 将使这更容易。否则,您可以通过更改要淡入淡出的元素的类来使用 css 过渡。我们需要查看更多代码才能提供帮助。 HTML 是什么样的?
-
要将一个图像淡入另一个图像,两个图像必须在淡出时同时显示。创建两个图像,一个在另一个之上。当顶部的那个应该消失时,将 CSS
opacity设置为 0,使用 CSStransition。 -
感谢您的 cmets,我将使用 jQuery,与自己编写 JavaScript 相比,它非常容易,而且结果看起来比使用 CSS 更好。
-
删除两个代码块中的
css()方法调用。在幕后fadeIn()和fadeOut()本质上是在动画时间尺度上处理这些CSS 声明,因此它们是不必要的。让我知道这是否有效。
标签: jquery css hover fadein fadeout