解决vue中使用swiper 同时设置loop和slidesPerView时 点击事件失效问题

本文介绍了在Vue项目中使用Swiper插件时,如何处理loop和slidesPerView同时设置导致的点击事件失效问题。关键在于获取真实的index和设置loopedSlides属性,确保点击事件能在循环轮播图中正确触发。

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


前言

在实际运用swiper轮播图插件时,有时会出现需要同时使用 loop: trueslidesPerView: ‘auto’ 两种属性的情况,前者代表开启循环模式,后者代表slider容器能够同时显示的slides数量(carousel模式)。

此时,会出现点击事件失效问题,主要原因是 loop: true 会产生复制的slide,而在“假的”slide上正常绑定的点击事件无法生效。


一、swiper - loop原理

swiper - loop 属性官方解释。转载自:Swiper中文网 [https://www.swiper.com.cn]参考链接:Swiper中文网 - loop

二、swiper - slidesPerView属性解释

swiper - slidesPerView属性官方解释。转载自:Swiper中文网 [https://www.swiper.com.cn]

参考链接:Swiper中文网 - carousel

三、解决方法

1. HTML部分

<div class="carousel">
	<swiper ref="noticeSwiper" :options="swiperOptions">
		<swiper-slide v-for="(item, i) in list.notice" :key="i">
			<div class="title">
				<span>{{ item.title }}</span>
			</div>
			<span>{{ item.createdTime }}</span>
		</swiper-slide>
	</swiper>
</div>

2. data部分

let vm = null
export default {
	// etc.
}
data() {
	return {
		list: {
			notice: [], // 列表
		}
		swiperOptions: {
			direction: 'vertical',
	        height: 52,
	        slidesPerView: 2,
	        loopedSlides: 4, // 在loop模式下使用slidesPerView,还需使用该参数设置所要用到的loop个数(一般设置大于可视slide个数2个即可)
	        observer: true, // 改变swiper样式时,自动初始化swiper
	        observeParents: true, // 监测swiper父元素,如果有变化则初始化swiper
	        autoplay: {
	        	delay: 3000,
	        	disableOnInteraction: false,
	        },
	        loop: true,
	        on: {
				tap: function () {
					// 这里有坑,需要注意的是:
					// this 指向的是 swpier 实例,而不是当前的 vue, 因此借助 vm,来调用 methods 里的方法
					let initIndex = this.clickedIndex - this.activeIndex + this.realIndex
					let index = initIndex === vm.list.notice.length ? 0 : initIndex
					vm.toNoticeDetail(index)
				},
	        },
		}
	}
}
computed: {
    noticeSwiper() {
      	return this.$refs.noticeSwiper.$swiper
    },
}

3. 方法部分

methods: {
	toNoticeDetail(index) {
		// 示例:查看详情
		this.$router.push({
			path: '/contentDetail',
			query: {
				id: this.list.notice[index].id, // 通过index获取数据
			},
		})
	},
}
created () {
 	vm = this
}

总结

在vue中使用swiper,同时设置loop和slidesPerView时,解决点击事件失效问题的关键,在于获取真实的 index 以及设置 loopedSlides 属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值