96 lines
1.9 KiB
JavaScript
96 lines
1.9 KiB
JavaScript
let incId = 1;
|
|
|
|
const noop = function () { };
|
|
|
|
class GImage {
|
|
|
|
static GBridge = null;
|
|
|
|
constructor() {
|
|
this._id = incId++;
|
|
this._width = 0;
|
|
this._height = 0;
|
|
this._src = undefined;
|
|
this._onload = noop;
|
|
this._onerror = noop;
|
|
this.complete = false;
|
|
}
|
|
|
|
get width() {
|
|
return this._width;
|
|
}
|
|
set width(v) {
|
|
this._width = v;
|
|
}
|
|
|
|
get height() {
|
|
return this._height;
|
|
}
|
|
|
|
set height(v) {
|
|
this._height = v;
|
|
}
|
|
|
|
get src() {
|
|
return this._src;
|
|
}
|
|
|
|
set src(v) {
|
|
|
|
if (v.startsWith('//')) {
|
|
v = 'http:' + v;
|
|
}
|
|
|
|
this._src = v;
|
|
|
|
GImage.GBridge.perloadImage([this._src, this._id], (data) => {
|
|
if (typeof data === 'string') {
|
|
data = JSON.parse(data);
|
|
}
|
|
if (data.error) {
|
|
var evt = { type: 'error', target: this };
|
|
this.onerror(evt);
|
|
} else {
|
|
this.complete = true;
|
|
this.width = typeof data.width === 'number' ? data.width : 0;
|
|
this.height = typeof data.height === 'number' ? data.height : 0;
|
|
var evt = { type: 'load', target: this };
|
|
this.onload(evt);
|
|
}
|
|
});
|
|
}
|
|
|
|
addEventListener(name, listener) {
|
|
if (name === 'load') {
|
|
this.onload = listener;
|
|
} else if (name === 'error') {
|
|
this.onerror = listener;
|
|
}
|
|
}
|
|
|
|
removeEventListener(name, listener) {
|
|
if (name === 'load') {
|
|
this.onload = noop;
|
|
} else if (name === 'error') {
|
|
this.onerror = noop;
|
|
}
|
|
}
|
|
|
|
get onload() {
|
|
return this._onload;
|
|
}
|
|
|
|
set onload(v) {
|
|
this._onload = v;
|
|
}
|
|
|
|
get onerror() {
|
|
return this._onerror;
|
|
}
|
|
|
|
set onerror(v) {
|
|
this._onerror = v;
|
|
}
|
|
}
|
|
|
|
export default GImage; |