以下是一个简单的Vue轮播图组件的代码示例:

<template>
  <div class="carousel">
    <div class="slides">
      <div v-for="(slide, index) in slides" :key="index" :class="{ active: currentIndex === index }">
        <img :src="slide.image" :alt="slide.caption" />
        <div class="caption">
          <h3>{{ slide.caption }}</h3>
          <p>{{ slide.description }}</p>
        </div>
      </div>
    </div>
    <div class="dots">
      <span v-for="(slide, index) in slides" :key="index" :class="{ active: currentIndex === index }" @click="goToSlide(index)"></span>
    </div>
    <button class="prev" @click="prevSlide">Previous</button>
    <button class="next" @click="nextSlide">Next</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      slides: [
        {
          image: '/path/to/image1.jpg',
          caption: 'Slide 1',
          description: 'Description for Slide 1'
        },
        {
          image: '/path/to/image2.jpg',
          caption: 'Slide 2',
          description: 'Description for Slide 2'
        },
        {
          image: '/path/to/image3.jpg',
          caption: 'Slide 3',
          description: 'Description for Slide 3'
        }
      ],
      currentIndex: 0
    };
  },
  methods: {
    goToSlide(index) {
      this.currentIndex = index;
    },
    prevSlide() {
      this.currentIndex = (this.currentIndex - 1 + this.slides.length) % this.slides.length;
    },
    nextSlide() {
      this.currentIndex = (this.currentIndex + 1) % this.slides.length;
    }
  }
};
</script>

<style scoped>
.carousel {
  position: relative;
  width: 100%;
  height: 300px;
}

.slides {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

.slides > div {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  transition: opacity 0.5s ease-in-out;
}

.slides > div.active {
  opacity: 1;
}

.slides img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.caption {
  position: absolute;
  bottom: 10px;
  left: 10px;
  color: #fff;
}

.dots {
  position: absolute;
  bottom: 10px;
  left: 50%;
  transform: translateX(-50%);
}

.dots span {
  display: inline-block;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background-color: #ccc;
  margin: 0 5px;
  cursor: pointer;
}

.dots span.active {
  background-color: #000;
}

.prev,
.next {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  padding: 10px 20px;
  background-color: #000;
  color: #fff;
  border: none;
  cursor: pointer;
}

.prev {
  left: 10px;
}

.next {
  right: 10px;
}
</style>

在这个示例中,轮播图组件包含一个slides数组,其中每个对象代表一个幻灯片,包含图片路径、标题和描述。currentIndex表示当前活动幻灯片的索引。组件中的方法用于切换幻灯片。

在模板中,使用v-for指令遍历slides数组,动态渲染幻灯片的图片和标题描述。通过currentIndex和动态绑定class来控制幻灯片的显示和隐藏。使用v-for指令创建一个小圆点导航,通过点击小圆点来切换幻灯片。还有两个按钮用于切换到前一个或下一个幻灯片。

通过在style标签中添加scoped属性,可以将CSS样式限定在组件内部,避免与全局样式冲突。

这只是一个简单的轮播图组件,你可以根据需要进行修改和扩展


原文地址: http://www.cveoy.top/t/topic/hUGO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录