使用 Javascript 和 Webpack 加载图像数组?
Load array of images with Javascript & Webpack?
嗨,互联网的友好帮手,
我在编写代码的网站上遇到图像加载性能问题。我只使用 vanilla Javascript & Webpack.
想法很简单,我正在加载 4 个数组,每个数组包含 50-100 张图像,每个数组是 5Mo。
这些图像在滚动时发生变化以创建动画感觉(例如 apple airpods pro 网站 -> apple.com/airpods-pro)
下面是我加载这些图片的方式:
let homeImages = []
let aboutImages = []
let teamImages = []
let clientsImages = []
function importAll(r, array) {
array.push(r.keys().map(r))
}
function createImagesArrays() {
importAll(require.context('../assets/images/home/', false, /\.(png|jpe?g|svg)$/), homeImages)
importAll(require.context('../assets/images/about/', false, /\.(png|jpe?g|svg)$/), aboutImages)
importAll(require.context('../assets/images/team/', false, /\.(png|jpe?g|svg)$/), teamImages)
importAll(require.context('../assets/images/clients/', false, /\.(png|jpe?g|svg)$/), clientsImages)
}
它们加载后,我只需在滚动计数器增加时选择它们,并将静态固定背景的来源设置为当前索引。
在本地环境下效果很好,但是当涉及到 3G 边缘连接时(是的,在法国我们仍然有一些用户被迫使用边缘连接),图像加载速度不够快。
有没有一种在用户进入网站之前加载它们的聪明方法?因为我没有直接在 html 中使用它们,所以我不知道如何“延迟加载”它们。
提前致谢=)
好的,
我发现我只是在数组中堆叠路径,所以正确的导入函数是:
importAll(r, array) {
const allImages = r.keys().map(r)
allImages.forEach(src => {
const image = new Image()
image.src = src
array.push(image)
})
}
这样,浏览器就会正确加载每张图片。
嗨,互联网的友好帮手,
我在编写代码的网站上遇到图像加载性能问题。我只使用 vanilla Javascript & Webpack.
想法很简单,我正在加载 4 个数组,每个数组包含 50-100 张图像,每个数组是 5Mo。 这些图像在滚动时发生变化以创建动画感觉(例如 apple airpods pro 网站 -> apple.com/airpods-pro)
下面是我加载这些图片的方式:
let homeImages = []
let aboutImages = []
let teamImages = []
let clientsImages = []
function importAll(r, array) {
array.push(r.keys().map(r))
}
function createImagesArrays() {
importAll(require.context('../assets/images/home/', false, /\.(png|jpe?g|svg)$/), homeImages)
importAll(require.context('../assets/images/about/', false, /\.(png|jpe?g|svg)$/), aboutImages)
importAll(require.context('../assets/images/team/', false, /\.(png|jpe?g|svg)$/), teamImages)
importAll(require.context('../assets/images/clients/', false, /\.(png|jpe?g|svg)$/), clientsImages)
}
它们加载后,我只需在滚动计数器增加时选择它们,并将静态固定背景的来源设置为当前索引。
在本地环境下效果很好,但是当涉及到 3G 边缘连接时(是的,在法国我们仍然有一些用户被迫使用边缘连接),图像加载速度不够快。
有没有一种在用户进入网站之前加载它们的聪明方法?因为我没有直接在 html 中使用它们,所以我不知道如何“延迟加载”它们。
提前致谢=)
好的,
我发现我只是在数组中堆叠路径,所以正确的导入函数是:
importAll(r, array) {
const allImages = r.keys().map(r)
allImages.forEach(src => {
const image = new Image()
image.src = src
array.push(image)
})
}
这样,浏览器就会正确加载每张图片。