@q149/angular-scrollspy
Version:
A simple lightweight library for Angular which automatically updates links to indicate the currently active section in the viewport
107 lines (106 loc) • 6.76 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Component, Input } from '@angular/core';
import { ScrollSpyService } from '../scroll-spy-service/scroll-spy.service';
/**
* A component to wrap section content within that will update the
* `ScrollSpyService` when it's in view
*
* \@example
* ```html
* <sn-scroll-spy-section id="section1" for="foo">
* ...
* </sn-scroll-spy-section>
* ```
*/
export class ScrollSpySectionComponent {
/**
* Creates an instance of ScrollSpySectionComponent.
* \@memberof ScrollSpySectionComponent
* @param {?} scrollSpySvc
*/
constructor(scrollSpySvc) {
this.scrollSpySvc = scrollSpySvc;
/**
* Amount of time in ms to wait for other scroll events
* before running event handler
*
* \@default 0
* \@memberof ScrollSpySectionComponent
*/
this.debounce = 0;
}
/**
* Updates `ScrollSpy` section when element enters/leaves viewport
*
* \@memberof ScrollSpySectionComponent
* @param {?} inViewport
* @return {?}
*/
onInViewportChange(inViewport) {
this.scrollSpySvc.setSpySectionStatus(this.id, this.for, inViewport);
}
}
ScrollSpySectionComponent.decorators = [
{ type: Component, args: [{
selector: 'sn-scroll-spy-section',
template: `<div
class="sn-hidden"
snInViewport
[offsetTop]="500"
(inViewportChange)="onInViewportChange($event)"
[debounce]="debounce">
</div>
<ng-content></ng-content>
`,
styles: [`:host{display:block;position:relative}.sn-hidden{bottom:0;left:0;opacity:0;position:absolute;right:0;top:0;z-index:-1}`]
},] },
];
/** @nocollapse */
ScrollSpySectionComponent.ctorParameters = () => [
{ type: ScrollSpyService, },
];
ScrollSpySectionComponent.propDecorators = {
"id": [{ type: Input },],
"for": [{ type: Input },],
"debounce": [{ type: Input },],
};
function ScrollSpySectionComponent_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
ScrollSpySectionComponent.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
ScrollSpySectionComponent.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
ScrollSpySectionComponent.propDecorators;
/**
* Identifies the section
*
* \@memberof ScrollSpySectionComponent
* @type {?}
*/
ScrollSpySectionComponent.prototype.id;
/**
* Specifies which `ScrollSpy` instance to update
*
* \@memberof ScrollSpySectionComponent
* @type {?}
*/
ScrollSpySectionComponent.prototype.for;
/**
* Amount of time in ms to wait for other scroll events
* before running event handler
*
* \@default 0
* \@memberof ScrollSpySectionComponent
* @type {?}
*/
ScrollSpySectionComponent.prototype.debounce;
/** @type {?} */
ScrollSpySectionComponent.prototype.scrollSpySvc;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXNweS1zZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BxMTQ5L2FuZ3VsYXItc2Nyb2xsc3B5LyIsInNvdXJjZXMiOlsiYXBwL3Njcm9sbC1zcHkvc2Nyb2xsLXNweS1zZWN0aW9uL3Njcm9sbC1zcHktc2VjdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7Ozs7Ozs7QUEwQjVFLE1BQU07Ozs7OztJQXlCSixZQUFvQixZQUE4QjtRQUE5QixpQkFBWSxHQUFaLFlBQVksQ0FBa0I7Ozs7Ozs7O3dCQUx2QixDQUFDO0tBSzBCOzs7Ozs7OztJQU0vQyxrQkFBa0IsQ0FBQyxVQUFtQjtRQUMzQyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQzs7OztZQTdDeEUsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx1QkFBdUI7Z0JBQ2pDLFFBQVEsRUFBRTs7Ozs7Ozs7Q0FRWDtnQkFDQyxNQUFNLEVBQUUsQ0FBQyx3SEFBd0gsQ0FBQzthQUNuSTs7OztZQXpCUSxnQkFBZ0I7OzttQkFnQ3RCLEtBQUs7b0JBTUwsS0FBSzt5QkFRTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTY3JvbGxTcHlTZXJ2aWNlIH0gZnJvbSAnLi4vc2Nyb2xsLXNweS1zZXJ2aWNlL3Njcm9sbC1zcHkuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogQSBjb21wb25lbnQgdG8gd3JhcCBzZWN0aW9uIGNvbnRlbnQgd2l0aGluIHRoYXQgd2lsbCB1cGRhdGUgdGhlXHJcbiAqIGBTY3JvbGxTcHlTZXJ2aWNlYCB3aGVuIGl0J3MgaW4gdmlld1xyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBodG1sXHJcbiAqICA8c24tc2Nyb2xsLXNweS1zZWN0aW9uIGlkPVwic2VjdGlvbjFcIiBmb3I9XCJmb29cIj5cclxuICogICAgLi4uXHJcbiAqICA8L3NuLXNjcm9sbC1zcHktc2VjdGlvbj5cclxuICogYGBgXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NuLXNjcm9sbC1zcHktc2VjdGlvbicsXHJcbiAgdGVtcGxhdGU6IGA8ZGl2XG4gIGNsYXNzPVwic24taGlkZGVuXCJcbiAgc25JblZpZXdwb3J0XG4gIFtvZmZzZXRUb3BdPVwiNTAwXCJcbiAgKGluVmlld3BvcnRDaGFuZ2UpPVwib25JblZpZXdwb3J0Q2hhbmdlKCRldmVudClcIlxuICBbZGVib3VuY2VdPVwiZGVib3VuY2VcIj5cbjwvZGl2PlxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuYCxcclxuICBzdHlsZXM6IFtgOmhvc3R7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZX0uc24taGlkZGVue2JvdHRvbTowO2xlZnQ6MDtvcGFjaXR5OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt6LWluZGV4Oi0xfWBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTY3JvbGxTcHlTZWN0aW9uQ29tcG9uZW50IHtcclxuICAvKipcclxuICAgKiBJZGVudGlmaWVzIHRoZSBzZWN0aW9uXHJcbiAgICpcclxuICAgKiBAbWVtYmVyb2YgU2Nyb2xsU3B5U2VjdGlvbkNvbXBvbmVudFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpZDogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIFNwZWNpZmllcyB3aGljaCBgU2Nyb2xsU3B5YCBpbnN0YW5jZSB0byB1cGRhdGVcclxuICAgKlxyXG4gICAqIEBtZW1iZXJvZiBTY3JvbGxTcHlTZWN0aW9uQ29tcG9uZW50XHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGZvcjogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIEFtb3VudCBvZiB0aW1lIGluIG1zIHRvIHdhaXQgZm9yIG90aGVyIHNjcm9sbCBldmVudHNcclxuICAgKiBiZWZvcmUgcnVubmluZyBldmVudCBoYW5kbGVyXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCAwXHJcbiAgICogQG1lbWJlcm9mIFNjcm9sbFNweVNlY3Rpb25Db21wb25lbnRcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZGVib3VuY2UgPSAwO1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU2Nyb2xsU3B5U2VjdGlvbkNvbXBvbmVudC5cclxuICAgKiBAbWVtYmVyb2YgU2Nyb2xsU3B5U2VjdGlvbkNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2Nyb2xsU3B5U3ZjOiBTY3JvbGxTcHlTZXJ2aWNlKSB7fVxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgYFNjcm9sbFNweWAgc2VjdGlvbiB3aGVuIGVsZW1lbnQgZW50ZXJzL2xlYXZlcyB2aWV3cG9ydFxyXG4gICAqXHJcbiAgICogQG1lbWJlcm9mIFNjcm9sbFNweVNlY3Rpb25Db21wb25lbnRcclxuICAgKi9cclxuICBwdWJsaWMgb25JblZpZXdwb3J0Q2hhbmdlKGluVmlld3BvcnQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuc2Nyb2xsU3B5U3ZjLnNldFNweVNlY3Rpb25TdGF0dXModGhpcy5pZCwgdGhpcy5mb3IsIGluVmlld3BvcnQpO1xyXG4gIH1cclxufVxyXG4iXX0=