全てのブラウザ向けにいいかんじにスムーススクロールを設定する

2019/2/23現在、スムーススクロール(このページのサイドバークリックしたときみたいなやつ)は、
・JavaScript(jQuery)
・CSS
のどっちかで実現します。

そう、CSSでもできるのです。ただし、ChromeとFirefoxだけ

CSS対応ブラウザ(特にChrome)は自分でjQueryで動きをつくるよりかっこいいので、

・ChromeかFirefoxの場合はCSSで
・それ以外はjQueryで

スムーススクロールするように設定しました。

CSS

まずはCSS。これはすげえ簡単。というかこんなプロパティ知らなかった。。現状、ChromeとFirefoxしか対応してません。

html{
    scroll-behavior:smooth;
}

jQuery

ChromeとFirefoxの場合はCSSで設定したスムーススクロールを邪魔しないように、それ以外のUser Agentの場合のみ有効にします。

if (!(navigator.userAgent.match('Chrome/') || navigator.userAgent.match('Firefox/'))) {
    jQuery(function () {
        jQuery('a[href^="#"]').click(function () {
            var speed = 500;
            var href = jQuery(this).attr("href");
            var target = jQuery(href == "#" || href == "" ? 'html' : href);
            var position = target.offset().top;
            jQuery("html, body").animate({
                scrollTop: position
            }, speed, "swing");
            return false;
        });
    });
}

HTML

あわせるとこんなかんじ。

<style>
    html{
        scroll-behavior:smooth;
    }
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.slim.min.js"></script>
<script>
    if (!(navigator.userAgent.match('Chrome/') || navigator.userAgent.match('Firefox/'))) {
        jQuery(function () {
            jQuery('a[href^="#"]').click(function () {
                var speed = 500;
                var href = jQuery(this).attr("href");
                var target = jQuery(href == "#" || href == "" ? 'html' : href);
                var position = target.offset().top;
                jQuery("html, body").animate({
                    scrollTop: position
                }, speed, "swing");
                return false;
            });
        });
    }
</script>