ご挨拶、
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;
}
navの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');
});