antd 实现通过点击按钮的方式预览一组图片

需求背景

最近公司的PM提了一个优化需求,要求点击一个按钮能弹出预览多张图片的交互效果,演示动画长这样。

于是我打开 antd 官网想搜寻相关的例子,仅发现了通过按钮预览单张图片的示例

html 复制代码
<template>
  <div>
    <a-button type="primary" @click="() => setVisible(true)">show image preview</a-button>
    <a-image
      :width="200"
      :style="{ display: 'none' }"
      :preview="{
        visible,
        onVisibleChange: setVisible,
      }"
      src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
    />
  </div>
</template>

<script lang="ts" setup>
import { ref } from 'vue';
const visible = ref<boolean>(false);
const setVisible = (value): void => {
  visible.value = value;
};
</script>

那如何实现在不展示 <a-image /> 组件的情况下预览多张图呢?

实现方案

首先,我们知道 antd 的预览多张图是通过 <a-image-preview-group /> 组件实现,通过在 <a-image-preview-group /> 内放置 <a-image /> 组件,当触发 <a-image /> 组件的 onClick 事件能做到 单击左右切换按钮预览多张图像。

那么我们只需要手动触发 <a-image-preview-group /> 内的 <a-image /> 组件的 onClick 事件即可实现多张图片的预览效果。

因为需求是通过点击按钮展示预览效果,那么我们得先在渲染时隐藏所有的 <a-image /> 组件:

html 复制代码
<a-image-preview-group>
    <a-image
        v-for="(url, i) in files"
        :key="i"
        :width="0"
        :src="url"
        ref="imageRefs"
        style="display: none"
    />
</a-image-preview-group>

为了能够访问到 <a-image /> 组件实例,需要绑定给组件绑定 ref 来获取实例。

假设页面上现在有一个预览的 button,接下来我们绑定给它绑定一个 onPreviewImages 的 click 事件。

js 复制代码
const imageRefs = ref([]);

// 当触发 onPreviewImages 函数执行时,取得第一个 `<a-image />` 组件实例并手动调用 click 事件
// 实现预览效果
const onPreviewImages = () => {
   const aImage = first(imageRefs.value);
   aImage && aImage.$el.nextSibling.click();
}

结尾

至此,我们已经实现了仅通过手动调用事件的方法来实现预览一组图片的效果。🌟

最后我不解的是,既然 antd 提供了对单张图片的手动预览支持,那实现多张图片的手动控制预览也不难,也许这种业务场景比较少见吧。

相关推荐
Csvn6 小时前
并发模式:让渲染学会排队、插队和让路
前端
可乐鸡翅yeah_7 小时前
新手梳理:M3U8 线上问题,哪些是前端锅,哪些是后端锅
前端·ios·音视频·实时音视频·m3u8·音视频在线播放
Flynt7 小时前
Linear 用 1000 个 PR 换掉 styled-components,我写了 200 个按钮,把这笔账复现了一遍
前端·css·preact
JavaGuide8 小时前
NVIDIA 又开源了!这次给 AI Agent 加上权限管控
前端·后端
excel8 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
莪_幻尘9 小时前
Skill 体检:30 个 Skill 全凭感觉?体检器先自曝了 8 个“假 0 分
前端·人工智能·llm
风骏时光牛马9 小时前
AI模型综合能力评测:性能、指令遵循与多场景实测对比
前端
Frag0ut9 小时前
Chrome与Chromium内核浏览器在Windows 11上的新特性全景解析
前端·chrome·windows·web安全·chromium·gemini ai·playready drm
hiahiahia12310 小时前
实现完整 Tool Dispatcher
开发语言·前端
IT_陈寒10 小时前
Java线程池这破玩意,差点让我周末加班排查到凌晨
前端·人工智能·后端