问候,
我正在尝试使用 jQuery 为导航栏上的每个按钮制作一个简单的淡入/淡出 DIV,但我遇到了一些问题。这是我正在尝试做的截图:
基本上,当用户将鼠标悬停在导航栏上的某个项目上时,导航下方会出现一个 div,其中包含与该按钮相关的文本。到目前为止我提出的标记是可怕的,我知道这不是解决这个问题的正确方法,我还尝试使用数组并用导航按钮的标题属性中的文本填充信息 div - 后者效果很好但是然后还会出现一个标题。
除了太复杂之外,它确实有效..在一定程度上。如果用户快速进出导航栏,它会导致整个事物闪烁(不使用 :hidden 和 :visible),或者如果使用 :hidden 和 :visible 则不会出现。
这是当前的标记:
信息 DIV 的 CSS
#header-info-text {
width: 480px;
text-align: right;
float: right;
margin-right: 20px;
padding-right: 25px;
background: url('/images/info-arrow.png') top right no-repeat transparent scroll;
color: #fff;
display: none;
}
导航的 HTML
<div id="navBar">
<ul>
<li class="nav-first nav-active"><a href="#">Home</a></li>
<li id="navAbout"><a href="#">About</a></li>
<li id="navPort"><a href="#">Portfolio</a></li>
<li id="navServ"><a href="#">Services</a></li>
<li id="navBlog"><a href="#">Blog</a></li>
<li id="navContact" class="nav-last"><a href="#">Contact</a></li>
</ul>
</div>
<div id="header-infoDIV">
<span id="header-info-text"></span>
</div>
Javascript
$("#navBar ul li").hover(function() {
var text;
var id = $(this).attr('id');
if (id == 'navAbout') {
text = 'Learn more ..';
} else if (id == 'navPort') {
text = 'View our recent work and ongoing projects';
} else if (id == 'navServ') {
text = 'Learn about our services';
} else if (id == 'navBlog') {
text = 'View the our Blog';
} else if (id == 'navContact') {
text = 'We\'re looking forward to working with you!';
} else {
text = '';
}
$("#header-info-text").text(text);
$("#header-info-text:hidden").fadeIn('slow');
});
$("#navBar ul").hover(function() {
$("#header-info-text:hidden").fadeIn('slow');
}, function() {
$("#header-info-text:visible").delay(500).fadeOut('slow');
});
解决此类问题的最佳方法是什么?基本上,我想淡入信息文本的 DIV,当用户移动到另一个按钮时更改其文本,并在他们移出导航栏时隐藏它。
谢谢!
解决方案(感谢 jmans)
$("#navBar ul").hover(function() {
$("#header-info-text").stop(true,true).fadeIn('slow');
}, function() {
$("#header-info-text").stop(true,true).delay(500).fadeOut('slow');
});
更新 感谢 mVChr 的建议,代码已减少到几行。结合 jmans 提供的建议,它正在做我想做的事情:
$("#navBar ul li a").hover(function() {
var text = $(this).attr('rel');
$("#header-info-text").text(text);
$("#header-info-text").stop(true,true).fadeIn('slow');
},
function() {
$("#header-info-text").stop(true,true).delay(500).fadeOut('slow');
});