feat:web support image resource
This commit is contained in:
		| @@ -1,5 +1,6 @@ | ||||
| import { DoricViewNode, LEFT, RIGHT, CENTER_X, CENTER_Y, TOP, BOTTOM, toPixelString } from './DoricViewNode' | ||||
| import { toRGBAString } from '../utils/color' | ||||
| import { resourceManager } from '../DoricRegistry' | ||||
|  | ||||
| enum ScaleType { | ||||
|     ScaleToFill = 0, | ||||
| @@ -34,6 +35,13 @@ export class DoricImageNode extends DoricViewNode { | ||||
|  | ||||
|     blendProps(v: HTMLImageElement, propName: string, prop: any) { | ||||
|         switch (propName) { | ||||
|             case 'image': | ||||
|                 resourceManager.load(prop)?.then(e => { | ||||
|                     this.loadIntoTarget(v, e) | ||||
|                 }).catch(e => { | ||||
|                     this.loadIntoTarget(v, '') | ||||
|                 }) | ||||
|                 break | ||||
|             case 'imageUrl': | ||||
|             case 'imageBase64': | ||||
|                 this.loadIntoTarget(v, prop) | ||||
| @@ -75,34 +83,36 @@ export class DoricImageNode extends DoricViewNode { | ||||
|     } | ||||
|  | ||||
|     private loadIntoTarget(v: HTMLImageElement, src: any) { | ||||
|         let placeHolderSrc = '' | ||||
|         v.style.removeProperty('background-color') | ||||
|         if (this.placeHolderImage) { | ||||
|             placeHolderSrc = v.src = this.placeHolderImage | ||||
|             v.src = this.placeHolderImage | ||||
|         } else if (this.placeHolderImageBase64) { | ||||
|             placeHolderSrc = v.src = this.placeHolderImageBase64 | ||||
|             v.src = this.placeHolderImageBase64 | ||||
|         } else if (this.placeHolderColor) { | ||||
|             v.style.backgroundColor = toRGBAString(this.placeHolderColor) | ||||
|         } | ||||
|         v.onload = () => { | ||||
|             if (this.placeHolderColor) { | ||||
|                 v.style.removeProperty('background-color') | ||||
|             } | ||||
|             if (this.onloadFuncId) { | ||||
|             v.style.removeProperty('background-color') | ||||
|             if (v.src === src && this.onloadFuncId) { | ||||
|                 this.callJSResponse(this.onloadFuncId, { | ||||
|                     width: v.width, | ||||
|                     height: v.height, | ||||
|                     width: v.naturalWidth, | ||||
|                     height: v.naturalHeight, | ||||
|                 }) | ||||
|             } | ||||
|         } | ||||
|         v.onerror = () => { | ||||
|             v.style.removeProperty('background-color') | ||||
|             const error = this.getError(v.offsetWidth, v.offsetHeight) | ||||
|             if (!error) return | ||||
|             const same = src === error | ||||
|             const srcLoadError = v.src === src | ||||
|             const srcLoadError = v.src.length === 0 || v.src === src | ||||
|             if (same || !srcLoadError) return | ||||
|             v.src = error | ||||
|             if (this.onloadFuncId) { | ||||
|                 this.callJSResponse(this.onloadFuncId) | ||||
|             } | ||||
|         } | ||||
|         setTimeout(() => { | ||||
|         Promise.resolve().then(e => { | ||||
|             v.src = src | ||||
|         }) | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user