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

绝地灬酷狼 2023-10-14 17:21 118阅读 0赞

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

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

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

  1. import './index.scss'
  2. import { Image } from 'antd'
  3. import { useState } from 'react'
  4. export default function ImageItem(props: any) {
  5. // console.log('props', props)
  6. const preList = [
  7. 'https://gw.alipayobjects.com/zos/antfincdn/LlvErxo8H9/photo-1503185912284-5271ff81b9a8.webp',
  8. 'https://gw.alipayobjects.com/zos/antfincdn/cV16ZqzMjW/photo-1473091540282-9b846e7965e3.webp',
  9. 'https://gw.alipayobjects.com/zos/antfincdn/x43I27A55%26/photo-1438109491414-7198515b166b.webp',
  10. ]
  11. const [preIndex, setIndex] = useState(preList.indexOf(props.imgUrl))
  12. // 当点击前后切换的时候,修改当前预览图
  13. const handleSwitch = (current: number, prevCurrent: number) => {
  14. console.log('切换预览图', current, prevCurrent)
  15. setIndex(current)
  16. }
  17. // 关闭预览图是重置预览为当前图索引
  18. const handleClose = (visible: boolean) => {
  19. console.log('关闭预览图', visible)
  20. if (!visible) {
  21. setIndex(preList.indexOf(props.imgUrl))
  22. }
  23. }
  24. return (
  25. <div className="file">
  26. <Image.PreviewGroup
  27. items={preList}
  28. preview={
  29. {
  30. minScale: 0.1,
  31. current: preIndex,
  32. onChange: handleSwitch,
  33. onVisibleChange: handleClose,
  34. }}
  35. >
  36. <Image className="item-img" src={props.imgUrl} />
  37. </Image.PreviewGroup>
  38. </div>
  39. )
  40. }

预览结果: ebb6d4816e5f43d88f171b630e714049.png

发表评论

表情:
评论列表 (有 0 条评论,118人围观)

还没有评论,来说两句吧...

相关阅读