UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

52 lines (51 loc) 1.73 kB
import LRUCache from "../../core/LRU.mjs"; import { platformApi } from "../../core/platform.mjs"; var globalImageCache = new LRUCache(50); function findExistImage(newImageOrSrc) { if (typeof newImageOrSrc === "string") { var cachedImgObj = globalImageCache.get(newImageOrSrc); return cachedImgObj && cachedImgObj.image; } else { return newImageOrSrc; } } function createOrUpdateImage(newImageOrSrc, image, hostEl, onload, cbPayload) { if (!newImageOrSrc) { return image; } else if (typeof newImageOrSrc === "string") { if (image && image.__zrImageSrc === newImageOrSrc || !hostEl) { return image; } var cachedImgObj = globalImageCache.get(newImageOrSrc); var pendingWrap = { hostEl, cb: onload, cbPayload }; if (cachedImgObj) { image = cachedImgObj.image; !isImageReady(image) && cachedImgObj.pending.push(pendingWrap); } else { image = platformApi.loadImage(newImageOrSrc, imageOnLoad, imageOnLoad); image.__zrImageSrc = newImageOrSrc; globalImageCache.put(newImageOrSrc, image.__cachedImgObj = { image, pending: [pendingWrap] }); } return image; } else { return newImageOrSrc; } } function imageOnLoad() { var cachedImgObj = this.__cachedImgObj; this.onload = this.onerror = this.__cachedImgObj = null; for (var i = 0; i < cachedImgObj.pending.length; i++) { var pendingWrap = cachedImgObj.pending[i]; var cb = pendingWrap.cb; cb && cb(this, pendingWrap.cbPayload); pendingWrap.hostEl.dirty(); } cachedImgObj.pending.length = 0; } function isImageReady(image) { return image && image.width && image.height; } export { createOrUpdateImage, findExistImage, isImageReady };