UNPKG

@schoolbelle/common

Version:

54 lines 5.35 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @param {?} selectorOrElem * @param {?=} duration * @param {?=} offset * @return {?} */ export function scrollTo(selectorOrElem, duration = 300, offset = 300) { /** @type {?} */ let elem = typeof selectorOrElem === 'string' ? document.querySelector(selectorOrElem) : selectorOrElem; if (elem) { /** @type {?} */ let box = elem.getBoundingClientRect(); /** @type {?} */ let body = document.body; /** @type {?} */ let docEl = document.documentElement; /** @type {?} */ let scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop; /** @type {?} */ let clientTop = docEl.clientTop || body.clientTop || 0; /** @type {?} */ let elemTop = box.top + scrollTop - clientTop; /** @type {?} */ let diff = elemTop - scrollTop - offset; /** @type {?} */ let start; // Bootstrap our animation - it will get called right before next frame shall be rendered. window.requestAnimationFrame((/** * @param {?} timestamp * @return {?} */ function step(timestamp) { if (!start) start = timestamp; // Elapsed miliseconds since start of scrolling. /** @type {?} */ let time = timestamp - start; // Get percent of completion in range [0, 1]. /** @type {?} */ let percent = Math.min(time / duration, 1); window.scrollTo(0, scrollTop + diff * percent); // Proceed with animation as long as we wanted it to. if (time < duration) { window.requestAnimationFrame(step); } })); } return elem; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXRvLmZuLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNjaG9vbGJlbGxlL2NvbW1vbi9mdW5jdGlvbnMvIiwic291cmNlcyI6WyJsaWIvc2Nyb2xsLXRvLmZuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxNQUFNLFVBQVUsUUFBUSxDQUFFLGNBQTZCLEVBQUUsV0FBa0IsR0FBRyxFQUFFLE1BQU0sR0FBRyxHQUFHOztRQUNwRixJQUFJLEdBQVcsT0FBTyxjQUFjLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjO0lBRS9HLElBQUksSUFBSSxFQUFFOztZQUNGLEdBQUcsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUU7O1lBQ2xDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSTs7WUFDcEIsS0FBSyxHQUFHLFFBQVEsQ0FBQyxlQUFlOztZQUVoQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTOztZQUNuRSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUM7O1lBQ2xELE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxTQUFTOztZQUV6QyxJQUFJLEdBQUcsT0FBTyxHQUFHLFNBQVMsR0FBRyxNQUFNOztZQUNuQyxLQUFLO1FBRVQsMEZBQTBGO1FBQzFGLE1BQU0sQ0FBQyxxQkFBcUI7Ozs7UUFBQyxTQUFTLElBQUksQ0FBQyxTQUFTO1lBQ2hELElBQUksQ0FBQyxLQUFLO2dCQUFFLEtBQUssR0FBRyxTQUFTLENBQUM7OztnQkFFMUIsSUFBSSxHQUFHLFNBQVMsR0FBRyxLQUFLOzs7Z0JBRXhCLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBRTFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFNBQVMsR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUM7WUFFL0MscURBQXFEO1lBQ3JELElBQUksSUFBSSxHQUFHLFFBQVEsRUFBRTtnQkFDakIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3RDO1FBQ0wsQ0FBQyxFQUFDLENBQUM7S0FDTjtJQUdELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG8gKHNlbGVjdG9yT3JFbGVtOnN0cmluZ3xFbGVtZW50LCBkdXJhdGlvbjpudW1iZXIgPSAzMDAsIG9mZnNldCA9IDMwMCk6RWxlbWVudCB7XG4gICAgbGV0IGVsZW06RWxlbWVudCA9IHR5cGVvZiBzZWxlY3Rvck9yRWxlbSA9PT0gJ3N0cmluZycgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yT3JFbGVtKSA6IHNlbGVjdG9yT3JFbGVtO1xuXG4gICAgaWYgKGVsZW0pIHtcbiAgICAgICAgbGV0IGJveCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGxldCBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgbGV0IGRvY0VsID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIFxuICAgICAgICBsZXQgc2Nyb2xsVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY0VsLnNjcm9sbFRvcCB8fCBib2R5LnNjcm9sbFRvcDtcbiAgICAgICAgbGV0IGNsaWVudFRvcCA9IGRvY0VsLmNsaWVudFRvcCB8fCBib2R5LmNsaWVudFRvcCB8fCAwO1xuICAgICAgICBsZXQgZWxlbVRvcCA9IGJveC50b3AgKyBzY3JvbGxUb3AgLSBjbGllbnRUb3A7XG4gICAgXG4gICAgICAgIGxldCBkaWZmID0gZWxlbVRvcCAtIHNjcm9sbFRvcCAtIG9mZnNldDtcbiAgICAgICAgbGV0IHN0YXJ0O1xuICAgIFxuICAgICAgICAvLyBCb290c3RyYXAgb3VyIGFuaW1hdGlvbiAtIGl0IHdpbGwgZ2V0IGNhbGxlZCByaWdodCBiZWZvcmUgbmV4dCBmcmFtZSBzaGFsbCBiZSByZW5kZXJlZC5cbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBzdGVwKHRpbWVzdGFtcCkge1xuICAgICAgICAgICAgaWYgKCFzdGFydCkgc3RhcnQgPSB0aW1lc3RhbXA7XG4gICAgICAgICAgICAvLyBFbGFwc2VkIG1pbGlzZWNvbmRzIHNpbmNlIHN0YXJ0IG9mIHNjcm9sbGluZy5cbiAgICAgICAgICAgIGxldCB0aW1lID0gdGltZXN0YW1wIC0gc3RhcnQ7XG4gICAgICAgICAgICAvLyBHZXQgcGVyY2VudCBvZiBjb21wbGV0aW9uIGluIHJhbmdlIFswLCAxXS5cbiAgICAgICAgICAgIGxldCBwZXJjZW50ID0gTWF0aC5taW4odGltZSAvIGR1cmF0aW9uLCAxKTtcbiAgICAgICAgXG4gICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgc2Nyb2xsVG9wICsgZGlmZiAqIHBlcmNlbnQpO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFByb2NlZWQgd2l0aCBhbmltYXRpb24gYXMgbG9uZyBhcyB3ZSB3YW50ZWQgaXQgdG8uXG4gICAgICAgICAgICBpZiAodGltZSA8IGR1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICByZXR1cm4gZWxlbTtcbn1cbiAgIl19