swiper插件同屏多个slide时在loop模式下点击切换失效的解决方案

news/2024/11/6 11:10:47/文章来源:https://www.cnblogs.com/nangras/p/18525414

需求:

英雄展示页面提供纵向头像滚动切换功能,需要支持循环滚动、拖动切换、前后按钮切换、点击头像图标切换等功能。

 

 

代码:

<div :class="$style.swiperBox"><swiperref="heroSwiper":options="swiperOptions":class="$style.swiper"@slideChange="slideChange"><swiper-slidev-for="(el, index) in imageUrl":key="index":data-id="index":class="$style.swiperSlide"><divclass="hero_swiper_side":class="[$style.swiperItem,active === index && index === 0 ? $style.swiperItemFir : '',active === index ? $style.swiperItemActive : '',]"><img :src="active === index ? el.l : el.s" /><!-- @click="clickImg(index)" --></div></swiper-slide></swiper><div:class="$style[`swiper-button-prev`]"class="swiper-button-prev"slot="button-prev"></div><div:class="$style[`swiper-button-next`]"class="swiper-button-next"slot="button-next"></div></div>

 

swiper引入(使用了EffectCoverflow效果,可以理解为3D效果流):

 

 
import { Swiper, SwiperSlide } from "vue-awesome-swiper";
import Swiper2, { EffectCoverflow } from "swiper";
import "swiper/swiper.less";Swiper2.use([EffectCoverflow]);components: {Swiper,SwiperSlide,},

  

