grosscroll

  • /*
     * @title grosscroll
     * @description smooth scrolling by Vanilla; for jQuery.animate() lover
     * @include http://*
     * @include https://*
     * @license MIT License https://opensource.org/licenses/MIT
     * @javascript_url
     */
    
    // https://easings.net
    (() => {
        'use strict';
    
        const y = Math.max(...[
            window.pageYOffset,
            window.scrollY,
            document.documentElement.scrollTop,
        ]);
    
        // [^1] loose/strict scrolling to bottom details c.f.
        // http://let.hatelabo.jp/noromanba/let/hLHUs7CEkec6
        // you don't use `Number.MAX_SAFE_INTEGER`
        // Firefox Desktop ignoring >Signed INT32, use INT32 max value
        //      [0x7FFFFFFF, -1 >>> 1, ~(1 << (32 - 1)), 2 ** (32 - 1) - 1,]
        //          .every(v => v === 2147483647) === true
        const MAX_SAFE_SIGNED_INT32 = -1 >>> 1;
        const top = y ? 0 : MAX_SAFE_SIGNED_INT32;
    
        // [^2] scroll*() options c.f.
        // https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollTo
        window.scrollTo({ top, left: 0, behavior: 'smooth', });
        //
    })();
    
    // DEV
    //
    // [1]: Signed INT32
    // specs
    //  https://en.wikipedia.org/wiki/IEEE_754
    //  https://en.wikipedia.org/wiki/Single-precision_floating-point_format
    //   https://en.wikipedia.org/wiki/IEEE_754_revision
    // how to remember 2147483647
    //  https://stackoverflow.com/questions/94591/what-is-the-maximum-value-for-an-int32#45116768
    //   https://i.stack.imgur.com/rCL8f.png
    //  https://stackoverflow.com/questions/94591/what-is-the-maximum-value-for-an-int32#94608
    //
    // classical scrolling to bottom
    /*
    const Math.max(...[
        document.documentElement.scrollHeight,
        document.documentElement.clientHeight,
        document.body.scrollHeight,
        document.body.clientHeight,
    ]);
    */
    //
    // [2]: scroll* family
    // window.scroll()
    //  https://developer.mozilla.org/en-US/docs/Web/API/Window/scroll
    // window.scrollBy()
    // https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollBy
    //
    // new scrolling features
    // window.scrollByLines()
    //  https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollByLines
    // window.scrollByPages()
    //  https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollByPages
    //
    // easings
    //  https://easings.net
    
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2018/07/25 05:43:30 - 2018-07-25
  2. 2018/07/25 05:42:34 - 2018-07-25
  3. 2018/07/23 08:59:46 - 2018-07-23
  4. 2018/07/23 06:50:03 - 2018-07-23