DAY47.実務でよく使うアニメーションの付け方編 スムーススクロールとフローティングアイテム

01.スムーススクロール

内部リンクをクリックした時に「ぐいーん」と移動した方が
ページ内を移動していることが理解できて少し親切

スムーススクロールが鉄板で使われるパーツといえば、
「トップへ戻るボタン」

1.ページ内リンクのクリックを検知する

スムーススクロールは
ページ内リンクをアニメーションをつけて移動させること

ページ内リンクの発動キーはhrefが「#」から始まるリンクとなる

// #から始まるURLがクリックされた時 jQuery('a[href^="#"]').click(function() {
// スムーススクロールの処理を書く
});

2.ページ内リンク先のidと位置を取得してアニメーション

要素の位置が取得できたら、その位置まで
jQueryのアニメーションを使って移動させることができる

// #から始まるURLがクリックされた時 jQuery('a[href^="#"]').click(function() {
 // 移動速度を指定(ミリ秒)
 let speed = 300;
// hrefで指定されたidを取得
 let id = jQuery(this).attr("href");
// idの値が#のみの場合ターゲットをhtmlタグにしてトップへ戻るようにする
 let target = jQuery("#" == id ? "html" : id);
// ページのトップを基準にターゲットの位置を取得
 let position = jQuery(target).offset().top
// ターゲットの位置までspeedの速度で移動
jQuery("html, body").animate(
 {
  scrollTop: position
 },
  speed
 );
 return false;
});

3.固定ヘッダー分の高さを考慮する

ヘッダーが固定されている場合はページ内リンク先の
コンテンツにかぶってしまう

ヘッダーの高さを考慮してスムーススクロールでの移動先を決める

ヘッダーの高さをJavaScritpで取得して、ヘッダーの高さ分を
移動するはずだったエリアの位置から引いてあげればOK

// #から始まるURLがクリックされた時 jQuery('a[href^="#"]').click(function() {
// .headerクラスがついた要素の高さを取得
 let header = jQuery(".header").innerHeight();
 let speed = 300;
 let id = jQuery(this).attr("href");
 let target = jQuery("#" == id ? "html" : id);
// トップからの距離からヘッダー分の高さを引く
 let position = jQuery(target).offset().top - header;
// その分だけ移動すればヘッダーと被りません
 jQuery("html, body").animate(
 {
  scrollTop: position
 },
  speed
 );
 return false;
});

02.フローティングアイテム

〇〇px以上スクロールされたらクラスを付与するという処理を

デフォルトの状態では非表示にしておいて、
クラスが付いたら表示されるようCSSを用意

// スクロール検知
jQuery(window).on("scroll", function() {
// トップから100px以上スクロールしたら
 if (100 < jQuery(this).scrollTop()) {
// is-showクラスをつける
 jQuery('.to-top').addClass( 'is-show' );
} else {
// 100pxを下回ったらis-showクラスを削除
 jQuery('.to-top').removeClass( 'is-show' );
 }
});

この記事が気に入ったらサポートをしてみませんか?