swiper配置项:

 swiperOptions: {direction: "vertical",// spaceBetween: 30,slidesPerView: 5,loop: true,observer: true,observerParents: true,effect: "coverflow",centeredSlides: true, //当前的active slide是否居中watchSlidesProgress: true, //计算每个slide的progressgrabCursor: true,pagination: false,slideToClickedSlide: true,// loopedSlides: 9,loopAdditionalSlides: 5, // loop模式下会在slides前后复制若干个slide,前后复制的个数不会大于原来的总个数,默认为0,前后各复制1个,其他取值前后各+1navigation: {nextEl: ".swiper-button-next",prevEl: ".swiper-button-prev",},coverflowEffect: {rotate: 0,stretch: 0,depth: 0,modifier: 0,slideShadows: false,},autoplay: false,},

  

切换头像时需要触发角色信息的展示,这个操作配置在slideChange事件中:

slideChange() {……const index = this.$refs.heroSwiper.$swiper.realIndex;this.active = index;……},

  

通过this.$refs.heroSwiper.$swiper.realIndex获取到当前元素(轮播中真实的index,即此元素在轮播数组中的index),即可进行对应操作。

如果点击事件配置在slide元素中,loop模式下必定会出现部分元素点击失效的问题,因为swiper会在真实元素前后复制多个虚拟slide元素进行拼接,保证轮播效果的流畅,但复制只是复制元素而不复制事件,因此会无法触发。所以我们最好在swiper配置项中就进行事件配置:

        on: {click: (event) => {// 方案1 轮播效果有问题let index =event.clickedIndex - event.activeIndex + event.realIndex === 6? 0: event.clickedIndex - event.activeIndex + event.realIndex;this.$refs.heroSwiper.$swiper.slideTo(index);// 方案2 会出现中断的情况// this.$refs.heroSwiper.$swiper.slideTo(event.clickedIndex);// this.active = event.realIndex;},// slideChangeTransitionEnd() {//   this.slideToLoop(this.realIndex, 0, true);// },},

  

以及通过这次需求学到了很重要的配置项:loopAdditionalSlides。有了这个视口中的虚拟元素也是可以触发了,但不明白为什么明明默认0(前后各复制1个)可实际效果中紧跟在数组首尾的元素也无法点击,大概还是我太菜了吧(晕倒在地)
之前使用loopedSlides死活有问题,看文档描述没什么大区别,最后才注意到这个参数是在loop模式下规定slidesPerview:'auto' 的同时需要配置的,而我们的slidesPerView(同屏元素个数)是5,也许这就是关键区别?(停止思考)
【真是看的时候嫌文档字多,真写到细节了恨不得文档再多写点……】
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/826656.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索AI创意新天地:FluxAI.art 在线生成精美图像

FluxAI.art 提供免费的AI图像生成工具 Flux.1,用户可以通过简单的文本描述轻松生成各种风格和高质量的图像,适合创意项目和日常应用。摘要:FluxAI.art 提供免费的AI图像生成工具 Flux.1,用户可以通过简单的文本描述轻松生成各种风格和高质量的图像,适合创意项目和日常应用…

linux 启动过程 GRUB 引导流程

https://www.cnblogs.com/Link-Luck/p/9858519.html Boot loader引导加载器,用来引导系统的启动,它把用户选定的内核加载到内存空间中,把控制权交给内核。  Windows下引导加载器:ntloader  Linux下引导加载器:    LILO:LInux LOader    GRUB:GRand Unified …

Air780E之TCP应用,你了解吗?

​ 一、TCP简介 TCP(TransmissionControlProtocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它主要用于在不可靠的网络环境中提供稳定的数据传输服务,确保数据能够按照顺序、无错误地到达接收端。TCP通过三次握手建立连接,使用滑动窗口进行流…

SPI接口,如何对W25Q64进行读写操作?深度解析

​ 一、SPI概述 SPI(SerialPeripheralInterface)是一种同步串行通信协议,广泛应用于微控制器和外围设备之间的数据传输。它由摩托罗拉公司开发,具有全双工通信能力,即可以同时进行数据的发送和接收。 SPI通信通常涉及四条信号线: (1)MOSI(MasterOutSlaveIn):主设备发…

如何在Chrome最新浏览器中调用ActiveX/OCX控件?

小编最近登陆工商银行网上银行,发现工商银行的个人网银网页,由于使用了ActiveX安全控件,导致不能用高版本Chrome浏览器打开,目前只有使用IE或基于IE内核的浏览器才能正常登录网上银行,而IE已经彻底停止更新了,打开工商银行个人网银登陆页面会显示下面提示,对于用户来说非…

java通过日期获取季度的日常用法

在日常的工作当中,我们经常会遇到将日期对应通过接口返回季度的业务需求;一般的方法有如下: 第一种方式:用LocalDate/*** 根据当前日期获取季度* @param date 日期* @return 季度*/public static int getQuarterOfYear(LocalDate date) {return (int) date.get(IsoFields.Q…

dubbo3.0 服务导入导出原理

不管是服务导出还是服务引入,都发生在应用启动过程中,比如:在启动类上加上 @EnableDubbo 时,该注解上有一个 @DubboComponentScan 注解,@DubboComponentScan 注解 Import 了一个 DubboComponentScanRegistrar,DubboComponentScanRegistrar 中会调用 DubboSpringInitializ…

Oracle 12c安装图文详解!内附安装包!

首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247486652&idx=1&sn=b2e1663c3287e072192c8faa5287f6ea&chksm=ea3758ccdd40d1dafbcdc4136588f02214df324feb3228f885662c7d55a17345ec47b7626640&token…

用户行为数据集

通过百度网盘分享的文件:电商平台行为数据集.csv链接:https://pan.baidu.com/s/1gKWhhTgZOThMugq8mhvuqA?pwd=1111 提取码:1111 --来自百度网盘超级会员V4的分享

如何用猿大师办公助手实现多人同时在线编辑Office Word文档?

猿大师办公助手作为一个专业的网页在线编辑 Office 插件,集成到Web项目上非常简单,前端代码只需要简单JS调用接口就可以实现在线编辑Office的功能,还有很多用户有多人同时在线编辑Office Word文档的需求,下面介绍如何用猿大师办公助手实现多人同时在线编辑Office Word文档。…

如何在Web网页在线预览、编辑Excel表格并保存到自己服务器上?

猿大师办公助手作为一款专业级的网页编辑Office方案,不仅可以把微软Office、金山WPS和永中Office的Word文档内嵌到浏览器网页中实现在线预览、编辑保存等操作,还可以把微软Office、金山WPS和永中Office的Excel表格实现网页中在线预览、编辑并保存到服务器。 猿大师办公助手是…