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

这篇具有很好参考价值的文章主要介绍了解决vue中使用swiper 同时设置loop和slidesPerView时 点击事件失效问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

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

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


一、swiper - loop原理

解决vue中使用swiper 同时设置loop和slidesPerView时 点击事件失效问题参考链接:Swiper中文网 - loop

二、swiper - slidesPerView属性解释

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

参考链接: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 属性。文章来源地址https://www.toymoban.com/news/detail-469352.html

到了这里,关于解决vue中使用swiper 同时设置loop和slidesPerView时 点击事件失效问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue2 使用swiper

    在vue2项目中要用到轮播的功能,用swiper插件实现遇到了一些坑 总结下。 一、运行安装命令: 如果直接运行npm i swiper 是默认安装的最新版本是适用vue3 不适用vue2的 安装完成后oackage.json多了  vue-awesome-swiper本来是5.0.1 我手动改成了4.1.1,因为当我运行时,我的项目报错  所以

    2024年02月11日
    浏览(46)
  • vue+echarts 实现地图tooltip点击事件;toolTip数据动态渲染;同时鼠标滑过涟漪点时实现地图多区域联动

    最终做出来的效果是这样的: 最近做项目时,遇到这样的需求:         1、toolTip上的数据根据后台动态渲染         2、鼠标移入地图涟漪点时显示tootTip,点击toolTip上的文字,携带动态数据id进行路由跳转         3、鼠标移入地图涟漪点,与涟漪点相关的省份多区域联动

    2024年02月09日
    浏览(55)
  • 【vue3中使用swiper组件】

    效果展示 简介版本 安装Swiper 项目终端中 npm i swiper 即可 这里我个人用的是 npm i swiper -S 用法 swiper/vue导出 2 个组件: Swiper 和 SwiperSlide import {Swiper, SwiperSlide} from \\\'swiper/vue\\\'; //swiper所需组件 点击可以参考swiper中使用vue官方文档 完整代码展示 html静态展示 注 :slidesPerView 为显示

    2024年02月13日
    浏览(43)
  • swiper实现点击切换slide/图片效果

    swiper的切换方式一般为拖拽切换,滑动切换。 如果想要实现点击每一个slide就切换成下一个slide,那么可以使用click方法实现。 click方法 :回调函数,当你点击或轻触Swiper 后执行,相当于tap。 接受swiper实例和touchend事件作为参数。 注:Swiper5版本之前会有300ms延迟。 文档链接

    2024年02月16日
    浏览(57)
  • vue中swiper轮播图的使用

    说明:导入相应js引css import \\\"Swiper\\\" from \\\"swiper\\\" import \\\"swiper/css/swiper.css\\\"; import \\\"swiper/js/swiper\\\"; 说明:必要的结构使用;直接封装成一个组件  说明:(页面当中务必要有结构);注释已经写入代码。 第一:可以解决获取数据在Swiper实例之前;第二:可以解决v-for遍历完后在Swiper之

    2024年02月14日
    浏览(46)
  • Swiper在Vue2中的使用

    以swiper3为例 1. 下载swiper3  2. 在main.js中引入Vue-Awesome-Swiper  3.  在swiper.vue中  2.6.7版本 3.1.3版本 1. 下载swiper3  2.  在swiper.vue中 引入样式和组件 数据是写死的时候,能够loop:true是有效的; 数据是动态获取的loop:true就会失效。 解决办法: 加上v-if=\\\"list.length\\\"有效解决

    2024年02月11日
    浏览(38)
  • vue使用swiper三行轮播问题

    1、轮播图设置属性slidesPerColumn:3实现不了,解决方案如下: this.scheduleData是后台请求的数据,通过3个一组分组转换为this.scheduleListThreede 的数据! 2、逻辑处理如下: computed: {       scheduleListThree: function () {           let index = 0;           let count = 3;           let arrThree

    2024年02月09日
    浏览(38)
  • 使用Vscode进行Vue的debug调试功能,研究了一天终于可以了,同时解决Unbound breakpoint灰点问题

    实现的结果:在vscode中可以直接debug上一步下一步等,同时在浏览器里面也可以执行这样的操作,这样的debug功能,谁不想要呢?谁还没有呢?是不是你,哈哈哈哈 在浏览器里面debug实现: 源代码中增加 debugger 或者  console.log 在 Chrome 浏览器 Sources 中加断点 vscode 中直接调试,

    2024年02月07日
    浏览(33)
  • vue3中使用swiper(9)完整版

    1)安装 swiper 插件; 方法一:npm install swiper 方法二:yarn add swiper 注意:如果npm 无法安装swiper时,使用yarn安装; 2)参数介绍 modules: loop: 是否循环播放 slides-per-view:控制一次显示几张轮播图 space-between: 每张轮播图之间的距离,该属性不可以和margin 属性同时使用; aut

    2024年02月09日
    浏览(30)
  • vue2项目之swiper.js 的使用

    swiper.js 的使用 官网 API(部署在 swiper 实例中):https://www.swiper.com.cn/api/index.html 官网轮播图(查看源代码):https://www.swiper.com.cn/demo/index.html 接下来介绍怎么在 vue2 里使用 swiper.js (vue2 使用 swiper5版本) 1、安装、引入css 2、在组件中使用:引入 js 引入 html 结构 html 结构:

    2024年02月05日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包