ImagePreview 图片大图预览
全屏图片查看器,支持滚轮缩放、鼠标拖拽、键盘 +/− / 0 / Esc 控制。
基础用法
通常用一个缩略图触发预览:缩略图设为 cursor: zoom-in,点击时把 open 切到 true。
- 滚轮:缩放
- 鼠标拖拽:平移
- 键盘
+/-:缩放 - 键盘
0:恢复 100% - 键盘
Esc:关闭
背景 视口
<script setup lang="ts">
import { ref } from 'vue';
import { CfImagePreview, CfButton } from '@chufix-design/vue';
const open = ref(false);
const src = 'https://images.unsplash.com/photo-1503023345310-bd7c1de61c7d?w=1600&h=900&fit=crop';
</script>
<template>
<div style="display: flex; flex-direction: column; gap: 12px; align-items: flex-start;">
<img
:src="src.replace('1600&h=900', '320&h=180')"
alt="缩略图"
style="width: 200px; height: auto; border-radius: 8px; cursor: zoom-in;"
@click="open = true"
/>
<CfButton size="sm" @click="open = true">点击预览大图</CfButton>
<CfImagePreview v-model="open" :src="src" alt="示例图" />
</div>
</template> <script setup>
import { ref } from 'vue';
import { CfImagePreview, CfButton } from '@chufix-design/vue';
const open = ref(false);
const src = 'https://images.unsplash.com/photo-1503023345310-bd7c1de61c7d?w=1600&h=900&fit=crop';
</script>
<template>
<div style="display: flex; flex-direction: column; gap: 12px; align-items: flex-start;">
<img
:src="src.replace('1600&h=900', '320&h=180')"
alt="缩略图"
style="width: 200px; height: auto; border-radius: 8px; cursor: zoom-in;"
@click="open = true"
/>
<CfButton size="sm" @click="open = true">点击预览大图</CfButton>
<CfImagePreview v-model="open" :src="src" alt="示例图" />
</div>
</template> import { useState } from 'react';
import { CfButton, CfImagePreview } from '@chufix-design/react';
export default function Demo() {
const [open, setOpen] = useState(false);
const src = 'https://images.unsplash.com/photo-1503023345310-bd7c1de61c7d?w=1600&h=900&fit=crop';
return (
<>
<div style={{ display: "flex", flexDirection: "column", gap: 12, alignItems: "flex-start" }}>
<img src={src.replace('1600&h=900', '320&h=180')} alt="缩略图" style={{ width: 200, height: "auto", borderRadius: 8, cursor: "zoom-in" }} onClick={() => setOpen(true)}
/>
<CfButton size="sm" onClick={() => setOpen(true)}>点击预览大图</CfButton>
<CfImagePreview value={open} onChange={setOpen} src={src} alt="示例图" />
</div>
</>
);
} import { useState } from 'react';
import { CfButton, CfImagePreview } from '@chufix-design/react';
export default function Demo() {
const [open, setOpen] = useState(false);
const src = 'https://images.unsplash.com/photo-1503023345310-bd7c1de61c7d?w=1600&h=900&fit=crop';
return (
<>
<div style={{ display: "flex", flexDirection: "column", gap: 12, alignItems: "flex-start" }}>
<img src={src.replace('1600&h=900', '320&h=180')} alt="缩略图" style={{ width: 200, height: "auto", borderRadius: 8, cursor: "zoom-in" }} onClick={() => setOpen(true)}
/>
<CfButton size="sm" onClick={() => setOpen(true)}>点击预览大图</CfButton>
<CfImagePreview value={open} onChange={setOpen} src={src} alt="示例图" />
</div>
</>
);
} API
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
src | string | — | 大图地址 |
alt | string | '' | 替代文本 |
open / modelValue | boolean | — | 受控显示状态 |
defaultOpen | boolean | false | 非受控初始显示状态 |
事件:onOpenChange(open) / onClose()。
反馈与讨论
ImagePreview 图片大图预览 的讨论