ngx-flip-flip
Version:
Angular Flip Flip - Angular full page scrolling components with no dependencies
1 lines • 13.8 kB
Source Map (JSON)
{"version":3,"file":"ngx-flip-flip.mjs","sources":["../../../projects/ngx-flip-flip/src/lib/services/slides.service.ts","../../../projects/ngx-flip-flip/src/lib/models/direction.enum.ts","../../../projects/ngx-flip-flip/src/lib/models/keyboard.enum.ts","../../../projects/ngx-flip-flip/src/lib/services/events.service.ts","../../../projects/ngx-flip-flip/src/lib/components/slide.component.ts","../../../projects/ngx-flip-flip/src/lib/components/wrapper.component.ts","../../../projects/ngx-flip-flip/src/lib/ngx-flip-flip.module.ts","../../../projects/ngx-flip-flip/src/public_api.ts","../../../projects/ngx-flip-flip/src/ngx-flip-flip.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class NgxFlipFlipSlidesService {\n private _slides: NodeListOf<HTMLElement>;\n private _selectedId: number;\n\n get slides() {\n return this._slides;\n }\n set slides(slides: NodeListOf<HTMLElement>) {\n this._slides = slides;\n }\n\n get selectedId() {\n return this._selectedId;\n }\n set selectedId(id: number) {\n this._selectedId = id;\n }\n\n isTheFirstSlide() {\n return this._selectedId === 0;\n }\n\n isTheLastSlide() {\n return this._selectedId === this._slides.length - 1;\n }\n}\n","export enum Direction {\n Up = 'Up',\n Down = 'Down',\n}\n","export enum KeyboardEnum {\n ArrowDown = 'ArrowDown',\n ArrowUp = 'ArrowUp',\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, fromEvent, merge } from 'rxjs';\nimport { filter, throttleTime, map, share, pairwise } from 'rxjs/operators';\nimport { NgxFlipFlipSlidesService } from './slides.service';\nimport { Direction } from '../models/direction.enum';\nimport { KeyboardEnum } from '../models/keyboard.enum';\n\n@Injectable()\nexport class NgxFlipFlipEventsService {\n fitToSectionDelay: number;\n isArrowNavigationActive: boolean;\n\n constructor(\n private slidesService: NgxFlipFlipSlidesService\n ) {}\n\n onResize$(): Observable<Event> {\n return fromEvent(window, 'resize');\n }\n\n onSlideChange$(): Observable<Direction> {\n return merge(this.onWheel$(), this.onKeyPress$(), this.onScroll$())\n .pipe(\n throttleTime(this.fitToSectionDelay),\n filter(direction => this.filterOnScroll(direction)),\n share()\n );\n }\n\n private onWheel$(): Observable<Direction> {\n return fromEvent(window, 'wheel', { passive: true }).pipe(\n map((e: WheelEvent) => e.deltaY < 0 ? Direction.Up : Direction.Down)\n );\n }\n\n private onKeyPress$(): Observable<Direction> {\n return fromEvent(window, 'keydown').pipe(\n filter(() => this.isArrowNavigationActive),\n filter((e: KeyboardEvent) => e.key === KeyboardEnum.ArrowUp || e.key === KeyboardEnum.ArrowDown),\n map((e: KeyboardEvent) => e.key === KeyboardEnum.ArrowUp ? Direction.Up : Direction.Down)\n );\n }\n\n private onScroll$(): Observable<Direction> {\n return fromEvent(window, 'scroll').pipe(\n map((e: TouchEvent) => window.pageYOffset),\n pairwise(),\n map(([y1, y2]): Direction => y2 < y1 ? Direction.Up : Direction.Down)\n );\n }\n\n private filterOnScroll(direction: Direction): boolean {\n return direction === Direction.Up\n ? !this.slidesService.isTheFirstSlide()\n : !this.slidesService.isTheLastSlide();\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngx-flip-flip-slide',\n template: `<ng-content></ng-content>`,\n styles: [`\n :host {\n display: block;\n position: fixed;\n width: 100%;\n }\n `],\n})\nexport class NgxFlipFlipSlide {\n}\n","import { Component, OnInit, OnDestroy, Renderer2, ElementRef, Input, NgZone, Output, EventEmitter } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { NgxFlipFlipEventsService } from '../services/events.service';\nimport { NgxFlipFlipSlidesService } from '../services/slides.service';\nimport { Direction } from '../models/direction.enum';\nimport { NgxFlipFlipOptions } from '../models/options.model';\n\n@Component({\n selector: 'ngx-flip-flip-wrapper',\n template: `<ng-content></ng-content>`,\n styles: [`\n :host {\n display: block;\n }\n `],\n})\nexport class NgxFlipFlipWrapper implements OnInit, OnDestroy {\n @Input() options: NgxFlipFlipOptions = {\n scrollingSpeed: 700,\n easing: 'ease',\n fitToSectionDelay: 500,\n startFromSlide: 0,\n keyboardScrolling: true,\n };\n @Output() onSlideChange = new EventEmitter<Direction>();\n\n private _resizeSubscription: Subscription;\n private _onScrollSubscription: Subscription;\n\n constructor(\n private renderer: Renderer2,\n private elementRef: ElementRef,\n private slidesService: NgxFlipFlipSlidesService,\n private eventsService: NgxFlipFlipEventsService,\n private _zone: NgZone,\n ) {}\n\n ngOnInit() {\n this.slidesService.slides = document.querySelectorAll('ngx-flip-flip-slide');\n\n this.eventsService.fitToSectionDelay = this.options.fitToSectionDelay + this.options.scrollingSpeed;\n this.eventsService.isArrowNavigationActive = this.options.keyboardScrolling;\n this.slidesService.selectedId = this.options.startFromSlide;\n this.changeSlide();\n\n this._zone.runOutsideAngular(() => {\n\n this._onScrollSubscription = this.eventsService.onSlideChange$().subscribe(direction => {\n this._zone.run(() => {\n this.slidesService.selectedId = this.getSelectedSlideId(direction);\n this.changeSlide();\n this.onSlideChange.emit(direction);\n });\n });\n\n this._resizeSubscription = this.eventsService.onResize$().subscribe(() => {\n this._zone.run(() => {\n this.changeSlidesDimensions();\n this.changeSlide();\n });\n });\n\n });\n\n this.changeSlidesDimensions();\n this.addStyles();\n }\n\n ngOnDestroy() {\n this._resizeSubscription.unsubscribe();\n this._onScrollSubscription.unsubscribe();\n }\n\n private changeSlidesDimensions = () => {\n this.slidesService.slides.forEach((slide, index) => {\n this.renderer.setStyle(slide, 'height', `${window.innerHeight}px`);\n this.renderer.setStyle(slide, 'top', `${window.innerHeight * index}px`);\n });\n }\n\n private changeSlide() {\n const offset = -window.innerHeight * this.slidesService.selectedId;\n this.moveTo(offset);\n }\n\n private moveTo(offset: number) {\n this.renderer.setStyle(this.elementRef.nativeElement, 'transform', `translateY(${offset}px)`);\n }\n\n private addStyles() {\n this.renderer.setStyle(this.elementRef.nativeElement, 'transition', `transform ${this.options.scrollingSpeed}ms ${this.options.easing}`);\n this.renderer.setStyle(document.body, 'margin', 0);\n this.renderer.setStyle(document.body, 'overflow', 'hidden');\n }\n\n private getSelectedSlideId(direction: Direction): number {\n return direction === Direction.Down ? this.slidesService.selectedId + 1 : this.slidesService.selectedId - 1;\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { NgxFlipFlipSlidesService } from './services/slides.service';\nimport { NgxFlipFlipEventsService } from './services/events.service';\nimport { NgxFlipFlipSlide } from './components/slide.component';\nimport { NgxFlipFlipWrapper } from './components/wrapper.component';\n\n@NgModule({\n declarations: [\n NgxFlipFlipWrapper,\n NgxFlipFlipSlide,\n ],\n imports: [\n CommonModule,\n ],\n exports: [\n NgxFlipFlipWrapper,\n NgxFlipFlipSlide,\n ],\n providers: [\n NgxFlipFlipEventsService,\n NgxFlipFlipSlidesService,\n ],\n})\nexport class NgxFlipFlipModule {\n static forRoot(): ModuleWithProviders<NgxFlipFlipModule> {\n return {\n ngModule: NgxFlipFlipModule,\n providers: [],\n };\n }\n}\n","/*\n * Public API Surface of ngx-flip-flip\n */\n\nexport * from './lib/ngx-flip-flip.module';\nexport { Direction } from './lib/models/direction.enum';\nexport { NgxFlipFlipOptions } from './lib/models/options.model';\nexport { NgxFlipFlipSlide } from './lib/components/slide.component'\nexport { NgxFlipFlipWrapper } from './lib/components/wrapper.component'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}