ngx-crystal-gallery
Version:
Responsive gallery with support for masonry layout and lightbox.
214 lines (213 loc) • 16.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Directive, ElementRef, HostListener, Input, Output, EventEmitter } from '@angular/core';
var PinchDirective = /** @class */ (function () {
function PinchDirective(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 {?}
*/
PinchDirective.prototype.touchstartHandler = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.elem.style.transformOrigin = '0 0';
};
/**
* @param {?} event
* @return {?}
*/
PinchDirective.prototype.touchmoveHandler = /**
* @param {?} event
* @return {?}
*/
function (event) {
/** @type {?} */
var 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 {?}
*/
PinchDirective.prototype.touchendHandler = /**
* @param {?} event
* @return {?}
*/
function (event) {
/** @type {?} */
var touches = event.touches;
/** @type {?} */
var 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 {?}
*/
PinchDirective.prototype.slide = /**
* @param {?} event
* @return {?}
*/
function (event) {
var _this = this;
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(function () {
_this.moveX = 0;
_this.initialMoveX = 0;
_this.isNextImageLoaded = true;
}, 200);
};
/**
* @param {?} evenType
* @return {?}
*/
PinchDirective.prototype.onSlide = /**
* @param {?} evenType
* @return {?}
*/
function (evenType) {
this.events.emit(evenType);
};
/**
* @param {?=} duration
* @return {?}
*/
PinchDirective.prototype.transformElem = /**
* @param {?=} duration
* @return {?}
*/
function (duration) {
if (duration === void 0) { duration = 50; }
/** @type {?} */
var 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 = function () { return [
{ 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'],] }]
};
return PinchDirective;
}());
export { PinchDirective };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluY2guZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWNyeXN0YWwtZ2FsbGVyeS8iLCJzb3VyY2VzIjpbImxpYi9waW5jaC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7SUFtQzdGLHdCQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO3FCQXhCN0IsQ0FBQzs0QkFDTSxDQUFDO3FCQUtSLENBQUM7cUJBQ0QsQ0FBQzs0QkFDTSxDQUFDOzRCQUNELENBQUM7aUNBUUksSUFBSTtzQkFLVixJQUFJLFlBQVksRUFBVztRQUcxQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO0tBQzdDOzs7OztJQUdELDBDQUFpQjs7OztJQURqQixVQUNrQixLQUFLO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7S0FDM0M7Ozs7O0lBR0QseUNBQWdCOzs7O0lBRGhCLFVBQ2lCLEtBQUs7O1FBQ2xCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFFNUIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLENBQUEsQ0FBQztZQUMxRixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFdkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixNQUFNLENBQUM7YUFDVjtZQUVELEVBQUUsQ0FBQyxDQUFDLENB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Q0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO0tBQy9DOztnQkExSUosU0FBUyxTQUFDO29CQUNQLFFBQVEsRUFBRSxTQUFTO2lCQUN0Qjs7OztnQkFKbUIsVUFBVTs7O3lCQThCekIsS0FBSzswQkFDTCxLQUFLO3lCQUVMLE1BQU07b0NBTU4sWUFBWSxTQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQzttQ0FLckMsWUFBWSxTQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztrQ0F5QnBDLFlBQVksU0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3lCQXJFeEM7O1NBTWEsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcGluY2hdJ1xufSlcblxuZXhwb3J0IGNsYXNzIFBpbmNoRGlyZWN0aXZle1xuXG4gICAgZWxlbTogYW55O1xuICAgIGV2ZW50VHlwZTogYW55O1xuXG4gICAgc2NhbGU6IGFueSA9IDE7XG4gICAgaW5pdGlhbFNjYWxlOiBhbnkgPSAxO1xuXG4gICAgc3RhcnRYOiBhbnk7XG4gICAgc3RhcnRZOiBhbnk7XG5cbiAgICBtb3ZlWDogYW55ID0gMDtcbiAgICBtb3ZlWTogYW55ID0gMDtcbiAgICBpbml0aWFsTW92ZVg6IGFueSA9IDA7XG4gICAgaW5pdGlhbE1vdmVZOiBhbnkgPSAwO1xuXG4gICAgbW92ZVhDOiBhbnk7XG4gICAgbW92ZVlDOiBhbnk7XG5cbiAgICBkaXN0YW5jZTogYW55O1xuICAgIGluaXRpYWxEaXN0YW5jZTogYW55O1xuXG4gICAgaXNOZXh0SW1hZ2VMb2FkZWQ6IGFueSA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBpc0xhc3Q6IGFueTtcbiAgICBASW5wdXQoKSBpc0ZpcnN0OiBhbnk7XG5cbiAgICBAT3V0cHV0KCkgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgICBcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpe1xuICAgICAgICB0aGlzLmVsZW0gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcbiAgICB0b3VjaHN0YXJ0SGFuZGxlcihldmVudCkge1xuICAgICAgICB0aGlzLmVsZW0uc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gJzAgMCc7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigndG91Y2htb3ZlJywgWyckZXZlbnQnXSlcbiAgICB0b3VjaG1vdmVIYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgIGxldCB0b3VjaGVzID0gZXZlbnQudG91Y2hlcztcblxuICAgICAgICBpZiAodG91Y2hlcy5sZW5ndGggPT09IDEgJiYgdGhpcy5zY2FsZSA9PT0gMSAmJiAhdGhpcy5ldmVudFR5cGUgfHwgdGhpcy5ldmVudFR5cGUgPT0gJ3N3aXBlJyl7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNOZXh0SW1hZ2VMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5ldmVudFR5cGUpe1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRYID0gZXZlbnQudG91Y2hlc1swXS5wYWdlWDtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0WSA9IGV2ZW50LnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZXZlbnRUeXBlID0gJ3N3aXBlJztcblxuICAgICAgICAgICAgdGhpcy5tb3ZlWCA9IHRoaXMuaW5pdGlhbE1vdmVYICsgKGV2ZW50LnRvdWNoZXNbMF0ucGFnZVggLSB0aGlzLnN0YXJ0WCk7XG4gICAgICAgICAgICB0aGlzLm1vdmVZID0gMDtcblxuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1FbGVtKDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigndG91Y2hlbmQnLCBbJyRldmVudCddKVxuICAgIHRvdWNoZW5kSGFuZGxlcihldmVudCkge1xuICAgICAgICBsZXQgdG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XG4gICAgICAgIGxldCBpbWcgPSB0aGlzLmVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbWdcIilbMF07XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzTmV4dEltYWdlTG9hZGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLnNjYWxlIDwgMSl7XG4gICAgICAgICAgICB0aGlzLnNjYWxlID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3ZlWSA+IDApe1xuICAgICAgICAgICAgdGhpcy5tb3ZlWSA9IDA7XG4gICAgICAgIH0gXG5cbiAgICAgICAgaWYgKHRoaXMubW92ZVggPiAxMDApe1xuICAgICAgICAgICAgdGhpcy5zbGlkZSgncHJldicpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW92ZVggPCAtMTAwKXtcbiAgICAgICAgICAgIHRoaXMuc2xpZGUoJ25leHQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW92ZVggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbml0aWFsU2NhbGUgPSB0aGlzLnNjYWxlO1xuICAgICAgICB0aGlzLmluaXRpYWxNb3ZlWCA9IHRoaXMubW92ZVg7XG4gICAgICAgIHRoaXMuaW5pdGlhbE1vdmVZID0gdGhpcy5tb3ZlWTtcblxuICAgICAgICB0aGlzLnRyYW5zZm9ybUVsZW0oMjAwKTsgXG5cbiAgICAgICAgdGhpcy5ldmVudFR5cGUgPSAndG91Y2hlbmQnOyAgICAgICAgXG4gICAgICAgIGlmICh0b3VjaGVzLmxlbmd0aCA9PSAwKXtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRUeXBlID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzbGlkZShldmVudDogYW55KXtcbiAgICAgICAgdGhpcy5vblNsaWRlKGV2ZW50KTtcblxuICAgICAgICBpZiAoZXZlbnQgPT09ICdwcmV2Jyl7XG4gICAgICAgICAgICB0aGlzLm1vdmVYID0gd2luZG93LmlubmVyV2lkdGggKyA4OyBcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRmlyc3Qpe1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZVggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudCA9PT0gJ25leHQnKXtcbiAgICAgICAgICAgIHRoaXMubW92ZVggPSAtd2luZG93LmlubmVyV2lkdGggLSA4O1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNMYXN0KXtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVYID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNOZXh0SW1hZ2VMb2FkZWQgPSBmYWxzZTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW92ZVggPSAwO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsTW92ZVggPSAwO1xuICAgICAgICAgICAgdGhpcy5pc05leHRJbWFnZUxvYWRlZCA9IHRydWU7XG4gICAgICAgIH0sIDIwMCk7XG4gICAgfVxuXG4gICAgb25TbGlkZShldmVuVHlwZTphbnkpIHtcbiAgICAgICAgdGhpcy5ldmVudHMuZW1pdChldmVuVHlwZSk7XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtRWxlbShkdXJhdGlvbjogYW55ID0gNTApe1xuICAgICAgICBsZXQgbWF0cml4VmFsID0gJ21hdHJpeCgnKyBOdW1iZXIodGhpcy5zY2FsZSkgKycsJysgMCArJywnKyAwICsnLCcrIE51bWJlcih0aGlzLnNjYWxlKSArJywnKyBOdW1iZXIodGhpcy5tb3ZlWCkgKycsJysgTnVtYmVyKHRoaXMubW92ZVkpICsnKSc7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmVsZW0uc3R5bGUudHJhbnNpdGlvbiA9ICdhbGwgJysgZHVyYXRpb24gKydtcyc7XG4gICAgICAgIHRoaXMuZWxlbS5zdHlsZS50cmFuc2Zvcm0gPSBtYXRyaXhWYWw7XG4gICAgICAgIHRoaXMuZWxlbS5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSBtYXRyaXhWYWw7XG4gICAgfVxufSJdfQ==