基于Vue.js的轮播图

利用所学Vue知识构建一个网页的轮播图
1.效果
在这里插入图片描述2.步骤
(1)构建基本html

<div id="app">
			<div class="box">
				<div class="main">
					<!--轮播图  -->
					<div class="minMain">
						<div class="item" >
							<img :src="item.imgUrl" />
						</div>
					</div>
					<!--左右两个箭头  -->
					<div class="btnMain">
						<div class="left" >
							<img src="img/ljiantou.png" />
						</div>
						<div class="right" >
							<img src="img/rjiantou.png" />
						</div>
					</div>
					<!--图下标123  -->
					<div class="pressMain">
						<span></span>
					</div>
				</div>
			</div>
</div>

(2).设置css

//父相子绝
.box {position: relative;width: 100%;height: 380px;margin: 0px auto;}//父盒子居中
.main {width: 100%;height: 380px;position: absolute;overflow: hidden;}

//左右箭头的父盒子			
.btnMain {width: 100%;height: 100%;position: absolute;}
//左右箭头
.left {position: absolute;left: 15px;top: 50%;z-index: 10;}//z-index=10为了保证箭头的显示
right {position: absolute;right: 15px;top: 50%;z-index: 10;}
//左右箭头的图片大小
.left img,.right img {width: 30px;height: 30px;}

//图片数字下标盒子
.pressMain {position: absolute;left: 51%;bottom: 10px;width: 134px;height: 24px;
margin-left: -67px;z-index: 20;}
//每个数字下标
.pressMain span {display: inline-block;margin: 2px 10px;width: 20px;height: 20px;
border-radius: 50%;color: #fff;background: paleturquoise;text-align: center;
line-height: 20px;}
//跳转到哪张图片显示哪个数字下标			
.pressMain .active {background: brown;}

//轮播图组件			
.item {list-style: none;width: 100%;height: 380px;position: absolute;
left: 0px;top: 27px;transition: all 0.3s ease;}
.item img {width: 81%;height: 100%;}

//p0为右图,p1为左图,p2为中图
.p0{transform: translate3d(0, 0, 0) scale(1);opacity: 0.8;z-index: 1;}
.p1 {transform: translate3d(25%, 0, 0) scale(1);opacity: 0.8;z-index: 2;}
.p2{transform: translate3d(10%, 0, 0) scale(1);opacity: 1;z-index: 3;}

(3).JavaScript编写(Vue模块)
(1)el选择id为app的盒子
(2)data中存放
[1]list数组:存放显示的三张图片的所在地址
同时在html中轮播图盒子minMain中补上<div class="minMain"> <div class="item" v-for="(item,index) in list" :key="index"> <img :src="item.imgUrl" /> </div> </div>
在这里插入图片描述
[2]pressList:存放数字下标是否变色
同时在html中数字下标盒子pressMain中补上<div class="pressMain"> <span v-for="(item,index) in pressList" :class="{active:item.isShow}">{{item.name}}</span> </div>
在这里插入图片描述
[3]imgindex:图片显示权限
[4]numList:存放数字下标
在这里插入图片描述
(3)钩子函数:动态滚动图片,通过p0,p1,p2进行切换

mounted: function() {
				var Item = document.getElementsByClassName('item');
				for(var i = 0; i < Item.length; i++) {
					Item[i].className = 'item ' + this.numList[i]
				}
				this.imgMove()
				this.pressList[0].isShow = true
			}

(4)方法
[1]imgMove:定时滚动图片

imgMove() {var Item = document.getElementsByClassName('item');
//每三秒滚动一次图片
this.imgTimer = setInterval(() => {this.numList.push(this.numList[0]);//实现图片的滚动
//shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
this.numList.shift();
this.imgIndex++;
//p0,p1,p2分别为滚动图的右图,左图,中间图
for(var i = 0; i < Item.length; i++) {Item[i].className = 'item ' + this.numList[i];}
//使数组下标变为原来的颜色
for(var i in this.pressList) {this.pressList[i].isShow = false}
//当数字下标为3时,下一次跳回1
if(this.imgIndex > 2) {this.imgIndex = 0;this.pressList[this.imgIndex].isShow = true;} else {this.pressList[this.imgIndex].isShow = true;}
}, 3000)}

