swiper组件结合flex布局实现轮播(动态渲染)

 小程序swiper组件结合flex布局实现轮播(动态渲染)

小程序swiper文档:https://uniapp.dcloud.net.cn/uni-app-x/component/swiper.html#swipericon-default.png?t=N7T8https://uniapp.dcloud.net.cn/uni-app-x/component/swiper.html#swiper

  • 简单示例:
		<swiper :autoplay="false" class="contentSlide " indicator-color="rgba(0,0,0,0.3)"
			indicator-active-color="#625f5f" indicator-dots circular>
			<swiper-item class="list">
				<view class="listItem" v-for="t in 8">
					<image src="../../static/likeFx/1.png" />
					<view>美食{{t++}}</view>
				</view>
			</swiper-item>
			<swiper-item class="list">
				<view class="listItem" v-for="t in 8">
					<image src="../../static/likeFx/1.png" />
					<view>服务{{t+8}}</view>
				</view>
			</swiper-item>
		</swiper>
        <style>
	.contentSlide {
		background-color: pink;
		font-size: 30rpx;
		height: 430rpx;  //轮播盒子的高度
	}

	.contentSlide image {
		width: 65px;
		height: 65px;
		// margin: 0 8rpx;
	}

	.list {
		display: flex;
		flex-wrap: wrap;
		align-items: center;
	}

	.listItem {
		// flex: 1;  //一行现实五个
        //width:33.33%  //一行显示三个
        width: 25%;  //一行显示四个
		text-align: center; 
		// background-color: skyblue;
	}

	.listItem>view {
		width: 65px;
		text-align: center;
		margin: auto;
	}
        <style/>    

  • 实现动态渲染

示例代码:

<!-- 轮播显示 start-->
<swiper :autoplay="false" class="contentSlide " indicator-color="rgba(0,0,0,0.3)"
	indicator-active-color="#625f5f" indicator-dots circular style="height: 480rpx;">
	<swiper-item class="list" v-for="t in Math.ceil(items.child.length/8)">
		<view class="cu-list grid col-4 no-border" style="padding: 0px 5px;">
			<block v-for="(item, i) in items.child.slice((t-1)*8,t*8)" :key="i">
				<view class="cu-item animate__animated animate__fadeInUp" style="align-items: center;">
					<view class="menu-icon" @click="goPage" :data-url="item.resurl" :data-isweb="item.isweb"
						:data-weburl="item.weburl">
						<image v-if="item.restype == 'IMAGE'" :src="item.icon" mode="contain" class="image-icon" />
						<view v-else class="grid-icon">
							<view :class="['cuIcon-' + item.icon, 'text-' + item.iconcolor]"
								style="font-size: 60rpx;display: flex;align-items: center;justify-content: center;">
							</view>
							<view class="cu-tag badge" v-if="item.badge">
								<block v-if="item.badge != 1">{{ item.badge > 99 ? '99+' : item.badge }}</block>
							</view>
						</view>
					</view>
					<text style="margin-top: 20rpx;">{{ item.name }}</text>
				</view>
			</block>
		</view>
	</swiper-item>
</swiper>
<!-- 轮播显示 end -->

重点注意划红线的部分

这里我们分为了两页所以使用了 Math.ceil()

 Math.ceil()是一个数学库函数,用于返回大于或等于给定数字的最小整数。它的语法是Math.ceil(x),其中x是要进行向上取整的数字。

每页显示八个所以使用了   v-for="(item, i) in items.child.slice((t-1)*8,t*8)" :key="i"   

这里取的是从第0个开始取,第八个结束,第二页从第九个开始

ps:描述可能不是很清楚,可自行尝试

实现完整轮播图功能需要以下步骤: 1. 安装轮播图插件。可以使用第三方插件,如swiper、vue-awesome-swiper,也可以自己手动实现。 2. 创建轮播组件。可以使用Vue的单文件组件(.vue文件)进行创建。 3. 在轮播组件中引入轮播图插件,并进行相关配置,如轮播图数量、轮播图宽高等。 4. 在轮播组件使用v-for指令渲染轮播图,并将轮播图的信息存储在一个数组中。 5. 实现轮播图自动播放功能。可以使用定时器实现自动播放,每隔一定时间切换轮播图。 6. 实现轮播图指示器和按钮功能。指示器可以显示当前轮播图的位置,按钮可以控制轮播图的前后切换。 以下是一个简单的轮播组件代码示例: ```html <template> <div class="slider"> <div class="slider-wrapper"> <div class="slider-item" v-for="(item, index) in items" :key="index"> <img :src="item.imgUrl" alt=""> </div> </div> <div class="slider-indicators"> <span v-for="(item, index) in items" :key="index" :class="{active: index === currentIndex}" @click="goTo(index)"></span> </div> <div class="slider-control"> <span class="prev" @click="prev"></span> <span class="next" @click="next"></span> </div> </div> </template> <script> import Swiper from 'swiper' export default { data() { return { swiper: null, currentIndex: 0, items: [ { imgUrl: 'https://picsum.photos/800/300?random=1' }, { imgUrl: 'https://picsum.photos/800/300?random=2' }, { imgUrl: 'https://picsum.photos/800/300?random=3' }, { imgUrl: 'https://picsum.photos/800/300?random=4' }, { imgUrl: 'https://picsum.photos/800/300?random=5' }, ] } }, mounted() { this.swiper = new Swiper('.slider-wrapper', { direction: 'horizontal', loop: true, pagination: { el: '.slider-pagination', clickable: true, bulletClass: 'slider-bullet', bulletActiveClass: 'slider-bullet-active' }, navigation: { nextEl: '.next', prevEl: '.prev' } }) this.swiper.on('slideChange', () => { this.currentIndex = this.swiper.realIndex }) setInterval(() => { this.next() }, 3000) }, methods: { prev() { this.swiper.slidePrev() }, next() { this.swiper.slideNext() }, goTo(index) { this.swiper.slideTo(index) } } } </script> <style> .slider { position: relative; width: 100%; height: 300px; } .slider-wrapper { width: 100%; height: 100%; } .slider-item { position: relative; width: 100%; height: 100%; } .slider-item img { width: 100%; height: 100%; object-fit: cover; } .slider-indicators { position: absolute; bottom: 10px; left: 50%; transform: translateX(-50%); display: flex; justify-content: center; align-items: center; } .slider-indicators span { display: inline-block; width: 10px; height: 10px; margin: 0 5px; border-radius: 50%; background-color: #ccc; cursor: pointer; } .slider-indicators span.active { background-color: #333; } .slider-control { position: absolute; top: 50%; transform: translateY(-50%); width: 30px; height: 30px; cursor: pointer; background-image: url(./arrow.png); background-repeat: no-repeat; } .slider-control .prev { left: 10px; background-position: center left; } .slider-control .next { right: 10px; background-position: center right; } </style> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值