ngx-crystal-gallery
Version:
Responsive gallery with support for masonry layout and lightbox.
189 lines (188 loc) • 15.5 kB
JavaScript
/**
* @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==