I am using Angular 2 and I need to detect if an image has loaded in an image tag.
Is there an event for that?
Something like this :
<img [src]="imagesource" [loaded]="dosomething()">
<img [src]="imagesource" (load)="dosomething()">
Observable.fromEvent(elementReference, 'load') does not work the same way? Also, any hint on why dosomething() gets called more than once each time src changes? Thanksdosomething() is called twice is a Chrome issue. I investigated and commented on a similar question but don't remember details.Observable.fromEvent(imgElementReference, 'load') vs <img (load)="...">?Observable.fromEvent(elementReference, 'load'). How does it not work the same way?Extending the first answer to examine the image that just loaded.
<img [src]="imagesource" (load)="onImageLoad($event)">
onImageLoad(evt) {
if (evt && evt.target) {
const width = evt.target.naturalWidth;
const height = evt.target.naturalHeight;
const portrait = height > width ? true : false;
console.log(width, height, 'portrait: ', portrait);
}
}
However, I saw that chrome sends the event twice, with different sizes! I was able to detect the correct size from the event where evt.scrElement.x and y was zero. But this might not always be the case and I'm not sure why there are two events?
onImageLoad(evt) {
if (evt && evt.target) {
const x = evt.srcElement.x;
const y = evt.srcElement.y;
if ((x === 0 ) && (y === 0)) {
const width = evt.srcElement.width;
const height = evt.srcElement.height;
portrait = height > width ? true : false;
console.log('Loaded: ', width, height, 'portrait: ', portrait);
}
}
}
on, e.g. (click) vs onclick, (keydown) vs onkeydown, etc. -see that in javascript not enclosed by ( ). When you use fromEvent rxjs operator, HostListener or addEventListener you always use the "not on" way. (the event name are click, keydown, load...)