Blog

ページ内リンク、なめらかスクロール jQuery編 ふりがな解説

まず、同じページへのリンクには、#(id)を設定して aタグのhref属性を記載します。

しかしこのままだと、画面が一瞬で切り替わり、いったい、どこに移動したのかuserは理解しにくいです。

<li>

//ページ内リンク 移動先のidを指定
  <a href="#pc_price">
    <div class="pc_nav_list_item">
       <h2>料金について</h2>
       <p>PRICE</p>
    </div>
  </a>
</li>

まず、スクロールさせたい位置にidをセットする。

//移動する目的地
<section id="pc_price">
   <div class="container">

jQueryのコードの完成形をまず紹介します。その後解説します。

/ スクロール
    $('a[href^="#"]').click(function(){
      var speed = 500;
      var href= $(this).attr("href");
      var target = $(href == "#" || href == "" ? 'html' : href);
      var position = target.offset().top;
      $("html").animate({scrollTop:position}, speed, "swing");
      return false;
    });

では、1行ずつ説明しますね。

[ ] はセレクター。選択しています。

^は~で始まるという意味 href が # で始まるものを選択するという意味になります。

aタグのhref属性が # で始まるものを全部選択しなさい という意味になります。

公式サイトで確認するのは大切です。公式サイトはこちら

https://developer.mozilla.org/ja/docs/Web/CSS/CSS_Selectors

.clickはクリックされたときに関数を実行しなさいの意味になり、イベントを設定しています。

$はj、QueryでHTMLのDOM要素を取得するという意味になります。

でこの行は、aタグの hrefが#で始まるものみんな集めてきなさい。

そしてそれがクリックされたら、次の関数の内部の処理を実行しなさい

という意味になります。

次に関数内部の説明です。

//スクロールスピードは500msつまり0.5秒  
var speed = 500;

//hrefという変数に、取得した属性のhrefの値を詰め込みなさい
      var href= $(this).attr("href");

// 3項演算子 条件 trueなら ? 以下、falseなら : 以下を実行
// targetという変数には、hrefに記載している目的の移動先を代入
//空っぽのときと#だけのときは htmlを返す つまりなにもしない。nillチェックをしている

      var target = $(href == "#" || href == "" ? 'html' : href);

//positionには、目的の移動先とページTOP位置との差分を代入しなさい
      var position = target.offset().top;

//全体を[$("html, body")] 動かしなさい[animate]
//animate()関数については下記に説明しています。
//ターゲットのポジションの上まで移動しなさい。移動スピードは500, 移動はswingを利用しなさい(最初ゆっくり、その後少し早いスクロール)

     $("html").animate({scrollTop:position}, speed, "swing");

//動いた後は何もしない
      return false;

jQuery offset()

jQuery offset()

このメソッドを使用すると、 document に対する.offset()要素 (具体的には、マージンを除くボーダー ボックス) の現在の位置を取得できます。

jQuery animate()

https://api.jquery.com/animate/#animate-properties-duration-easing-complete

jQuery animate()

説明: CSS プロパティのセットのカスタム アニメーションを実行します。

jQuery animate()の関数定義

.animate( プロパティ [, 期間 ] [, イージング ] [, 完了 ] )

第1引数:アニメーションが移動する CSS プロパティと値のオブジェクト。
第2引数:アニメーションの実行時間を決定する文字列または数値。
第3引数:遷移に使用するイージング関数を示す文字列
第4引数:アニメーションが完了したら呼び出す関数で、一致した要素ごとに 1 回呼び出されます。

結局このコードは、jQueryの animate() 関数を動かすために、いろいろな要素を集めていたという事になります。

プログラミングはこのように、やりたいこと(目的)があって、そのための要素を集める作業になります。

ではまた


一つ前の記事 FontAwsomeをCDNから、WordPressで利用する
次の記事 顧客管理システム 営業くんWEB リニューアル!!