@drozdik.m/slow-scroll
Version:
Slow scroll handling
98 lines (97 loc) • 3.83 kB
JavaScript
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;