[2]leftclick:左箭头点击事件

leftClick() {var Item = document.getElementsByClassName('item');
//找到后一张图片
this.numList.unshift(this.numList[2]);this.numList.pop();
//利用p0,p1,p2实现向左滚动
for(var i = 0; i < Item.length; i++) {Item[i].className = 'item ' + this.numList[i];}
//实现数字下标转换
for(var i in this.pressList) {this.pressList[i].isShow = false;}
this.imgIndex--;
//若数字下标为1,再向左,数字要跳到3
if(this.imgIndex < 0) {this.imgIndex = 3this.pressList[this.imgIndex].isShow = true;} else {this.pressList[this.imgIndex].isShow = true;}}

[3]rightclick:右箭头点击事件

rightClick() {var Item = document.getElementsByClassName('item');
//找到前一张图片
this.numList.push(this.numList[0]);this.numList.shift();
//利用p0,p1,p2实现向右滚动
for(var i = 0; i < Item.length; i++) {Item[i].className = 'item ' + this.numList[i];}
//实现数字下标转换
for(var i in this.pressList) {this.pressList[i].isShow = false}
this.imgIndex++
//若数字下标为3,再向右,数字要跳到1
if(this.imgIndex > 2) {this.imgIndex = 0;this.pressList[this.imgIndex].isShow = true;} else {this.pressList[this.imgIndex].isShow = true;}}}

4.引用自17素材网https://www.17sucai.com/pins/36052.html

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js可以通过使用第三方插件或者自己编写组件来实现轮播图。以下是一个常用的方式: 1. 使用vue-awesome-swiper插件 vue-awesome-swiper是一个基于Swiper的轮播图插件,可以快速实现轮播图功能。 安装: ``` npm install vue-awesome-swiper --save ``` 使用: ```html <template> <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide" v-for="item in list" :key="item.id"> <img :src="item.imgUrl" alt=""> </div> </div> <div class="swiper-pagination"></div> </div> </template> <script> import 'swiper/dist/css/swiper.css' import { swiper, swiperSlide } from 'vue-awesome-swiper' export default { components: { swiper, swiperSlide }, data() { return { list: [ { id: 1, imgUrl: 'http://xxx/1.jpg' }, { id: 2, imgUrl: 'http://xxx/2.jpg' }, { id: 3, imgUrl: 'http://xxx/3.jpg' } ], swiperOption: { pagination: { el: '.swiper-pagination' }, loop: true } } }, mounted() { console.log('mounted') } } </script> ``` 2. 自己编写组件 如果需要自定义轮播图的样式和交互,可以自己编写组件实现。 ```html <template> <div class="carousel"> <div class="carousel-item" v-for="(item, index) in list" :key="index"> <img :src="item.imgUrl" alt=""> </div> <div class="carousel-nav"> <span class="carousel-nav-item" v-for="(item, index) in list" :key="index" :class="{active: currentIndex === index}" @click="handleClick(index)"> </span> </div> </div> </template> <script> export default { data() { return { list: [ { id: 1, imgUrl: 'http://xxx/1.jpg' }, { id: 2, imgUrl: 'http://xxx/2.jpg' }, { id: 3, imgUrl: 'http://xxx/3.jpg' } ], currentIndex: 0 } }, mounted() { this.autoPlay() }, methods: { autoPlay() { setInterval(() => { this.currentIndex = (this.currentIndex + 1) % this.list.length }, 2000) }, handleClick(index) { this.currentIndex = index } } } </script> <style scoped> .carousel { position: relative; width: 500px; height: 300px; overflow: hidden; } .carousel-item { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; transition: opacity 0.3s; } .carousel-item.active { opacity: 1; } .carousel-nav { position: absolute; bottom: 10px; left: 50%; transform: translateX(-50%); display: flex; } .carousel-nav-item { width: 10px; height: 10px; margin-right: 10px; border-radius: 50%; background-color: #fff; cursor: pointer; } .carousel-nav-item.active { background-color: #f00; } </style> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值