UNPKG

cocori-ng

Version:

Cocori-ng is an Angular full of great components & utilites based on Material

94 lines 11.4 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2Nvcmktbmcvc3JjL2ZlYXR1cmUtY29yZS9zZXJ2aWNlL3Njcm9sbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLL0IsTUFBTSxPQUFPLGFBQWE7SUFJdEI7UUFGTyxhQUFRLEdBQXFCLElBQUksT0FBTyxFQUFXLENBQUM7SUFFM0MsQ0FBQztJQUVULHFCQUFxQjtRQUN6QixpQ0FBaUM7UUFDakMsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM5Qyx1Q0FBdUM7UUFDdkMsSUFBSSxRQUFRLENBQUMsZUFBZSxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFO1lBQ2hFLE9BQU8sUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7U0FDN0M7UUFDRCwrQkFBK0I7UUFDL0IsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzVELE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVPLHFCQUFxQixDQUFDLEdBQUc7UUFDN0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDNUIsSUFBSSxJQUFJLEdBQVEsR0FBRyxDQUFDO1FBRXBCLE9BQU8sSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDN0QsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDekIsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDdkI7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ekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTlDLE9BQU8sS0FBSyxDQUFBO0lBQ2hCLENBQUM7OzBHQWpGUSxhQUFhOzhHQUFiLGFBQWEsY0FGVixNQUFNOzJGQUVULGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNjcm9sbFNlcnZpY2Uge1xyXG4gICAgcHVibGljIHNjcm9sbGluZ05hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50XHJcbiAgICBwdWJsaWMgb25TY3JvbGw6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gICAgcHJpdmF0ZSBjdXJyZW50U2Nyb2xsUG9zaXRpb24oKSB7XHJcbiAgICAgICAgLy8gRmlyZWZveCwgQ2hyb21lLCBPcGVyYSwgU2FmYXJpXHJcbiAgICAgICAgaWYgKHNlbGYucGFnZVlPZmZzZXQpIHJldHVybiBzZWxmLnBhZ2VZT2Zmc2V0O1xyXG4gICAgICAgIC8vIEludGVybmV0IEV4cGxvcmVyIDYgLSBzdGFuZGFyZHMgbW9kZVxyXG4gICAgICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgNiwgNyBhbmQgOFxyXG4gICAgICAgIGlmIChkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCkgcmV0dXJuIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RWxlbWVudERvbVBvc2l0aW9uKGVsbSkge1xyXG4gICAgICAgIGxldCB5ID0gZWxtLm9mZnNldFRvcCAtIDEwMDtcclxuICAgICAgICBsZXQgbm9kZTogYW55ID0gZWxtO1xyXG5cclxuICAgICAgICB3aGlsZSAobm9kZS5vZmZzZXRQYXJlbnQgJiYgbm9kZS5vZmZzZXRQYXJlbnQgIT09IGRvY3VtZW50LmJvZHkpIHtcclxuICAgICAgICAgICAgbm9kZSA9IG5vZGUub2Zmc2V0UGFyZW50O1xyXG4gICAgICAgICAgICB5ICs9IG5vZGUub2Zmc2V0VG9wO1xyXG4gICAgICAgIH0gcmV0dXJuIHk7XHJcbiAgICB9XHJcblxyXG4gICAgc2Nyb2xsVG9Ub3AoKSB7XHJcbiAgICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XHJcbiAgICAgICAgbGV0IHRpbWVPdXQ7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wICE9PSAwIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgIT09IDApIHtcclxuICAgICAgICAgICAgd2luZG93LnNjcm9sbEJ5KDAsIC01MCk7XHJcblxyXG4gICAgICAgICAgICB0aW1lT3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGF0LnNjcm9sbFRvVG9wKCk7XHJcbiAgICAgICAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVPdXQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzY3JvbGxUb0lkU21vb3RoKGVJRCkge1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0WSA9IHRoaXMuY3VycmVudFNjcm9sbFBvc2l0aW9uKCk7XHJcbiAgICAgICAgY29uc3QgZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZUlEKTtcclxuICAgICAgICBjb25zdCBzdG9wWSA9IHRoaXMuZ2V0RWxlbWVudERvbVBvc2l0aW9uKGVsbSk7XHJcbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBzdG9wWSA+IHN0YXJ0WSA/IHN0b3BZIC0gc3RhcnRZIDogc3RhcnRZIC0gc3RvcFk7XHJcbiAgICAgICAgaWYgKGRpc3RhbmNlIDwgMTAwKSB7XHJcbiAgICAgICAgICAgIHNjcm9sbFRvKDAsIHN0b3BZKTsgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3BlZWQgPSBNYXRoLnJvdW5kKGRpc3RhbmNlIC8gMTAwKTtcclxuXHJcbiAgICAgICAgaWYgKHNwZWVkID49IDIwKSB7XHJcbiAgICAgICAgICAgIHNwZWVkID0gMjA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzdGVwID0gTWF0aC5yb3VuZChkaXN0YW5jZSAvIDI1KTtcclxuICAgICAgICBsZXQgbGVhcFkgPSBzdG9wWSA+IHN0YXJ0WSA/IHN0YXJ0WSArIHN0ZXAgOiBzdGFydFkgLSBzdGVwO1xyXG4gICAgICAgIGxldCB0aW1lciA9IDA7XHJcbiAgICAgICAgaWYgKHN0b3BZID4gc3RhcnRZKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydFk7IGkgPCBzdG9wWTsgaSArPSBzdGVwKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KFwid2luZG93LnNjcm9sbFRvKDAsIFwiICsgbGVhcFkgKyBcIilcIiwgdGltZXIgKiBzcGVlZCk7XHJcbiAgICAgICAgICAgICAgICBsZWFwWSArPSBzdGVwOyBpZiAobGVhcFkgPiBzdG9wWSkgbGVhcFkgPSBzdG9wWTsgdGltZXIrKztcclxuICAgICAgICAgICAgfSByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydFk7IGkgPiBzdG9wWTsgaSAtPSBzdGVwKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoXCJ3aW5kb3cuc2Nyb2xsVG8oMCwgXCIgKyBsZWFwWSArIFwiKVwiLCB0aW1lciAqIHNwZWVkKTtcclxuICAgICAgICAgICAgbGVhcFkgLT0gc3RlcDsgaWYgKGxlYXBZIDwgc3RvcFkpIGxlYXBZID0gc3RvcFk7IHRpbWVyKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTY3JvbGxEaXN0YW5jZVRvKGVJRCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZUlEKTtcclxuXHJcbiAgICAgICAgaWYgKCFlbG0pIHJldHVybiAtMTsgLy8gZWxlbWVudCBub3QgZm91bmRcclxuXHJcbiAgICAgICAgY29uc3Qgc3RvcFkgPSB0aGlzLmdldEVsZW1lbnREb21Qb3NpdGlvbihlbG0pO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RvcFlcclxuICAgIH1cclxufVxyXG4iXX0=