スムーススクロール

scrollイベント

要素がスクロールした時のイベントとして関数を指定できます。

$(window).scroll(function() {
var a=$('html,body').scrollTop();
console.log(a);
});
scrollTopイベント

「scrollTop()」を使用した場合、要素の最上部から縦スクロールした現在位置の上部までのピクセル数を取得します。
{ scrollTop: 0 }であればtopから0ピクセルの位置で停止、{ scrollTop:100}であればtopから100pxの位置で停止します。

タイミング

jQueryでのアニメーションタイミングは'linear' か、'swing' の2種類のみです。
linear = 常に同じ速度
swing = 始めゆっくり、途中が速め、最後はゆっくり(山なり)※デフォルト


サイトのトップに戻すだけであれば、以下のようにシンプルな記述で大丈夫です。

$(function() {
  $('#btn a').on('click', function () {
    $('html,body').animate({ scrollTop: 0 });
  return false;//リンク自体の無効化
    });
});

 

停止位置100px、スピード300ミリ秒、タイミング「linear」の場合

$(function() {
  $('#btn a').on('click', function () {
    $('html,body').animate({ scrollTop: 100},300, 'linear');
  return false;//リンク自体の無効化
    });
});

return false

a要素は本来「移動する」という働きを持っています。さらにその上にjqueryのanimateの動きが2重に加わってしまうので、「return false」を指定してa要素の働きを制限します。




場合によってはある程度スクロールしてから表示させたい場合もあります。
その場合、まず「.hide」で見せなくさせて、ある条件(今回の場合は何pxスクロールしたら)になったら、
「.fadeIn」で表示させ、ある条件以外の時は「.fadeOut」で非表示にさせましょう。

ある程度スクロールしたらボタンを表示させる
    $('#to_top').hide();
    //スクロールが100に達したらボタン表示
    $(window).scroll(function () {
        if ($(this).scrollTop() > 100) {
            $('#to_top').fadeIn();
        } else {
            $('#to_top').fadeOut();
        }
    });