Location via proxy:   [ UP ]
 No cookies    No scripts    No ads    No referrer

jQueryでスクロールすると上部に固定されるナビゲーション

0221_s

グローバルナビゲーションはロゴの下に配置されていることが多いですが、スクロールするとナビゲーション部分だけが上部に固定されるようなものをjQueryでやってみたいと思います。

Demo

demo

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>
	

プルダウンメニューをつける

プルダウンメニューはいろいろプラグインがあると思いますので、普通につけてもらえればいけると思います。
一応簡単なものですが載せておきます。

demo

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でスクロールすると表示する系いろいろ
 2012-02-21  javascript  

COMMENTS

るい
2012-05-07 20:14

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

webOpixel
2012-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の仕様だろうと思い色々試行錯誤はしているのですが、何か解決策をご存知かと思い書き込みさせて頂きました。

突然このような書き込みで申し訳ありません。

webOpixel
2012-05-17 16:59

確かに動きませんね。。。

少し調べてみたのですが、スマートフォンではfixed配置にバグがあるようなので、
JSで対応した方がいいとのことです。

具体的な答えになっていなく申し訳ありませんが、
こちらでももう少し調べて何かわかりましたらご紹介します。

レン
2012-05-21 10:57

webOpixel様

ご返信ありがとうございます。
やはりバグがあるのですね、JSでに対応も試みたのですがなかなかうまくいかずで。

なにか解決策があればいいいのですが。

私も引き続き解決策調べてみようと思います。
webOpixel様の記事たのしみにしております。

Leave a Reply

Name
Email
Website

TRACKBACK

Tackback URL

RECENT ENTRY

POPULAR ENTRY