我有一个使用Vue.Js(使用webpack)的小应用程序。我有一个过渡部分,当用户单击按钮时,内容会发生变化。它是一个简单的DIV
元素,其中包含一个IMG
子元素。我的问题是,当用户单击按钮时,下一个图像将实时加载,并且速度很慢,因此我需要预加载这些图像。
我尝试了不同的方法,但无法使图像被预加载。问题在于:
只有第一张图片是DOM的一部分,在页面显示时,因此其他图片不会被加载。好吧,这是正常行为。
我无法通过使用图像数组的简单for循环(JavaScript预加载图像)来预加载图像,因为图像将由唯一的查询字符串请求(
),因此预加载的图像名称将与请求的图像名称不匹配。
我尝试使用
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,也许我的做法不太好。请告诉我什么是好的做法!
document.createElement('img').setAttribute('src', '/static/myimage');
,但本质上是一样的,两者都可以工作。 - Danielnew Image()
。 - samlandfried