cocori-ng
Version:
Cocori-ng is an Angular full of great components & utilites based on Material
94 lines • 11.4 kB
JavaScript
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
import * as i0 from "@angular/core";
export class ScrollService {
constructor() {
this.onScroll = new Subject();
}
currentScrollPosition() {
// Firefox, Chrome, Opera, Safari
if (self.pageYOffset)
return self.pageYOffset;
// Internet Explorer 6 - standards mode
if (document.documentElement && document.documentElement.scrollTop) {
return document.documentElement.scrollTop;
}
// Internet Explorer 6, 7 and 8
if (document.body.scrollTop)
return document.body.scrollTop;
return 0;
}
getElementDomPosition(elm) {
let y = elm.offsetTop - 100;
let node = elm;
while (node.offsetParent && node.offsetParent !== document.body) {
node = node.offsetParent;
y += node.offsetTop;
}
return y;
}
scrollToTop() {
const that = this;
let timeOut;
if (document.body.scrollTop !== 0 || document.documentElement.scrollTop !== 0) {
window.scrollBy(0, -50);
timeOut = setTimeout(function () {
that.scrollToTop();
}, 10);
}
else {
clearTimeout(timeOut);
}
}
scrollToIdSmooth(eID) {
const startY = this.currentScrollPosition();
const elm = document.getElementById(eID);
const stopY = this.getElementDomPosition(elm);
const distance = stopY > startY ? stopY - startY : startY - stopY;
if (distance < 100) {
scrollTo(0, stopY);
return;
}
let speed = Math.round(distance / 100);
if (speed >= 20) {
speed = 20;
}
const step = Math.round(distance / 25);
let leapY = stopY > startY ? startY + step : startY - step;
let timer = 0;
if (stopY > startY) {
for (let i = startY; i < stopY; i += step) {
setTimeout("window.scrollTo(0, " + leapY + ")", timer * speed);
leapY += step;
if (leapY > stopY)
leapY = stopY;
timer++;
}
return;
}
for (let i = startY; i > stopY; i -= step) {
setTimeout("window.scrollTo(0, " + leapY + ")", timer * speed);
leapY -= step;
if (leapY < stopY)
leapY = stopY;
timer++;
}
return false;
}
getScrollDistanceTo(eID) {
const elm = document.getElementById(eID);
if (!elm)
return -1; // element not found
const stopY = this.getElementDomPosition(elm);
return stopY;
}
}
ScrollService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ScrollService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
ScrollService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ScrollService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ScrollService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2Nvcmktbmcvc3JjL2ZlYXR1cmUtY29yZS9zZXJ2aWNlL3Njcm9sbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLL0IsTUFBTSxPQUFPLGFBQWE7SUFJdEI7UUFGTyxhQUFRLEdBQXFCLElBQUksT0FBTyxFQUFXLENBQUM7SUFFM0MsQ0FBQztJQUVULHFCQUFxQjtRQUN6QixpQ0FBaUM7UUFDakMsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM5Qyx1Q0FBdUM7UUFDdkMsSUFBSSxRQUFRLENBQUMsZUFBZSxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFO1lBQ2hFLE9BQU8sUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7U0FDN0M7UUFDRCwrQkFBK0I7UUFDL0IsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzVELE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVPLHFCQUFxQixDQUFDLEdBQUc7UUFDN0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDNUIsSUFBSSxJQUFJLEdBQVEsR0FBRyxDQUFDO1FBRXBCLE9BQU8sSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDN0QsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDekIsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7U0FD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UUFFekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTlDLE9BQU8sS0FBSyxDQUFBO0lBQ2hCLENBQUM7OzBHQWpGUSxhQUFhOzhHQUFiLGFBQWEsY0FGVixNQUFNOzJGQUVULGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNjcm9sbFNlcnZpY2Uge1xyXG4gICAgcHVibGljIHNjcm9sbGluZ05hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50XHJcbiAgICBwdWJsaWMgb25TY3JvbGw6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gICAgcHJpdmF0ZSBjdXJyZW50U2Nyb2xsUG9zaXRpb24oKSB7XHJcbiAgICAgICAgLy8gRmlyZWZveCwgQ2hyb21lLCBPcGVyYSwgU2FmYXJpXHJcbiAgICAgICAgaWYgKHNlbGYucGFnZVlPZmZzZXQpIHJldHVybiBzZWxmLnBhZ2VZT2Zmc2V0O1xyXG4gICAgICAgIC8vIEludGVybmV0IEV4cGxvcmVyIDYgLSBzdGFuZGFyZHMgbW9kZVxyXG4gICAgICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgNiwgNyBhbmQgOFxyXG4gICAgICAgIGlmIChkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCkgcmV0dXJuIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RWxlbWVudERvbVBvc2l0aW9uKGVsbSkge1xyXG4gICAgICAgIGxldCB5ID0gZWxtLm9mZnNldFRvcCAtIDEwMDtcclxuICAgICAgICBsZXQgbm9kZTogYW55ID0gZWxtO1xyXG5cclxuICAgICAgICB3aGlsZSAobm9kZS5vZmZzZXRQYXJlbnQgJiYgbm9kZS5vZmZzZXRQYXJlbnQgIT09IGRvY3VtZW50LmJvZHkpIHtcclxuICAgICAgICAgICAgbm9kZSA9IG5vZGUub2Zmc2V0UGFyZW50O1xyXG4gICAgICAgICAgICB5ICs9IG5vZGUub2Zmc2V0VG9wO1xyXG4gICAgICAgIH0gcmV0dXJuIHk7XHJcbiAgICB9XHJcblxyXG4gICAgc2Nyb2xsVG9Ub3AoKSB7XHJcbiAgICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XHJcbiAgICAgICAgbGV0IHRpbWVPdXQ7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wICE9PSAwIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgIT09IDApIHtcclxuICAgICAgICAgICAgd2luZG93LnNjcm9sbEJ5KDAsIC01MCk7XHJcblxyXG4gICAgICAgICAgICB0aW1lT3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0LnNjcm9sbFRvVG9wKCk7XHJcbiAgICAgICAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVPdXQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzY3JvbGxUb0lkU21vb3RoKGVJRCkge1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0WSA9IHRoaXMuY3VycmVudFNjcm9sbFBvc2l0aW9uKCk7XHJcbiAgICAgICAgY29uc3QgZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZUlEKTtcclxuICAgICAgICBjb25zdCBzdG9wWSA9IHRoaXMuZ2V0RWxlbWVudERvbVBvc2l0aW9uKGVsbSk7XHJcbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBzdG9wWSA+IHN0YXJ0WSA/IHN0b3BZIC0gc3RhcnRZIDogc3RhcnRZIC0gc3RvcFk7XHJcbiAgICAgICAgaWYgKGRpc3RhbmNlIDwgMTAwKSB7XHJcbiAgICAgICAgICAgIHNjcm9sbFRvKDAsIHN0b3BZKTsgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3BlZWQgPSBNYXRoLnJvdW5kKGRpc3RhbmNlIC8gMTAwKTtcclxuXHJcbiAgICAgICAgaWYgKHNwZWVkID49IDIwKSB7XHJcbiAgICAgICAgICAgIHNwZWVkID0gMjA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzdGVwID0gTWF0aC5yb3VuZChkaXN0YW5jZSAvIDI1KTtcclxuICAgICAgICBsZXQgbGVhcFkgPSBzdG9wWSA+IHN0YXJ0WSA/IHN0YXJ0WSArIHN0ZXAgOiBzdGFydFkgLSBzdGVwO1xyXG4gICAgICAgIGxldCB0aW1lciA9IDA7XHJcbiAgICAgICAgaWYgKHN0b3BZID4gc3RhcnRZKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydFk7IGkgPCBzdG9wWTsgaSArPSBzdGVwKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KFwid2luZG93LnNjcm9sbFRvKDAsIFwiICsgbGVhcFkgKyBcIilcIiwgdGltZXIgKiBzcGVlZCk7XHJcbiAgICAgICAgICAgICAgICBsZWFwWSArPSBzdGVwOyBpZiAobGVhcFkgPiBzdG9wWSkgbGVhcFkgPSBzdG9wWTsgdGltZXIrKztcclxuICAgICAgICAgICAgfSByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydFk7IGkgPiBzdG9wWTsgaSAtPSBzdGVwKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoXCJ3aW5kb3cuc2Nyb2xsVG8oMCwgXCIgKyBsZWFwWSArIFwiKVwiLCB0aW1lciAqIHNwZWVkKTtcclxuICAgICAgICAgICAgbGVhcFkgLT0gc3RlcDsgaWYgKGxlYXBZIDwgc3RvcFkpIGxlYXBZID0gc3RvcFk7IHRpbWVyKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTY3JvbGxEaXN0YW5jZVRvKGVJRCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZUlEKTtcclxuXHJcbiAgICAgICAgaWYgKCFlbG0pIHJldHVybiAtMTsgLy8gZWxlbWVudCBub3QgZm91bmRcclxuXHJcbiAgICAgICAgY29uc3Qgc3RvcFkgPSB0aGlzLmdldEVsZW1lbnREb21Qb3NpdGlvbihlbG0pO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RvcFlcclxuICAgIH1cclxufVxyXG4iXX0=