【发布时间】:2016-08-31 19:36:50
【问题描述】:
我正在使用Angular 2,我需要检测图像是否已加载到图像标签中。
有活动吗?
类似这样的:
<img [src]="imagesource" [loaded]="dosomething()">
【问题讨论】:
标签: angular
我正在使用Angular 2,我需要检测图像是否已加载到图像标签中。
有活动吗?
类似这样的:
<img [src]="imagesource" [loaded]="dosomething()">
【问题讨论】:
标签: angular
<img [src]="imagesource" (load)="dosomething()">
【讨论】:
Observable.fromEvent(elementReference, 'load') 的工作方式不一样吗?另外,关于为什么每次src 更改时dosomething() 被多次调用的任何提示?谢谢
dosomething() 被调用两次是 Chrome 的问题。我调查并评论了一个类似的问题,但不记得细节。
Observable.fromEvent(imgElementReference, 'load') 和 <img (load)="..."> 有什么经验吗?
Observable.fromEvent(elementReference, 'load')。为什么它的工作方式不一样?
扩展第一个答案以检查刚刚加载的图像。
<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);
}
}
但是,我看到 chrome 发送了两次事件,大小不同!我能够从 evt.scrElement.x 和 y 为零的事件中检测到正确的大小。但情况可能并非总是如此,我不确定为什么会有两个事件?
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);
}
}
}
【讨论】: