さぁ!検索しよう!

ページトップへスムーズに戻るボタンの解説ですが、今回はアニメーションの仕方が少し変わっています。

このボタンは前回の記事でも解説しましたが、今回解説するものはアニメーションが全く違い、アニメーションの終了時に特徴があります。

始めに完成デモをご覧ください。

完成デモ

ある程度スクロールすると、右からボタンが出現しボタンをクリックするとページのトップへ移動し、移動が完了するとボタンが右へ去っていくことが確認できます。

前回の記事との違いはボタンの出現・消滅の仕方であり、前回ではフェードイン・フェードアウトでしたが、今回はanimate関数によるrightプロパティの操作としています。

続いて各ソースコードの確認です。
始めにHTMLです。

HTML

<a href="#" class="backtotop"><i class="fa fa-repeat"></i></a>

HTMLはボタンのみです。

次にCSSです。

CSS

body {
  background: #dfdfdf;
  height: 5000px;
  width: 100%;
}

.backtotop {
  background: #aaa;
  border-radius: 50%;
  display: block;
  height: 44px;
  line-height: 44px;
  position: fixed;
  right: -60px;
  bottom: 10px;
  text-align: center;
  width: 44px;
}

i {
  color: #fff;
}

ボタンである.backtotopを、position:fixed;right:-60px;bottom:10px;と指定することで、画面右の外に隠し固定配置しています。

最後にjQueryです。

jQuery

$(function() {
  var topBtn = $('.backtotop');

  $(window).scroll(function() {
    if ($(this).scrollTop() > 300) {
      topBtn.stop().animate({
        'right': '10px'
      }, 200, 'linear');
    } else {
      topBtn.stop().animate({
        'right': '-60px'
      }, 200, 'linear');
    }
  });

  topBtn.bind('click', function(event) {
    event.preventDefault();
    $('body,html').stop().animate({
      'scrollTop': 0
    }, 1000, 'easeInQuart', function() {
      topBtn.stop().animate({
        'right': '-60px'
      }, 1000, 'easeInQuart');
    });
  });
});

スクロール量が300pxを超えると、animate関数によって右からボタンが出現します。300px未満となると元の位置に戻ります。

 $(window).scroll(function() {
    if ($(this).scrollTop() > 300) {
      topBtn.stop().animate({
        'right': '10px'
      }, 200, 'linear');
    } else {
      topBtn.stop().animate({
        'right': '-60px'
      }, 200, 'linear');
    }
  });

出現したボタンをクリックすると、'scrollTop': 0によってページの先頭に戻ります。

topBtn.bind('click', function(event) {
    event.preventDefault();
    $('body,html').stop().animate({
      'scrollTop': 0
    }, 1000, 'easeInQuart',

更に続けて処理を記述することで、ページの先頭に戻った後の処理を行なわせることができます。ここでは先程のスクロール量によるアニメーションと同じく、右へ去っていくような処理を施しています。

, function() {
      topBtn.stop().animate({
        'right': '-60px'
      }, 1000, 'easeInQuart');
    });

以上です。