IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> react轮播图swiper.js和antd走马灯的使用 -> 正文阅读

[JavaScript知识库]react轮播图swiper.js和antd走马灯的使用

本文主要记录两种方法的使用以及使用过程中遇到的问题。
本来很久之前就要写了,一直拖着,结果第二次又踩坑了上次同样的问题,一定得记录下来提醒自己!

一、Swiper

这是swiper.js官网???????

1、引入swiper和swiper样式

//index.js
import Swiper from 'swiper'
import 'swiper/css/swiper.css';

一定要记得引入样式,不然展示效果会有问题。不同版本引入的样式路径可能不一样,可以自己去swiper文件下看下路径。

2、在页面需要使用轮播组件的地方引入swiper容器

//index.js
<div className='swiper-container' id='swiper-container1'>
    <div className='swiper-wrapper'>
        <div className='swiper-slide'>
            第一页轮播
        </div>
        <div className='swiper-slide'>
            第二页轮播
        </div>
    </div>
    <div className='swiper-pagination' id='swiper-pagination1' />
</div>

Swiper7使用的默认容器是'.swiper',Swiper6以下使用的是'.swiper-container'。默认的容器类名一般不要删除,Swiper的默认样式是施加在该类名上的。这里我们使用了默认的容器类名'swiper-container' 、'swiper-wrapper'、'swiper-slide'、'swiper-pagination'。
如果需要加自定义样式,可以在'swiper-container' 的div上加自己的样式名。

两个id可写可不写,因为后续需要初始化swiper实例,如果当前页面只有一个轮播,可以直接使用类名,如果有多个轮播,可以添加不同的id去区分。

3、初始化swiper实例

const swiper1 = useRef(null)

const initSwiper1 = (length) => {
    swiper1.current = new Swiper('#swiper-container1', {
        autoplay: {
            disableOnInteraction: false, //用户操作swiper之后自动切换不会停止,每次都会重新启动autoplay
            delay: 2000, //自动切换的时间间隔
        },
        loop: length > 1, //判断如果超过一页才循环
        pagination: {//分页器
            el: '#swiper-pagination1',
            type: 'fraction'
        },
    })
}

如果页面中只有一个轮播,可以不写id,初始化实例的时候直接用类名

const initSwiper1 = (length) => {
    swiper1.current = new Swiper('.swiper-container', {
        autoplay: {
            disableOnInteraction: false, //用户操作swiper之后自动切换不会停止,每次都会重新启动autoplay
            delay: 2000, //自动切换的时间间隔
        },
        loop: length > 1, //判断如果超过一页才循环
        pagination: {
            el: '.swiper-pagination',
            type: 'fraction'
        },
    })
}

如果想要实现鼠标移入移出轮播容器的同时轮播暂停、播放功能,可以在轮播容器上加ref,再在初始化实例时实现这个功能

//index.js
const swiper1Ref = useRef(null)
<div className='swiper-container' id='swiper-container1' ref={ref => swiper1Ref.current = ref}>

</div>
const initSwiper1 = (length) => {
        swiper1.current = new Swiper('#swiper-container1', {
            autoplay: {
                disableOnInteraction: false, //用户操作swiper之后自动切换不会停止,每次都会重新启动autoplay
                delay: 2000, //自动切换的时间间隔
            },
            loop: length > 1,
            pagination: {
                el: '#swiper-pagination1',
                type: 'fraction'
            },
        })
        if(swiper1Ref.current){
            swiper1Ref.current.onmouseover = () => {
                swiper1.current?.autoplay?.stop() //鼠标移入停止轮播
            };
            swiper1Ref.current.onmouseout = () => {
                swiper1.current?.autoplay?.start() //鼠标移出开始轮播
            }
        }
    }

另外如果数据来源有变动,需要重新初始化swiper实例时,记得先销毁实例,否则轮播时会魔性乱动。

swiper1.current && swiper1.current.destroy()
initSwiper1(length)

但是swiper.js有一个问题是:如果想要在轮播的页面绑定点击事件,有的页面点击事件是不生效的!之前百度过好像也有解决方法,但是好像很麻烦,就换了antd的走马灯,如果你也有点击这个需求,换走马灯比较方便。

二、antd Carousel

1、引入Carousel组件

import { Carousel } from 'antd'

一般项目都全局引入过antd的所有样式,这里就不要单独引入样式了

2、页面引入轮播容器

const [auto, setAuto] = useState(true)
<Carousel autoplay={auto} autoplaySpeed={1000}>
    <div>
      <h3 style={contentStyle}>1</h3>
    </div>
    <div>
      <h3 style={contentStyle}>2</h3>
    </div>
    <div>
      <h3 style={contentStyle}>3</h3>
    </div>
    <div>
      <h3 style={contentStyle}>4</h3>
    </div>
</Carousel>

这样看上去antd走马灯简单很多。

antd3.x存在一个问题是当你暂停了轮播之后无法再次开始轮播,把autoplay设为true也不生效,但是这个问题在antd4.x已经解决了。

antd3.x还存在一个问题就是获取从后端接口得来的数据渲染时,会偶现渲染最后一页数据再渲染第一页数据,4.x是否还存在这个问题还没有验证。

antd走马灯自带鼠标移入移出暂停、开始轮播功能。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:24:08  更:2022-10-17 12:25:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 15:34:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码