jQueryでスクロールすると上部に固定されるナビゲーション
グローバルナビゲーションはロゴの下に配置されていることが多いですが、スクロールするとナビゲーション部分だけが上部に固定されるようなものをjQueryでやってみたいと思います。
html & css
htmlです。
html
<h1><a href="#">タイトル</a></h1> <div class="nav"> <ul class="clearfix"> <li><a href="#">HOME</a></li> <li><a href="#">ABOUT</a></li> <li><a href="#">NEWS</a></li> <li><a href="#">LINK</a></li> </ul> <!-- /#nav --></div> <div id="article"> ・・・ <!-- /#article --></div>
ナビゲーション部分のcssはこんな感じです。
css
.nav {
padding: 0 20px;
margin: 0 auto 60px;
width: 760px;
font-size: 85%;
background: #555;
}
.nav li {
list-style: none;
float: left;
}
.nav li a {
text-decoration: none;
color: #fff;
padding: 8px 12px;
display: block;
}
.nav li a:hover {
background: #666;
}
.fixed {
position: fixed;
top: 0;
left: 0;
width: 100%;
}
jQueryでは「.fixed」クラスを追加したり削除するだけなので、「<div class="nav">」で通常のナビゲーション表示で、「<div class="nav fixed">」で上部に固定されるようにcssを設定しておきます。
jQuery
「$(window).scroll」はスクロールするたびに実行されるイベントなので、この中でナビゲーションが現在の位置より上か下かの条件分岐をすればいいだけです。
javascript
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
var nav = $('.nav');
//navの位置
var navTop = nav.offset().top;
//スクロールするたびに実行
$(window).scroll(function () {
var winTop = $(this).scrollTop();
//スクロール位置がnavの位置より下だったらクラスfixedを追加
if (winTop >= navTop) {
nav.addClass('fixed')
} else if (winTop <= navTop) {
nav.removeClass('fixed')
}
});
});
</script>
プルダウンメニューをつける
プルダウンメニューはいろいろプラグインがあると思いますので、普通につけてもらえればいけると思います。
一応簡単なものですが載せておきます。
javascript
$(function() {
var nav = $('.nav');
var navTop = nav.offset().top;
$(window).scroll(function () {
var winTop = $(this).scrollTop();
if (winTop >= navTop) {
nav.addClass('fixed')
} else if (winTop <= navTop) {
nav.removeClass('fixed')
}
});
//サブナビゲーション
$('li', nav).hover(function(){
$('ul',this).slideDown('fast');
},
function(){
$('ul',this).slideUp('fast');
});
});
その他スクロール関係の記事はこちらもどうぞ
jQueryでスクロールすると表示する系いろいろ
COMMENTS

るい2012-05-07 20:14
初めまして。
こちらのグローバルナビゲーションを頂戴したのですが、メニューがプルダウン化出来ると嬉しいなと。。色々方法を探してるのですが、どうにも私の頭では作れそうにないです。お時間がありましたら、プルダウンメニュー版も作っていただけると幸いです。催促になりすみません。

webOpixel2012-05-10 13:54
プルダウンメニュー作ってみました。
http://www.webopixel.net/lab/sample/12/0221scroll-fixed/subnavi.html

るい2012-05-10 23:21
webOpixel様
無事にプルダウンメニュー版を設置することができました。まだデモそのままの段階なので、少しずつ手を加えながら、自分のサイトにあった形にしていきたいと思います。本当に有難うございました。

レン2012-05-15 18:29
webOpixel様
初めまして。
こちらの記事を拝見してナビゲーションを設置させて頂いた者です。
設置させて頂きIPadで動かしていたのですが、ナビゲーションは固定されるのですがページ内でリンクした場合、一度はリンクしたidまで遷移するのですが、遷移した先でナビゲーションをタッチしても無反応になります。
少しスクロースさせてからはナビゲーションが正常に動きます。
IPadの仕様だろうと思い色々試行錯誤はしているのですが、何か解決策をご存知かと思い書き込みさせて頂きました。
突然このような書き込みで申し訳ありません。

webOpixel2012-05-17 16:59
確かに動きませんね。。。
少し調べてみたのですが、スマートフォンではfixed配置にバグがあるようなので、
JSで対応した方がいいとのことです。
具体的な答えになっていなく申し訳ありませんが、
こちらでももう少し調べて何かわかりましたらご紹介します。

レン2012-05-21 10:57
webOpixel様
ご返信ありがとうございます。
やはりバグがあるのですね、JSでに対応も試みたのですがなかなかうまくいかずで。
なにか解決策があればいいいのですが。
私も引き続き解決策調べてみようと思います。
webOpixel様の記事たのしみにしております。