swiper loop:true引发的问题及解决方法

更多文章可关注我的个人博客:https://seven777777.github.io/myblog/

swiper loop:true引发的问题

最近在准备面试,想到之前面试总是会被问到:遇到过哪些坑,都是怎么解决的。每每遇到这种问题我都很尴尬,因为一下子让你去想踩过的坑还真不太想的起来,一般我只有再次遇到同样的坑的时候才会记起,所以决定以这篇文章开始,认真记录自己遇到过的坑,以备不时之需!

废话不多说,切入正题。

前段时间在写一个轮播的时候遇到了一个问题:

当swiper的loop属性设置为true的时候,第一页往前翻的那一页,以及最后一页往后翻的那一页点击跳转链接无效。

研究了一下发现,当loop模式下slides前后会复制若干个slide,从而形成一个环路,但是却不会复制绑定在dom上的click事件

好了,下面是重点,解决方法:
其实很简单,就一句话,不要在dom上绑定click事件,使用swiper的onclick回调函数就可以解决了。

下面贴上部分代码,有助于理解(因为直接从项目中拷过来,所以忽略无关代码)

<template>
  <div class="main-swiper">
    <swiper v-if="bannerDetails && bannerDetails.length>1" :options="swiperOption" ref="mySwiper">
      <!-- 幻灯内容 -->
      <swiper-slide v-for="image in bannerDetails">
        <div class="slide-item swiper-lazy" :style="{backgroundImage:'url('+ image.ImageUrl +')'}" :data-url="image.DirectedUrl"></div>
      </swiper-slide>
      <!-- 以下控件元素均为可选(使用具名slot来确定并应用一些操作控件元素) -->
      <div class="swiper-pagination" slot="pagination"></div>
    </swiper>
    <div v-if="bannerDetails && bannerDetails.length === 1" class="slide-item">
      <div class="prebook" :style="{'background-image':'url('+bannerDetails[0].ImageUrl+')'}" @click="toBannerPage(bannerDetails[0].DirectedUrl)"></div>
    </div>
  </div>
</template>
<script>
import { swiper, swiperSlide, swiperPlugins } from 'vue-awesome-swiper';
import {controller} from 'common/torlax/controller';
export default {
  name: 'main-swiper',
  created() {

  },
  data() {
    return {
      swiperOption: {
        pagination: '.swiper-pagination',
        notNextTick: true,
        loop: true,
        autoplay: 5000,
        preloadImages: false,
        // 用户操作swiper之后,是否禁止autoplay。默认为true:停止。
        autoplayDisableOnInteraction: false,
        lazyLoadingInPrevNext: true,
        lazyLoadingInPrevNextAmount: 1,
        lazyLoading: true,
        // 点击事件,避免在dom上绑定事件时,loop复制的dom无点击事件
        onClick(swiper){
          //回调函数内部进行一些操作,因为我的url是动态获取的,所以这里将url数据绑定到DOM上,获取之后进行了一些操作,再用封装好的openUrl()函数打开链接。
          var url=swiper.clickedSlide.childNodes[0].attributes[0].value;
          var urlArr=url.split('/').splice(3);
          var newUrl="/"+urlArr.join('/');
          controller.openUrl(newUrl);
        }
      }
    }
  },
  //省略其他代码
  </script>

关于swiper回调函数的详细用法,可以参见swiper官网

搴芳拾梦
欢迎关注的我的个人公众号【搴芳拾梦】
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
这段代码是使用 Swiper5 初始化一个垂直方向的轮播图,其中包含了许多配置项,下面我来一一解析: ```javascript var mySwiper1 = new Swiper(".m-mzw-swiper-a4 .swiper1", { direction: "vertical", // 设置为垂直方向 loop: true, // 无限循环 slidesPerView: "auto", // 自动根据容器宽度计算每页显示的图片数量 centeredSlides: true, // 居中显示轮播图 freeMode: true, // 自由模式,允许滑动到任意位置 watchSlidesVisibility: true, // 开启此选项后,仅在当前slide对应的swiper-slide-visible元素上添加active类名 // mousewheel: true // 是否开启鼠标滚轮控制 }); ``` - `direction: "vertical"`:设置轮播图方向为垂直方向,即上下滚动。 - `loop: true`:开启轮播图无限循环,即从最后一张图片切换到第一张图片时,会自动继续切换到第二张图片。 - `slidesPerView: "auto"`:自动根据容器宽度计算每页显示的图片数量,即每个页面容纳的图片数量不固定。 - `centeredSlides: true`:居中显示轮播图,即当前显示的图片在居中位置。 - `freeMode: true`:自由模式,允许滑动到任意位置,而不是每次只能滑动到下一个或上一个图片。 - `watchSlidesVisibility: true`:开启此选项后,仅在当前 slide 对应的 `.swiper-slide-visible` 元素上添加 `active` 类名,可以用于控制样式。 - `mousewheel: true`:是否开启鼠标滚轮控制,这个选项被注释掉了,如果需要开启,可以取消注释。 除了这些常用的配置项之外,Swiper5 还有许多其他的配置项,可以根据实际需求进行配置。希望这些信息对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值