import {AfterViewInit, Component, ElementRef, HostListener, Input, OnInit, ViewChild} from '@angular/core'; @Component({ selector: 'app-image-popup-dialog', templateUrl: './image-popup-dialog.component.html', styleUrls: ['./image-popup-dialog.component.scss'] }) export class ImagePopupDialogComponent implements OnInit{ @Input() url = ''; @Input() title = 'Image'; @ViewChild('content', { read: ElementRef }) img: ElementRef; public opened = false; public imgWidthPercent = 1; public iWidth = 100; public imgOriginalWidth = 0; public imgOriginalHeight = 0; public imageLoaded = false; public scrHeight = 0; public scrWidth = 0; public dialogWidth = 0 ; public margin = 32; // dialog margin; constructor() { } ngOnInit(): void { this.getScreenSize(); this.initDialogWidth(); } @HostListener('window:resize', ['$event']) getScreenSize(event?): void { this.scrHeight = window.innerHeight; this.scrWidth = window.innerWidth; this.dialogWidth = 200; // this.scrWidth; // console.log(this.scrHeight, this.scrWidth); // console.log(this.scrHeight, this.scrWidth); } public showImg(url: string, title?: string): void { this.initDialogWidth(); this.title = title || 'Image'; const ts = Date.now(); this.url = url + '?date=' + ts; this.opened = true; } private initDialogWidth(): void { this.imageLoaded = false; this.dialogWidth = 200; this.iWidth = this.dialogWidth - this.margin; } public close(status: string): void { this.opened = false; } public zoom(diff: number): void { this.imgWidthPercent += diff; if (this.imgWidthPercent < 0.05) { this.imgWidthPercent = 0.05; } if (this.imgWidthPercent > 3){ this.imgWidthPercent = 3; } this.resizeWindow(); } public originalSize(): void { this.imgWidthPercent = 1; this.resizeWindow(); } private resizeWindow(): void { this.iWidth = this.imgOriginalWidth * this.imgWidthPercent; const margin = this.margin; // the default dialog padding if (this.iWidth + margin <= this.scrWidth) { this.dialogWidth = this.iWidth + margin; }else{ this.dialogWidth = this.scrWidth; } // console.log(this.img.nativeElement.naturalWidth, this.img.nativeElement.naturalHeight, // this.img.nativeElement.width, this.img.nativeElement.height, this.iWidth, this.imgWidthPercent); } public onLoad(): void { this.imageLoaded = true; this.imgOriginalWidth = this.img.nativeElement.naturalWidth; this.imgOriginalHeight = this.img.nativeElement.naturalHeight; if ( this.imgOriginalWidth > this.scrWidth) { this.iWidth = this.scrWidth - this.margin; }else{ this.iWidth = this.imgOriginalWidth; } this.imgWidthPercent = this.iWidth / this.imgOriginalWidth; this.resizeWindow(); } }