ページ内リンクをjQueryでスムーズにスクロールさせる
jQuery関連記事
【jQuery】pdfが存在するか、mimeタイプのバリデーションする
jQuery UIのsortableを使ってリストをドラッグで並び替える
jQueryのモーダルウィンドウを使ってフォームの確認画面を実装する
HTMLのcanvasタグとJavaScriptで円グラフの画像をつくる
bxSliderをカルーセルやコンテンツスライダーなど便利なサンプル5種
bxSliderの使い方と、オプションでのカスタマイズ方法
select・optionタグをjQueryで、プルダウンの選択値を取得、変更する
jQueryでinput[type="file"]で画像アップロード時にプレビューを表示する
jQueryでrequiredの専用エラー文と文字数制限のバリデーションをつくる
ページ内リンクのの作り方
html
<a href="#ps1">ポジション1</a> <h3 id="ps1">ポジション1</h3>
まず、スクロール位置を移動させたい要素(上の例だとh3)にidを振り、
ページ内リンクのトリガーとなるaタグのhref属性にh3と同じidを#ps1
のように指定します。
これだけで既にページ内リンクは完成してます。
jQueryを加えてスムーズにスクロールして、さらにURLを変化させないようにしていきます。
jQueryでスムーズにスクロールさせる
JavaScript
$('a[href^=#]').click(function() { var speed = 400; var href = $(this).attr("href"); var target = $(href == "#" || href == "" ? 'html' : href); var position = target.offset().top; $('body,html').animate({scrollTop:position}, speed, 'swing'); return false; });
カンタンな流れは$('a[href^=#]').click(function() {
でhref属性が#で始まるaタグをクリックした場合に処理を開始します。target
にh3要素のページトップからの位置を格納し、animate
でその位置までスムーズに移動させるという流れです。
htmlのみで試してもらうとわかると思いますが、ページ内リンクの際、URLに#(ハッシュ)がついてしまいます。
それを最後のreturn false;
で処理をキャンセルしてつかないようにしています。
スムーズ部分の速度のカスタム
JavaScript
var speed = 800;
速度はspeed
の値で変更できます。
値はミリ秒なので1000を指定すると1秒かけて移動します。
例えば縦長の1ページサイトで
1から2のセクションに移動する場合と、
1から10のセクションに移動する移動する場合でも同じ1秒で移動します。
easing(動き方)のカスタム
JavaScript
$('body,html').animate({scrollTop:position}, speed, 'swing');
動き方は最後のswing
の箇所で変更できます。
animateメソッドのeasingの中から選んで変更できます。
スクロール位置のカスタム
JavaScript
var position = target.offset().top;
スクロール位置はposition
の値で変更できます。
取得した値から加算することで加算分だけ下がった状態に、
減算することで減算分だけ上がった状態にできます。
ナビゲーションバーが固定の場合などナビゲーションの高さ分だけ減算することで重ならずに表示できます。
コメント