45 lines
1.6 KiB
JavaScript
45 lines
1.6 KiB
JavaScript
(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(){
|
|
// 加载成功 标记为可用
|
|
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);
|
|
};
|
|
})();
|