UNPKG

ngx-crystal-gallery

Version:

Responsive gallery with support for masonry layout and lightbox.

189 lines (188 loc) 15.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Directive, ElementRef, HostListener, Input, Output, EventEmitter } from '@angular/core'; export class PinchDirective { /** * @param {?} elementRef */ constructor(elementRef) { this.elementRef = elementRef; this.scale = 1; this.initialScale = 1; this.moveX = 0; this.moveY = 0; this.initialMoveX = 0; this.initialMoveY = 0; this.isNextImageLoaded = true; this.events = new EventEmitter(); this.elem = this.elementRef.nativeElement; } /** * @param {?} event * @return {?} */ touchstartHandler(event) { this.elem.style.transformOrigin = '0 0'; } /** * @param {?} event * @return {?} */ touchmoveHandler(event) { /** @type {?} */ let touches = event.touches; if (touches.length === 1 && this.scale === 1 && !this.eventType || this.eventType == 'swipe') { event.preventDefault(); if (!this.isNextImageLoaded) { return; } if (!this.eventType) { this.startX = event.touches[0].pageX; this.startY = event.touches[0].pageY; } this.eventType = 'swipe'; this.moveX = this.initialMoveX + (event.touches[0].pageX - this.startX); this.moveY = 0; this.transformElem(0); } } /** * @param {?} event * @return {?} */ touchendHandler(event) { /** @type {?} */ let touches = event.touches; /** @type {?} */ let img = this.elem.getElementsByTagName("img")[0]; if (!this.isNextImageLoaded) { return; } if (this.scale < 1) { this.scale = 1; } if (this.moveY > 0) { this.moveY = 0; } if (this.moveX > 100) { this.slide('prev'); } else if (this.moveX < -100) { this.slide('next'); } else { this.moveX = 0; } this.initialScale = this.scale; this.initialMoveX = this.moveX; this.initialMoveY = this.moveY; this.transformElem(200); this.eventType = 'touchend'; if (touches.length == 0) { this.eventType = ''; } } /** * @param {?} event * @return {?} */ slide(event) { this.onSlide(event); if (event === 'prev') { this.moveX = window.innerWidth + 8; if (this.isFirst) { this.moveX = 0; } } if (event === 'next') { this.moveX = -window.innerWidth - 8; if (this.isLast) { this.moveX = 0; } } this.isNextImageLoaded = false; setTimeout(() => { this.moveX = 0; this.initialMoveX = 0; this.isNextImageLoaded = true; }, 200); } /** * @param {?} evenType * @return {?} */ onSlide(evenType) { this.events.emit(evenType); } /** * @param {?=} duration * @return {?} */ transformElem(duration = 50) { /** @type {?} */ let matrixVal = 'matrix(' + Number(this.scale) + ',' + 0 + ',' + 0 + ',' + Number(this.scale) + ',' + Number(this.moveX) + ',' + Number(this.moveY) + ')'; this.elem.style.transition = 'all ' + duration + 'ms'; this.elem.style.transform = matrixVal; this.elem.style.webkitTransform = matrixVal; } } PinchDirective.decorators = [ { type: Directive, args: [{ selector: '[pinch]' },] }, ]; /** @nocollapse */ PinchDirective.ctorParameters = () => [ { type: ElementRef } ]; PinchDirective.propDecorators = { isLast: [{ type: Input }], isFirst: [{ type: Input }], events: [{ type: Output }], touchstartHandler: [{ type: HostListener, args: ['touchstart', ['$event'],] }], touchmoveHandler: [{ type: HostListener, args: ['touchmove', ['$event'],] }], touchendHandler: [{ type: HostListener, args: ['touchend', ['$event'],] }] }; if (false) { /** @type {?} */ PinchDirective.prototype.elem; /** @type {?} */ PinchDirective.prototype.eventType; /** @type {?} */ PinchDirective.prototype.scale; /** @type {?} */ PinchDirective.prototype.initialScale; /** @type {?} */ PinchDirective.prototype.startX; /** @type {?} */ PinchDirective.prototype.startY; /** @type {?} */ PinchDirective.prototype.moveX; /** @type {?} */ PinchDirective.prototype.moveY; /** @type {?} */ PinchDirective.prototype.initialMoveX; /** @type {?} */ PinchDirective.prototype.initialMoveY; /** @type {?} */ PinchDirective.prototype.moveXC; /** @type {?} */ PinchDirective.prototype.moveYC; /** @type {?} */ PinchDirective.prototype.distance; /** @type {?} */ PinchDirective.prototype.initialDistance; /** @type {?} */ PinchDirective.prototype.isNextImageLoaded; /** @type {?} */ PinchDirective.prototype.isLast; /** @type {?} */ PinchDirective.prototype.isFirst; /** @type {?} */ PinchDirective.prototype.events; /** @type {?} */ PinchDirective.prototype.elementRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluY2guZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWNyeXN0YWwtZ2FsbGVyeS8iLCJzb3VyY2VzIjpbImxpYi9waW5jaC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU1qRyxNQUFNOzs7O0lBNkJGLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7cUJBeEI3QixDQUFDOzRCQUNNLENBQUM7cUJBS1IsQ0FBQztxQkFDRCxDQUFDOzRCQUNNLENBQUM7NEJBQ0QsQ0FBQztpQ0FRSSxJQUFJO3NCQUtWLElBQUksWUFBWSxFQUFXO1FBRzFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7S0FDN0M7Ozs7O0lBR0QsaUJBQWlCLENBQUMsS0FBSztRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0tBQzNDOzs7OztJQUdELGdCQUFnQixDQUFDLEtBQUs7O1FBQ2xCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFFNUIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLENBQUEsQ0FBQztZQUMxRixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFdkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixNQUFNLENBQUM7YUFDVjtZQUVELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxD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O1lBMUlKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsU0FBUzthQUN0Qjs7OztZQUptQixVQUFVOzs7cUJBOEJ6QixLQUFLO3NCQUNMLEtBQUs7cUJBRUwsTUFBTTtnQ0FNTixZQUFZLFNBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDOytCQUtyQyxZQUFZLFNBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDOzhCQXlCcEMsWUFBWSxTQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcGluY2hdJ1xufSlcblxuZXhwb3J0IGNsYXNzIFBpbmNoRGlyZWN0aXZle1xuXG4gICAgZWxlbTogYW55O1xuICAgIGV2ZW50VHlwZTogYW55O1xuXG4gICAgc2NhbGU6IGFueSA9IDE7XG4gICAgaW5pdGlhbFNjYWxlOiBhbnkgPSAxO1xuXG4gICAgc3RhcnRYOiBhbnk7XG4gICAgc3RhcnRZOiBhbnk7XG5cbiAgICBtb3ZlWDogYW55ID0gMDtcbiAgICBtb3ZlWTogYW55ID0gMDtcbiAgICBpbml0aWFsTW92ZVg6IGFueSA9IDA7XG4gICAgaW5pdGlhbE1vdmVZOiBhbnkgPSAwO1xuXG4gICAgbW92ZVhDOiBhbnk7XG4gICAgbW92ZVlDOiBhbnk7XG5cbiAgICBkaXN0YW5jZTogYW55O1xuICAgIGluaXRpYWxEaXN0YW5jZTogYW55O1xuXG4gICAgaXNOZXh0SW1hZ2VMb2FkZWQ6IGFueSA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBpc0xhc3Q6IGFueTtcbiAgICBASW5wdXQoKSBpc0ZpcnN0OiBhbnk7XG5cbiAgICBAT3V0cHV0KCkgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgICBcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpe1xuICAgICAgICB0aGlzLmVsZW0gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcbiAgICB0b3VjaHN0YXJ0SGFuZGxlcihldmVudCkge1xuICAgICAgICB0aGlzLmVsZW0uc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gJzAgMCc7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigndG91Y2htb3ZlJywgWyckZXZlbnQnXSlcbiAgICB0b3VjaG1vdmVIYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgIGxldCB0b3VjaGVzID0gZXZlbnQudG91Y2hlcztcblxuICAgICAgICBpZiAodG91Y2hlcy5sZW5ndGggPT09IDEgJiYgdGhpcy5zY2FsZSA9PT0gMSAmJiAhdGhpcy5ldmVudFR5cGUgfHwgdGhpcy5ldmVudFR5cGUgPT0gJ3N3aXBlJyl7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNOZXh0SW1hZ2VMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5ldmVudFR5cGUpe1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRYID0gZXZlbnQudG91Y2hlc1swXS5wYWdlWDtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0WSA9IGV2ZW50LnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZXZlbnRUeXBlID0gJ3N3aXBlJztcblxuICAgICAgICAgICAgdGhpcy5tb3ZlWCA9IHRoaXMuaW5pdGlhbE1vdmVYICsgKGV2ZW50LnRvdWNoZXNbMF0ucGFnZVggLSB0aGlzLnN0YXJ0WCk7XG4gICAgICAgICAgICB0aGlzLm1vdmVZID0gMDtcblxuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1FbGVtKDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigndG91Y2hlbmQnLCBbJyRldmVudCddKVxuICAgIHRvdWNoZW5kSGFuZGxlcihldmVudCkge1xuICAgICAgICBsZXQgdG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XG4gICAgICAgIGxldCBpbWcgPSB0aGlzLmVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbWdcIilbMF07XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzTmV4dEltYWdlTG9hZGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLnNjYWxlIDwgMSl7XG4gICAgICAgICAgICB0aGlzLnNjYWxlID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3ZlWSA+IDApe1xuICAgICAgICAgICAgdGhpcy5tb3ZlWSA9IDA7XG4gICAgICAgIH0gXG5cbiAgICAgICAgaWYgKHRoaXMubW92ZVggPiAxMDApe1xuICAgICAgICAgICAgdGhpcy5zbGlkZSgncHJldicpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW92ZVggPCAtMTAwKXtcbiAgICAgICAgICAgIHRoaXMuc2xpZGUoJ25leHQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW92ZVggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbml0aWFsU2NhbGUgPSB0aGlzLnNjYWxlO1xuICAgICAgICB0aGlzLmluaXRpYWxNb3ZlWCA9IHRoaXMubW92ZVg7XG4gICAgICAgIHRoaXMuaW5pdGlhbE1vdmVZID0gdGhpcy5tb3ZlWTtcblxuICAgICAgICB0aGlzLnRyYW5zZm9ybUVsZW0oMjAwKTsgXG5cbiAgICAgICAgdGhpcy5ldmVudFR5cGUgPSAndG91Y2hlbmQnOyAgICAgICAgXG4gICAgICAgIGlmICh0b3VjaGVzLmxlbmd0aCA9PSAwKXtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRUeXBlID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzbGlkZShldmVudDogYW55KXtcbiAgICAgICAgdGhpcy5vblNsaWRlKGV2ZW50KTtcblxuICAgICAgICBpZiAoZXZlbnQgPT09ICdwcmV2Jyl7XG4gICAgICAgICAgICB0aGlzLm1vdmVYID0gd2luZG93LmlubmVyV2lkdGggKyA4OyBcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRmlyc3Qpe1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZVggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudCA9PT0gJ25leHQnKXtcbiAgICAgICAgICAgIHRoaXMubW92ZVggPSAtd2luZG93LmlubmVyV2lkdGggLSA4O1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNMYXN0KXtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVYID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNOZXh0SW1hZ2VMb2FkZWQgPSBmYWxzZTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW92ZVggPSAwO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsTW92ZVggPSAwO1xuICAgICAgICAgICAgdGhpcy5pc05leHRJbWFnZUxvYWRlZCA9IHRydWU7XG4gICAgICAgIH0sIDIwMCk7XG4gICAgfVxuXG4gICAgb25TbGlkZShldmVuVHlwZTphbnkpIHtcbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdChldmVuVHlwZSk7XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtRWxlbShkdXJhdGlvbjogYW55ID0gNTApe1xuICAgICAgICBsZXQgbWF0cml4VmFsID0gJ21hdHJpeCgnKyBOdW1iZXIodGhpcy5zY2FsZSkgKycsJysgMCArJywnKyAwICsnLCcrIE51bWJlcih0aGlzLnNjYWxlKSArJywnKyBOdW1iZXIodGhpcy5tb3ZlWCkgKycsJysgTnVtYmVyKHRoaXMubW92ZVkpICsnKSc7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmVsZW0uc3R5bGUudHJhbnNpdGlvbiA9ICdhbGwgJysgZHVyYXRpb24gKydtcyc7XG4gICAgICAgIHRoaXMuZWxlbS5zdHlsZS50cmFuc2Zvcm0gPSBtYXRyaXhWYWw7XG4gICAgICAgIHRoaXMuZWxlbS5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSBtYXRyaXhWYWw7XG4gICAgfVxufSJdfQ==