(function(){ // 全局图像缓存对象 存放已加载的图像资源 window.YooneSnowImageCache = window.YooneSnowImageCache || {}; // 获取或加载图像 根据 URL 返回图像对象和加载状态 window.YooneSnowGetOrLoadImage = function(imageUrl){ // 条件判断 如果未提供 URL 则返回空 if (!imageUrl || typeof imageUrl !== 'string'){ return { img: null, ready: false }; } const existing = window.YooneSnowImageCache[imageUrl]; // 条件判断 如果已存在缓存则直接返回 if (existing && existing.ready){ return existing; } if (existing && !existing.ready){ // 条件判断 如果正在加载则返回当前状态 return existing; } // 创建新的图像对象 并开始加载 const img = new Image(); const record = { img: img, ready: false }; window.YooneSnowImageCache[imageUrl] = record; img.onload = function(){ var decoder = img.decode && typeof img.decode === 'function' ? img.decode() : null; if (decoder && typeof decoder.then === 'function'){ decoder.then(function(){ record.ready = true; }).catch(function(){ record.ready = true; }); } else { record.ready = true; } }; img.onerror = function(){ // 加载失败 从缓存移除避免重复错误 delete window.YooneSnowImageCache[imageUrl]; }; img.src = imageUrl; return record; }; // 居中绘制图像 根据目标中心点和宽高进行缩放绘制 window.YooneSnowDrawCenteredImage = function(context, img, centerX, centerY, width, height){ // 条件判断 如果图像不存在则不绘制 if (!img) { return; } const drawX = centerX - width / 2; const drawY = centerY - height / 2; context.drawImage(img, drawX, drawY, width, height); }; })();