jQueryでスムーススクロールとトップへ戻るを簡単自作

  • このエントリーをはてなブックマークに追加
  • Pocket

スポンサードリンク

ページ内リンクやトップへ戻るボタンを使い、ページ内をヌルヌルっとアニメーションスクロールする簡単な方法をご紹介します。

プラグインは使わず、少ない行数で実現できます。

ソースコードの解説も併せてご紹介しますので、プラグインに頼らず、自力で導入してみませんか?

 

スムーススクロールのソースコード全文

まずはページ内リンクのソースコードを一気に全部ご紹介します。

HTML

jQuery

 結果

ページ内の所定の要素までと、ページトップへのスムーススクロールを実現します。

以下のリンクよりサンプルを確認してください。

 

サンプルはこちら

ソースコード解説

上記サンプルのソースコードを解説します。

①クリックイベントで発動

jQueryのセレクタに<a>要素が指定されていますが、そのあとの[href^="#"]は「#(シャープ)から始まるhref属性」という意味です。

つまり、「#(シャープ)から始まるhref属性を持つ<a>要素」をクリックしたらイベントが発動します。

jQueryのバージョンが新しくなると、上記のように#(シャープ)に""(ダブルクオーテーション)を付けないとエラーになります。

②クリックしたa要素のhref属性(リンク先URI)を取得

$(this)はクリックした a要素 を指します。

attr('href')でその<a>要素のhref属性を取得し、変数hrefに格納しました。

③三項演算子で条件分岐

三項演算子と呼ばれる条件分岐の書き方で、1行で書けるのでif文よりも簡単に書くことが出来ます。

上記②で変数に格納したhref属性の値によって、以下のように条件分岐します。

  1. ②の値が「#(シャープ)か空白」だったら => セレクタ$('html')を変数target に格納
  2. ②の値が「#(シャープ)か空白 以外」だったら => ②で格納した変数をセットしたセレクタ$(href)を、変数targetに格納

④ページトップからの位置を取得

③で格納したセレクタの位置をoffset().topで取得し、変数positionに格納します。

後ほどこの値を使って、実際にその位置までスクロールさせます。

ちなみに、③で格納した変数targetの中身が$('html')だったら0が取得されます。

$(href)だったら、ページ内リンク先の要素の位置が取得されます。(560など)

参考:jQueryのoffset()で表示位置を取得

⑤実際にスクロールさせる

④で取得したトップからの位置をscrollTopに指定し、animate()500のスピードでスクロールさせます。

scrollTopに値を指定すると、その位置までスクロールしてくれます。

animate()に指定した500は500ミリ秒(0.5秒)かけてスクロールするという意味です。

ここに'swing'などを設定することで、よりフワッとした自然なイージングが効いたスクロールも可能です。

参考:scrollTop() で特定の位置までスクロールする

ちなみに、セレクタに$('html, body')と両方指定していますが、これはブラウザによって挙動が違うためです。

詳しくは以下の記事をご覧ください。

参考:scrollTop() のブラウザによる挙動の違い

⑥a要素のデフォルトの機能を無効化する

return falseは要素が持つ機能(<a>要素はリンクする)を無効化します。

フォームのsubmitボタンを無効化する際などにもよく使われますね。

これによりページ内リンクしても、URLの末尾に #◯◯といったハッシュが付きません。

逆に、ページ内リンクをさせる際に #◯◯のようなハッシュを敢えて付けたい場合はreturn falseを削除すればOKです。

スポンサードリンク

  • このエントリーをはてなブックマークに追加
  • Pocket

コメントを残す

*