Vue
HTML
<div id="app">
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/9c/Lagopus_muta_japonica_Mount_Tsubakuro.jpg/320px-Lagopus_muta_japonica_Mount_Tsubakuro.jpg" class="slideshow">
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Pair_of_mandarin_ducks.jpg/320px-Pair_of_mandarin_ducks.jpg" class="slideshow fadeout">
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/7c/Vicu%C3%B1a_-_Chimborazo%2C_Ecuador.jpg/320px-Vicu%C3%B1a_-_Chimborazo%2C_Ecuador.jpg" class="slideshow fadeout">
</div>
CSS
.fadein {
opacity: 1;
transition: opacity 0.5s;
}
.fadeout {
opacity: 0;
transition: opacity 0.5s;
}
.slideshow {
position: absolute;
}
Vue
new Vue({
el: "#app",
data: {
index: 0,
},
mounted() {
const images = document.getElementsByClassName('slideshow');
this.slideshow(images);
setInterval(() => {
this.index = this.index < images.length - 1 ? this.index + 1 : 0;
this.slideshow(images);
}, 3000);
},
methods: {
slideshow(images) {
const current = images[this.index];
const prev = images[this.index - 1] ? images[this.index - 1] : images[images.length - 1];
current.classList.add('fadein');
current.classList.remove('fadeout');
prev.classList.remove('fadein');
prev.classList.add('fadeout');
}
}
})