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'ssrc
property. It's also not solved my problem, the images will be loaded in real-time after the click when the newDIV
will 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!