react 中 swiper.js 的使用

9 篇文章 0 订阅

基础

yarn add swiper@6.8.4 -D

import { Swiper, SwiperSlide } from 'swiper/react'

// 引入 Swiper 样式
import 'swiper/swiper.min.css'

<Swiper
  initialSlide={1} // 初始化显示哪一个
  loop={true} // 是否循环
  // 滑动触发
  onSlideChange={() => console.log('slide change')}
  // onSwiper 该函数将返回所创建Swiper的一个实例。可以将此实例保存到state,然后对其调用所需的所有方法
  onSwiper={el => console.log(el, 'el')}
>
  <SwiperSlide>Slide 1</SwiperSlide>
  <SwiperSlide>Slide 2</SwiperSlide>
  <SwiperSlide>Slide 3</SwiperSlide>
  <SwiperSlide>Slide 4</SwiperSlide>
  ...
</Swiper>

在react中,swiper的方法和官方文档中,html中的方法有所不同,react中通常在前面加一个 on,并以驼峰的方式组成。

Ps: 不排除我没有找到…

额外添加模块

默认情况下,Swiper React使用Swiper的核心版本(没有任何附加组件)。如果要使用导航、分页和其他组件,必须先安装它们。

官方文档参考地址
在此举例部分,殊途同归。

// 引入 安装模块,导航模块
import SwiperCore, { Navigation } from 'swiper'

// 使用安装模块对引入的模块进行安装
SwiperCore.use([Navigation])

    <Swiper
      className="mySwiper"
      // 设置导航
      navigation={{
        nextEl: '.swiper-button-next',
      	prevEl: '.swiper-button-prev',
      }}
    >
        <SwiperSlide>
          <div className="items" key={index}>
            <img src={item} alt="" className="itemPic" />
            // 上滑导航图片
            <img
              src={require('./image/arrowTop.png').default}
              alt=""
              className="swiper-button-prev"
            />
            // 下滑导航图片
            <img
              src={require('./image/arrowBottom.png').default}
              alt=""
              className="swiper-button-next"
            />
          </div>
        </SwiperSlide>
    </Swiper>

最终代码
最终效果是一个竖屏滚动,触底返回顶部。

{
  abArr.length > 0 && (
    <Swiper
      className="mySwiper"
      direction="vertical"
      slidesPerView={1}
      speed={500}
      // 设置导航
      navigation={{
      	// 需求缘故只设置了下滑的dom类
        nextEl: '.arrow'
      }}
      onSwiper={(el) => setSwiperR(el)}
      onSlideChange={(el) => {
        // 滑动触发
      }}
      onTouchEnd={(el) => {
        // 滑动结束触发
        if (el.isEnd) {
          swiperR.slideTo(0)
        }
      }}
    >
      {abArr.map((item, index) => (
        <SwiperSlide>
          <div className="items" key={index}>
            <img src={item} alt="" className="itemPic" />
            // 下滑导航图片
            <img
              src={require('./image/arrow.png').default}
              alt=""
              className="arrow arrowAnimation"
              onClick={() => {
                if (index === abArr.length - 1) {
                  swiperR.slideTo(0)
                }
              }}
            />
          </div>
        </SwiperSlide>
      ))}
    </Swiper>
  )
}

8-27

今天遇到一个bug,记录一下

需求是要滑动在最后一页时,再下滑滑动到下标为 0 的位置

以下是基础实现,思路为滑动结束函数判断是否为最后一个(isEnd,判断最后一张时 上下滑)

onTouchEnd={(el) => {
  // 滑动结束触发
  if (el.isEnd) {
    swiperR.slideTo(0, 300, false)
  }
}}

但是测试过程中发现一个问题,下滑触发的slideTo执行后停留在了下标为 1 的图上(此时我定的还是 0 )

经多N次的尝试,最终定位到问题所在 滑动幅度

小滑 也就是手指滑动屏幕不超过40%距离时,slideTo执行会到 1
大滑 超过40%及以上 正常执行

目前并没有找到任何可以正面去解决这个问题的答案
但是可以曲线救国(如下)
执行完毕之后再次执行,最终还是解决这个问题了,但这个解决方式并不理想,希望有大佬看到之后可以解解惑

onTouchEnd={(el) => {
  // 滑动结束触发
  if (el.isEnd) {
    swiperR.slideTo(0, 300, false)
    let timer = setTimeout(() => {
      swiperR.slideTo(0, 30, false)
      clearTimeout(timer)
    }, 301)
  }
}}

swiper 7 使用

组件使用不在用SwiperCore.use()形式,而是在Swiper内添加modules={[Autoplay, Pagination]} 这种格式
在这里插入图片描述
部分模块属于组件,需要引入对应的样式,比如Pagination
在这里插入图片描述
第一行是总体的,使用就要引入。
第二行是针对单个组件的,自行在node_modules中查找并引入。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值