Weblasts

jQueryでスムーススクロール ※コピペ対応

するする〜とスムーススクロールでページ内を移動するようにします

スムーススクロールの利点は、ページ内を移動したとユーザーが分かりやすいところにあり、ただのページ内リンクでは、パッと画面が変わった(ように感じる)ので、ユーザーがどのページにいるのか分からなくなります

スルスルーと動けば、ページ内を移動したのね!と分かります

以前紹介したcssプロパティを使う方法は草案なもんでブラウザの対応が悪かったりと、不便をかけたと思いますが、今回はどのブラウザでも対応可能になっているので安心してご利用できます

使うセレクタ

今回animateでスクロールをかけるとき、セレクタは「$(“html,body”)」とする形で固定しています。

この時どのセレクタに対して実行すべきかはブラウザごとに異なります。簡単に言うとWebKitではbodyに効き、それ以外のブラウザではhtmlに効きます。

使うメソッドとプロパティ

一応使うものの説明を簡単に書き残しておきます。

scrollTopプロパティ

scrollTopはメソッドで以前紹介しましたが、animateメソッド内ではプロパティとして扱うことができます。

‘scrollTop:○○’で、画面上から○○px移動する(上のコードなら、400移動する)

今回は、クリックした場所に応じてこの値が変わればOK

attr()メソッド

属性値を取得するメソッド。()の中には、取得したい値の属性名を入れる

offset()メソッド

要素の位置を取得できる({top: ○○, left: △△})

  • offset().top:上からの距離だけ取得
  • offset().left:左からの距離だけ取得

手っ取り早くコピペ用コード

どうぞ コメント入れてあります

少しかみ砕いて各行ごとに解説

1行目

この指定でhref属性の中身が#から始まるa要素をクリックしたときに絞ってイベントの指定をしています

2行目

ページ内リンクはid名で指定されていますよね。
でもid名って人によって付け方が違ってきますよね

どんな名前になっても大丈夫なように変数にhrefの値を都度代入するようにしました。

3~8行目

あらかじめ変数を作っておいて、移動先のjQueryオブジェクトを入れる入れ物を用意しています。

取得したhref属性の中身に応じて処理を変えるためにif文を使って状況に応じて中身を変えるようにしています。

true側の処理

条件式に入れたものは取得したhrefが「#だけ」もしくは「空っぽ」だったらtrueという式になっています。(そもそも空っぽだった場合は動きませんが念のため)

そんな時はhtml要素をjQueryオブジェクトにしてtopに戻るようにしておきます

false側の処理

中身にしっかりとしたページ内リンク用の記述があった場合は、「#○○」の形の文字列になっています。

これを$()関数に入れるとそのままidセレクタとして扱うことができるので後々役立ちます

よく見かけるコード

よくスムーススクロールで検索すると

「$(href == ‘#’ || href === ” ? ‘html’ : href);」

のような書き方がされている場合がよくあります

三項演算子という条件分岐の方法で分かりずらいかとおもいますので、ここではif文にしています。

内容としては『$(href == ‘#’ || href === ”』部分が条件式、「?」のあとの『’html’』がtrue、「:」のあとの『href』がfalseの処理となっていますので、『href』の内容が「#」か「空」だったら『’html’』それ以外なら『href』という形になります

9行目

変数に入れたhref属性に入っていた移動先が上から何pxの位置にあるかを調べて、変数に入れています

10~12行目

animateメソッド使って移動させています
上の方でも紹介していますが、scrollTopプロパティを使うと指定した位置まで移動できるので、それを使って調べた位置まで移動させています。

13行目

ここではURLを書き換えたくなかったので、a要素の動きを止めるために入れています。
URLを書き換えるのであればこの行は削りましょう。

所々端折った紹介ですがこんな感じでスムーススクロールは作れます。 参考にどうでしょうか

「後々大変にならないように、最初にちょっと頑張って書く」

「怠けるために最大限の努力をする」

POPULAR