diff --git a/src/utils/imagePreloader.js b/src/utils/imagePreloader.js new file mode 100644 index 0000000..fb770e1 --- /dev/null +++ b/src/utils/imagePreloader.js @@ -0,0 +1,55 @@ +// src/utils/imagePreloader.js + +/** + * 简单图片预加载函数 + * @param {Array|string|Object} sources - 图片源(数组、字符串或对象) + */ +export const preloadImages = (sources) => { + let urls = [] + + if (Array.isArray(sources)) { + urls = sources + } else if (typeof sources === 'string') { + urls = [sources] + } else if (typeof sources === 'object') { + urls = Object.values(sources) + } + + urls.forEach((url) => { + const img = new Image() + img.src = url + }) + + console.log(`开始预加载 ${urls.length} 张图片`) +} + +/** + * 带进度监控的图片预加载函数 + * @param {Array|string|Object} sources - 图片源 + * @param {Function} onProgress - 进度回调 + */ +export const preloadImagesWithProgress = (sources, onProgress) => { + let urls = [] + + if (Array.isArray(sources)) { + urls = sources + } else if (typeof sources === 'string') { + urls = [sources] + } else if (typeof sources === 'object') { + urls = Object.values(sources) + } + + let loaded = 0 + const total = urls.length + + urls.forEach((url) => { + const img = new Image() + img.onload = img.onerror = () => { + loaded++ + if (onProgress) { + onProgress({ loaded, total, url }) + } + } + img.src = url + }) +}