vue做一个简单的动态轮播图

14 篇文章 0 订阅
1 篇文章 0 订阅

首先先看样式

在这里插入图片描述

  • 这个轮播图是根据数据库里 的图片数量进行动态变化的
  • 只有一张图不轮播
  • 大于1张图才会动起来

html

<div class="banner">
  <ul class="con" :style="classobj">
     <li v-for="(item, index ) in banList" :key="index">
       <a :href="item.serviceContent">
         <img :src="item.imgUrl" alt="">
       </a>
     </li>
   </ul>
   <ul class="btn">
     <li v-for="(item, index) in banList" :key="index" @click="now(index)"></li>
   </ul>
   <div class="rb" @click="rb">></div>
   <div class="lb" @click="lb"><</div>
 </div>

javascript

export default {
 data () {
    return {
      banList: [], // banner列表
	  num: 0, // 当前图片位置
    }
  },
  methods: {
    // 动态获取图片信息, 发送请求获取数据库数据
    async getBanner () {
      let res = await axios.getTest('xxx')
      if (res.code == 0) {
        this.banList = res.data.resultList
        // 判断一下, 如果只有一张图片就不自动播放轮播
        if (this.banList.length > 1) {
          this.startMove()
        }
      }
    },
    // 点击小圆点
    now(index){
			this.num=index;
			console.log(this.num)
		},
    // 右移
		rb(){
			// 判断是否到最后一张图
			if(this.num == this.banList.length -1){
				this.num=0;
			}else{
				this.num++;
			}						
		},
    // 左移
		lb(){
			// 判断是否到第一张图
			if(this.num == 0){
				this.num = this.banList.length -1;
			}else{
				this.num --;
			}												
		},
    // 定时轮播
    startMove () {
      setInterval(() => {
        this.rb()
      }, 3000)
    }
  },
  created () {
    this.getBanner()
  },
  computed: {
  // 根据数据个数 动态计算 轮播的父盒子宽度
    classobj: function(){
		return { marginLeft: this.num * -7.5 + 'rem', width: this.banList.length * 7.5 + 'rem' }
		}	
  }
}
</script>

css

  • 这里我是用的是less
	ul , li {
		list-style: none;
	}
	.banner{
		width: 7.5rem;
    	height: 2.85rem;
		margin: 0 auto;
		position: relative;
		overflow: hidden;
	}
	.con{
		width: 37.5rem;
		height: 2.85rem;
    	transition: 1s all;
	}
	.con li{
		width: 7.5rem;
    	height: 2.85rem;
		float: left;
    	overflow: hidden;
    	padding: 0.2rem 0.25rem;
		line-height: 2.62rem;
	}
	.btn{
		position: absolute;
		bottom: 0.3rem;
		left: 50%;
    	transform: translate(-50%, 0);
	}
	.btn li{
		width: 0.2rem;
		height: 0.2rem;
		border-radius: 50%;
		background: #fff;
		float: left;
		margin: 0.1rem;
		text-align: center;
	}
	.rb,.lb{
    	display: block;// 不需要左右箭头可以设为 none
		position: absolute;
		font-size: 30px;
		color: orange;
		top: 50%;
    	transform: translate(0 , -50%);
		margin-top: -20px;
	}
	.rb{
		right: 0;
	}
  • 一个简单的动态轮播图, 各位有没有学会呢! 觉得有用就点个赞吧
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于 Vue.js 的轮播图实现示例: HTML 代码: ```html <div id="app"> <div class="slider"> <transition-group name="fade" tag="ul"> <li v-for="(img, index) in imgs" :key="index" v-show="currentIndex === index"> <img :src="img"> </li> </transition-group> <div class="slider-nav"> <a v-for="(img, index) in imgs" :key="index" href="#" @click.prevent="show(index)" :class="{ active: currentIndex === index }">{{ index + 1 }}</a> </div> </div> </div> ``` CSS 代码: ```css .slider { position: relative; overflow: hidden; } .slider ul { list-style: none; margin: 0; padding: 0; position: relative; } .slider ul li { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; transition: opacity 0.5s ease-in-out; } .slider ul li img { width: 100%; height: 100%; object-fit: cover; } .slider-nav { position: absolute; bottom: 20px; left: 50%; transform: translateX(-50%); text-align: center; } .slider-nav a { display: inline-block; width: 24px; height: 24px; line-height: 24px; border-radius: 50%; background-color: #ccc; margin: 0 8px; color: #fff; text-align: center; font-size: 14px; text-decoration: none; transition: background-color 0.5s ease-in-out; } .slider-nav a.active, .slider-nav a:hover { background-color: #f60; } .fade-enter-active, .fade-leave-active { transition: opacity 0.5s ease-in-out; } .fade-enter, .fade-leave-to { opacity: 0; } ``` JavaScript 代码: ```javascript new Vue({ el: '#app', data: { imgs: [ 'img1.jpg', 'img2.jpg', 'img3.jpg' ], currentIndex: 0 }, methods: { show: function(index) { this.currentIndex = index; }, showNext: function() { this.currentIndex = (this.currentIndex + 1) % this.imgs.length; } }, mounted: function() { // 自动播放 setInterval(this.showNext, 3000); } }); ``` 这个轮播图实现了自动播放、导航点击切换图片等功能,使用了 Vue.js 中的动态绑定和过渡效果。你可以替换 HTML 代码中的图片地址和 CSS 代码中的样式来适应你的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值