UNPKG

@drozdik.m/slow-scroll

Version:
98 lines (97 loc) 3.83 kB
exports.__esModule = true; exports.SlowScroll = void 0; var animation_1 = require("@drozdik.m/animation"); //-------------------------------------------------- //----------SLOW SCROLL----------------------------- //-------------------------------------------------- var SlowScroll = /** @class */ (function () { //-------------------------------------------------- //---------CONSTRUCTOR------------------------------ //-------------------------------------------------- /** * Constructor that sets events for .slowScroll */ function SlowScroll() { console.warn("SlowScroll is static class, new instance should not be created"); } //-------------------------------------------------- //---------OFFSET----------------------------------- //-------------------------------------------------- /** * Sets new offset for scrolling * @param newOffset New offset value */ SlowScroll.prototype.SetOffset = function (newOffset) { SlowScroll.offset = newOffset; }; //-------------------------------------------------- //---------ANCHOR SCROLL---------------------------- //-------------------------------------------------- /** * Initializes anchor slow scroll * @param className Target links class (default = "slowScroll") */ SlowScroll.AnchorScroll = function (className) { if (className === void 0) { className = "slowScroll"; } var elements = document.getElementsByClassName(className); var _loop_1 = function (i) { var element = elements.item(i); element.addEventListener("click", function (e) { e.preventDefault ? e.preventDefault() : (e.returnValue = false); var targetSelector = element.getAttribute("href"); SlowScroll.To(document.querySelector(targetSelector)); }); }; for (var i = 0; i < elements.length; i++) { _loop_1(i); } }; //-------------------------------------------------- //----------SCROLLS--------------------------------- //-------------------------------------------------- /** * Scrolls to position from tom * @param top Target scroll px from top */ SlowScroll.ToPx = function (top) { //Init animation var animation = new animation_1.Animation(); animation.OnRender.Add(function (caller, args) { document.documentElement.scrollTop = args.Value(); document.body.scrollTop = args.Value(); }); animation.Start(document.documentElement.scrollTop, top - SlowScroll.offset); }; /** * Scrolls to an element * @param element Target element */ SlowScroll.To = function (element) { var rect = element.getBoundingClientRect(); var scrollTop = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop; var elementTop = rect.top + scrollTop; SlowScroll.ToPx(elementTop); }; /** * Scrolls to the first element matching the selector )if there is any) * @param selector Target selector */ SlowScroll.ToFirst = function (selector) { var element = document.querySelector(selector); if (element) SlowScroll.To(element); }; /** * Scrolls to top */ SlowScroll.ToTop = function () { SlowScroll.ToPx(0); }; //-------------------------------------------------- //----------VARIABLES------------------------------- //-------------------------------------------------- SlowScroll.offset = 0; return SlowScroll; }()); exports.SlowScroll = SlowScroll;