I've set up a carousel using bootstrap-vue. I used a for loop and an array of objects to dynamically create the component. In each of the slide, I will include a text as well as a background image. I was able to render the texts dynamically. However, the background image only appeared at the first slide. For subsequent slides, the image will not be rendered anymore. What seems to be the problem? Below are my codes and a screenshot of the result
Update: I am still not able to get this to work. Can anyone help me?
<template>
<div>
<b-carousel
id="carousel-1"
v-model="slide"
:interval="4000"
controls
indicators
background="#ababab"
style="text-shadow: 1px 1px 2px #333;"
@sliding-start="onSlideStart"
@sliding-end="onSlideEnd"
>
<!-- Text slides with image -->
<b-carousel-slide
v-for="item in carouselItems"
:key="item.id"
:text="item.text"
:style="{ 'background-image' : 'url(\'' + item.image + '\')' }"
></b-carousel-slide>
</b-carousel>
<ProductList/>
</div>
</template>
<script>
// 1. Loading images asychronously later on from S3
// https://stackoverflow.com/questions/50659676/how-to-load-image-src-url-in-vuejs-asyncronously
import ProductList from "@/components/product/ProductList.vue";
export default {
components: {
ProductList
},
data() {
return {
carouselItems: [
{
id: 1,
image: "https://source.unsplash.com/LAaSoL0LrYs/1920x1080",
text: "Nulla vitae elit libero, a pharetra augue mollis interdum. (1)"
},
{
id: 2,
image: "https://source.unsplash.com/LAaSoL0LrYs/1920x1080",
text: "Nulla vitae elit libero, a pharetra augue mollis interdum. (2)"
},
{
id: 3,
image: "https://source.unsplash.com/LAaSoL0LrYs/1920x1080",
text: "Nulla vitae elit libero, a pharetra augue mollis interdum. (3)"
}
],
slide: 0,
sliding: null
};
},
methods: {
onSlideStart(slide) {
this.sliding = true;
},
onSlideEnd(slide) {
this.sliding = false;
}
}
};
</script>
<style scoped>
.carousel-item {
height: 100vh;
min-height: 350px;
background: no-repeat center center scroll;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
}
</style>
Carousel when it was first rendered
As you use bootstrap-vue library, you can use "caption" attribute instead of "text" and "img-src" instead of style:background. Because
b-carousel-slide
component override style tag.If you want to have a custom style for your crousal you can set an additional class attr to your tag like:
But pay attention that the carousal you are using is either responsive and also full-width. I think your problem is something else.