I have a small app using Vue.Js (with webpack). I have a transition section. When the user clicks to a button the content going to change. It's a simple DIV element with an IMG child element. My problem is when the user clicks the button, the next image will be loaded in real-time and it's slow, so somehow I need to preload these images.
I have tried different approaches but couldn't achive the images be preloaded. The problems:
Only the first image is the part of the DOM, when page displayed, so the other images will be not loaded. Ok, it's the normal behavior.
I couldn't preload the images by using a simple for-loop on an array of images (Preloading images with JavaScript), because images will be requested by a unique query string (
) to each request. So the preloaded image names will not match with the requested.I tried to load the images using
require()and bind it to the IMG tag'ssrcproperty. It's also not solved my problem, the images will be loaded in real-time after the click when the newDIVwill be inserted into the DOM.
My simplified single file compontent (.vue) looks something like that:
<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>
I'm new to Vue.js, maybe my approach is not good. Please let me know what is the good approach!