html+css
htmlはナビゲーションであるリストとコンテンツを入れるためのdivが5つあります。
html
<div id="contents"> <ul id="nav"> <li><a href="#s01">01</a></li> <li><a href="#s02">02</a></li> <li><a href="#s03">03</a></li> <li><a href="#s04">04</a></li> <li><a href="#s05">05</a></li> </ul> <div id="s01" class="section"> <h2>SECTION 01</h2> <p>1つ目のコンテンツ</p> </div> <div id="s02" class="section"> <h2>SECTION 02</h2> <p>2つ目のコンテンツ</p> </div> <div id="s03" class="section"> <h2>SECTION 03</h2> <p>3つ目のコンテンツ</p> </div> <div id="s04" class="section"> <h2>SECTION 04</h2> <p>4つ目のコンテンツ</p> </div> <div id="s05" class="section"> <h2>SECTION 05</h2> <p>5つ目のコンテンツ</p> </div> <!-- /#contents --></div>
div.sectionはfloatで横並びにしていますので、contentsのwidthにはsectionの合計を入れます。
cssで直接数値を入れてもいいですが、jsで値を取得した方が楽だと思います。
css
#contents { overflow: hidden; padding: 60px; } div.section { width: 500px; background: #FFFFFF; padding: 20px; height: 400px; float: left; margin-right: 2px; } #nav { list-style: none; margin-bottom: 10px; position: fixed; left: 60px; top: 30px; } #nav li { display: inline; margin-right: 0.5em; } #nav li a { color: #fff; }
マウスホイールで横スクロール
マウスホイールは「MOUSE WHEEL EXTENSION」というjQueryプラグインを使用すると簡単に処理できます。
プラグインは以下からダウンロードできます。
MOUSE WHEEL EXTENSION
「mousewheel」はイベントとして扱います。
コールバックメソッドの第2引数でスクロール方向を取得します。
「return false」にすることで縦方向のスクロールを制限できます。
javascript
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> <script type="text/javascript" src="jquery.mousewheel.min.js"></script> <script type="text/javascript"> $(function() { //コンテンツの横サイズ var cont = $('#contents'); var contW = $('.section').outerWidth(true) * $('div',cont ).length; cont.css('width', contW); //スクロールスピード var speed = 50; //マウスホイールで横移動 $('html').mousewheel(function(event, mov) { //ie firefox $(this).scrollLeft($(this).scrollLeft() - mov * speed); //webkit $('body').scrollLeft($('body').scrollLeft() - mov * speed); return false; //縦スクロール不可 }); }); </script>
あとは取得した値を「scrollLeft」に入れてあげれば横スクロールの完成です。
ただie&firefoxでは「html」、chromeなどのwebkitでは「body」を指定しなくてはいけないので2つ記述しています。
ナビゲーションボタンをクリックで指定位置までスライド
次にナビゲーションボタンのクリックでスライドする機能を追加してみます。
idはすでに設定してありますので、あとはその位置までanimateで移動するだけですね。
mousewheelイベントの下に以下を追加します。
javascript
$('#nav a').click(function(event) { var $anchor = $(this); $('html, body').stop().animate({ scrollLeft: $($anchor.attr('href')).offset().left }, 500); event.preventDefault(); });
参考サイト
jQueryでマウスホイールのスクロールを検出する方法
Smooth Vertical or Horizontal Page Scrolling with jQuery