使用vue实现幻灯片

本文介绍了如何在Vue.js中创建一个幻灯片组件。首先在父组件中引入并设置数据,然后详细讲解了在`slideshow.vue`子组件中的具体实现步骤,包括样式和逻辑的编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在父组件中

<slide-show :slides="slides"></slide-show>

import SlideShow from '@/components/SlideShow'

export default {
  components: {
    SlideShow,
  },

2、在slideshow.vue中

<template>
	<div class="slide-show" @mouseover="clearInv" @mouseout="runInv">   // 当鼠标移入的时候清除,移出的时候
		<div class="slide-img">
			<a href="slides[nowIndex].href">
			<transition name="slide-trans">                     // 使用动画
		          <img v-if="isShow" :src="slides[nowIndex].src">
		        </transition>
		        <transition name="slide-trans-old">
		          <img v-if="!isShow" :src="slides[nowIndex].src">
		        </transition>
			</a>
		</div>
		<h2>{{ slides[nowIndex].title }}</h2>
		<ul class="slide-pages">
			<li @click="goto(prevIndex)"><</li>
			<li v-for="(item, index) in slides" @click="goto(index)">
				<a :class="{ on: index === nowIndex}">
					{{ index + 1 }}
				</a>
			</li>
			<li @click="goto(nextIndex)">></li>
		</ul>
	</div>
</template>

<script>
	export default {
		props: {
			slides: {                     // 获取父组件的属性
				type: Array,
				default: []
			},
			inv: {
				type: Number,
				default: 1000
			}
		},
		data () {
			return {
				nowIndex: 0,
				isShow: true
			}
		},
		computed: {
			prevIndex () {             // 使用计算属性,
				if (this.nowIndex === 0) {
					return this.slides.length - 1
				} else {
					return this.nowIndex - 1
				}
			},
			nextIndex () {
				if (this.nowIndex === this.slides.length - 1) {
					return 0
				} else {
					return this.nowIndex + 1
				}
			}
		},
		methods: {
			goto (index) {
				this.isShow = false,
				setTimeout(() => {             // 过10毫秒后,
					this.isShow = true,
					this.nowIndex = index
				}, 10)
				
			},
			runInv () {                 // 设置定时器
				this.timer = setInterval(() => {
					this.goto(this.nextIndex)
				}, this.inv)
			},
			clearInv () {
				clearInterval(this.timer)
			}
		},
		mounted () {          // 加载完后执行
			this.runInv()
		}
	}
</script>

<style scoped>
.slide-trans-enter-active {
  transition: all .5s;
}
.slide-trans-enter {
  transform: translateX(900px);
}
.slide-trans-old-leave-active {
  transition: all .5s;
  transform: translateX(-900px);
}
.slide-show {
  position: relative;
  margin: 15px 15px 15px 0;
  width: 900px;
  height: 500px;
  overflow: hidden;
}
.slide-show h2 {
  position: absolute;
  width: 100%;
  height: 100%;
  color: #fff;
  background: #000;
  opacity: .5;
  bottom: 0;
  height: 30px;
  text-align: left;
  padding-left: 15px;
}
.slide-img {
  width: 100%;
}
.slide-img img {
  width: 100%;
  position: absolute;
  top: 0;
}
.slide-pages {
  position: absolute;
  bottom: 10px;
  right: 15px;
}
.slide-pages li {
  display: inline-block;
  padding: 0 10px;
  cursor: pointer;
  color: #fff;
}
.slide-pages li .on {
  text-decoration: underline;
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值