我想在我的网站上制作一个不透明度为0.5的图像然后我想"弹出"在这个图像上一个不透明度等于1的单词。问题是,当我以任何速度设置图像时,它开始将所有函数排队,就像我用光标进入/离开图像一样多次。
(最重要的)如何使单词不从图像继承不透明度?
$(document).ready(function(){
$('#classic').mouseenter(function(){
$('#classic').fadeTo('slow', 0.25)
{
$('#classic').append("Classic");
$("Classic").fadeTo('slow', 1);
};
});
$('#classic').mouseleave(function(){
$('#classic').fadeTo('slow', 1);
{
$('#classic').empty();
};
});
});
答案 0 :(得分:0)
我在这里更新了您的代码:http://jsfiddle.net/3dytbr3m/1/
您应该使用按钮上的类。类是可以应用于多个元素的标识符。这样你就不必使用双重代码了。
我也使用$(this)
,这意味着你的目标是鼠标悬停的元素。
答案 1 :(得分:0)
首先,确保(a)具有id="classic"
的元素不是img
- 因为img
es不应该有孩子 - 或者(b)您是在img
之后添加文本而不是将其附加到文本。我假设有id="classic"
的div有一个img
孩子:
1)你几乎是对的。要在图像淡出后使单词淡入,您需要使用回调函数。其语法是:
$('#classic').fadeTo('slow', 0.25, function() {
// now the fading is done!
});
而不是
$('#classic').fadeTo('slow', 0.25)
{
....
}
您还可能希望在添加到DOM的文本中添加opacity: 0
作为初始值,这样您就可以将其淡入。
2)jQuery只有一个名为.stop()
的函数。无论何时需要停止排队动画,都可以调用此函数。所以将上面改为:
$('#classic').stop().fadeTo('slow', 0.25, function() {
// now the fading is done!
});
3)在CSS中,所有元素都从其父级继承不透明度。最简单的解决方法是简单地使添加的元素成为透明元素的兄弟(或任何其他DOM元素),而不是子元素。然后使用负相对定位将其粘贴在透明元素上。所以,假设这个结构:
<div id="classic">
<img src="myPicture" />
</div>
你使用这个jQuery:
$('#classic img').stop().fadeTo('slow', 0.25, function() {
$('#classic').append("<span>Classic</span>");
$("#classic span").fadeTo('slow', 1);
});
只使图像淡出并进入,因此其兄弟姐妹不受影响。在CSS中:
#classic span {
display: inline-block;
opacity: 0; /* make it 0 initially so we can fade it in */
position: relative;
top: -48px; /* or whatever value */
left: -88px; /* or whatever value */
}
所以这里结合了jQuery:
$('#classic').mouseenter(function () {
$('#classic img').stop().fadeTo('slow', 0.25, function() {
$('#classic').append("<span>Classic</span>");
$("#classic span").fadeTo('slow', 1);
});
});
$('#classic').mouseleave(function () {
$('#classic img').stop().fadeTo('slow', 1, function() {
$('#classic span').remove();
});
});
这里是JSFiddle。希望这有帮助!