React使用antd的图片预览组件,点击哪个图片就预览哪个的设置

使用了官方推荐的相册模式的预览,但是点击预览之后,每次都是从图片列表的第一张开始预览,而不是点击哪张就从哪张开始预览:

所以这里我就封装了一下,对初始化预览的列表进行了逻辑处理:

当点击开始预览的时候,要找到当前图片在预览图列表中的索引,然后设置为当前预览图索引,然后等点击左右切换的时候,要改变这个索引,所以要使用onChange函数,等点击关闭按钮的时候,还要重置这个索引为点击时候的图片索引:

复制代码
import './index.scss'
import { Image } from 'antd'
import { useState } from 'react'

export default function ImageItem(props: any) {
    // console.log('props', props)

    const preList = [
        'https://gw.alipayobjects.com/zos/antfincdn/LlvErxo8H9/photo-1503185912284-5271ff81b9a8.webp',
        'https://gw.alipayobjects.com/zos/antfincdn/cV16ZqzMjW/photo-1473091540282-9b846e7965e3.webp',
        'https://gw.alipayobjects.com/zos/antfincdn/x43I27A55%26/photo-1438109491414-7198515b166b.webp',
    ]

    const [preIndex, setIndex] = useState(preList.indexOf(props.imgUrl))

    // 当点击前后切换的时候,修改当前预览图
    const handleSwitch = (current: number, prevCurrent: number) => {
        console.log('切换预览图', current, prevCurrent)
        setIndex(current)
    }

    // 关闭预览图是重置预览为当前图索引
    const handleClose = (visible: boolean) => {
        console.log('关闭预览图', visible)
        if (!visible) {
            setIndex(preList.indexOf(props.imgUrl))
        }
    }

    return (
        <div className="file">
            <Image.PreviewGroup
                items={preList}
                preview={{
                    minScale: 0.1,
                    current: preIndex,
                    onChange: handleSwitch,
                    onVisibleChange: handleClose,
                }}
            >
                <Image className="item-img" src={props.imgUrl} />
            </Image.PreviewGroup>
        </div>
    )
}

预览结果:

相关推荐
WebDesign_Mu3 小时前
为了庆祝2025英雄联盟全球总决赛开启,我用HTML+CSS+JS制作了LOL官方网站
javascript·css·html
@PHARAOH3 小时前
WHAT - 前端性能指标(交互和响应性能指标)
前端·交互
噢,我明白了3 小时前
前端js 常见算法面试题目详解
前端·javascript·算法
im_AMBER3 小时前
Web 开发 30
前端·笔记·后端·学习·web
学编程的小虎3 小时前
用 Python + Vue3 打造超炫酷音乐播放器:网易云歌单爬取 + Three.js 波形可视化
开发语言·javascript·python
Jonathan Star3 小时前
Webpack 打包优化与骨架屏结合:双管齐下提升前端性能与用户体验
前端·webpack·ux
做好一个小前端3 小时前
后端接口获取到csv格式内容并导出,拒绝乱码
前端·javascript·html
第七种黄昏3 小时前
前端面试-箭头函数
前端·面试·职场和发展
Youyzq3 小时前
前端box-shadow出现兼容性问题如何处理
前端
携欢4 小时前
PortSwigger靶场之将 XSS 存储到onclick带有尖括号和双引号 HTML 编码以及单引号和反斜杠转义的事件中通关秘籍
前端·html·xss