【发布时间】:2018-06-13 21:34:27
【问题描述】:
我有一个使用 Vue.Js(带有 webpack)的小应用程序。我有一个过渡部分。当用户单击按钮时,内容将发生变化。这是一个简单的DIV 元素,带有一个IMG 子元素。我的问题是当用户点击按钮时,下一张图片会实时加载,速度很慢,所以我需要预加载这些图片。
我尝试了不同的方法,但无法预加载图像。问题:
只有第一个图像是 DOM 的一部分,当页面显示时,不会加载其他图像。好的,这是正常行为。
我无法通过对图像数组 (Preloading images with JavaScript) 使用简单的 for 循环来预加载图像,因为每个请求都会通过唯一的查询字符串 () 请求图像。因此预加载的图像名称将与请求的不匹配。
我尝试使用
require()加载图像并将其绑定到IMG 标记的src属性。也没有解决我的问题,当新的DIV插入DOM时,图片会在点击后实时加载。
我的简化单文件组件 (.vue) 看起来像这样:
<template>
<!-- [FIRST] -->
<div v-if="contentId == 0">
<transition
enter-active-class="animated fadeIn"
leave-active-class="animated fadeOut"
mode="out-in">
<img :src="images.firstScreenShot" key="firstImage">
</transition>
</div>
<!-- [/FIRST] -->
<!-- [SECOND] -->
<div v-else-if="contentId == 1">
<transition
enter-active-class="animated fadeIn"
leave-active-class="animated fadeOut"
mode="out-in">
<img :src="images.secondScreenShot" key="secondImage">
</transition>
</div>
<!-- [/SECOND] -->
</template>
<script>
export default {
data() {
return {
contentId: 0,
images: {
firstScreenShot: require('./assets/first-screen-shot.png'),
secondScreenShot: require('./assets/second-screen-shot.png'),
}
}
}
}
</script>
我是 Vue.js 的新手,可能我的方法不太好。请告诉我什么是好的方法!
【问题讨论】:
标签: javascript vue.js preload