grosscroll
by
noromanba
2018-07-25 [2018/07/25 05:43:30]
smooth scrolling by Vanilla; for jQuery.animate() lover
-
/*
* @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 です。