Skip to content

FxImage 图片

在原生 img 基础上,支持自适应缩放、懒加载、加载占位、加载失败态、点击预览。不依赖任何 UI 框架,预览基于 FxImageViewer,样式走 @fx/styles token。

基础用法

fit 控制图片如何适应容器,同原生 object-fit

占位

placeholder 插槽自定义图片尚未加载时的占位内容。

加载失败

error 插槽自定义图片加载失败的占位内容。

懒加载

lazy 开启懒加载,图片进入视口才加载。可用 scroll-container 指定滚动容器(默认最近的 overflow: auto/scroll 父级)。若浏览器支持原生懒加载(loading="lazy"),原生优先。

图片预览

preview-src-list 开启点击预览大图,initial-index 指定初始位置,show-progress 显示页码进度。

手动打开预览

通过 ref 调用 showPreview() 手动打开预览。

自定义工具栏

toolbar 插槽自定义预览工具栏(作用域参数:actions / prev / next / reset / activeIndex / setActiveItem)。

自定义页码进度

progress 插槽自定义预览页码进度(作用域参数:activeIndex / total),优先级高于 show-progress

API

Attributes

参数说明类型默认值
src图片源地址,同原生属性string''
fit图片如何适应容器,同原生 object-fit'' | 'contain' | 'cover' | 'fill' | 'none' | 'scale-down'''
hide-on-click-modal开启预览时,是否可点击遮罩关闭预览booleanfalse
loading浏览器加载图像策略,同原生'eager' | 'lazy'
lazy是否懒加载booleanfalse
scroll-container懒加载时监听 scroll 的容器string | HTMLElement
alt原生 alt 属性string
referrerpolicy原生 referrerPolicy 属性string
crossorigin原生 crossorigin 属性'' | 'anonymous' | 'use-credentials'
preview-src-list开启图片预览string[][]
z-index预览 z-indexnumber
initial-index初始预览索引,小于 url-list 长度number0
close-on-press-escape是否可按 ESC 关闭 Image Viewerbooleantrue
preview-teleportedimage-viewer 是否插入至 body 元素(父级属性 transform 时应设为 true)booleanfalse
infinite是否无限循环预览booleantrue
zoom-rate缩放事件的缩放速率number1.2
scale预览图像缩放number1
min-scale缩放事件的最小缩放比例number0.2
max-scale缩放事件的最大缩放比例number7
show-progress是否显示预览图片进度条booleanfalse

Events

名称说明类型
load图片加载完成(同原生)(e: Event) => void
error图片加载失败(同原生)(e: Event) => void
switch预览切换图片时(index: number) => void
close预览关闭时() => void
show预览打开时() => void

Slots

名称说明作用域参数
placeholder加载占位内容
error加载失败占位内容
viewer自定义预览区内容(透传给 FxImageViewer)
progress预览页码进度(透传,优先级高于 show-progress){ activeIndex: number, total: number }
toolbar预览工具栏(透传){ actions, prev, next, reset, activeIndex, setActiveItem }
viewer-error预览图加载失败内容(透传){ activeIndex: number, src: string }

Exposes

名称说明类型
showPreview手动打开预览() => void

FxImageViewer 图片预览

独立于 FxImage 的全功能预览组件,也可被 FxImage 内部调用。支持多图切换、缩放、旋转、contain / original 模式切换、鼠标 / 触摸拖拽、滚轮、键盘、加载 / 错误态、过渡动画;还提供命令式 previewImage() 直接预览。

单图预览

多图预览

v-model:show 控制显隐,url-list 传多张地址,show-progress 显示页码。

命令式调用

无需手动维护 showpreviewImage(list) 直接预览,关闭时自动卸载 DOM。

自定义工具栏

toolbar 插槽替换默认工具栏,作用域参数:actions / prev / next / reset / activeIndex / setActiveItem

默认工具栏与交互

不传 toolbar 时显示默认工具栏:放大 / 缩小、模式切换(contain / original)、左转 / 右转、多图时上一张 / 下一张、关闭、页码。

操作效果
鼠标滚轮zoom-rate 缩放
鼠标 / 触摸拖拽移动图片
点击遮罩关闭(hide-on-click-modal 默认开启)
ESC关闭(close-on-press-escape
空格切换 contain / original 模式
← / →切换上一张 / 下一张
↑ / ↓放大 / 缩小

FxImageViewer API

Attributes

参数说明类型默认值
url-list用于预览的图片链接列表string[][]
show(v-model)是否显示booleanfalse
z-index预览遮罩层 z-index(不传取递增值)number
initial-index初始预览索引number0
infinite是否无限循环预览booleantrue
hide-on-click-modal是否可点击遮罩关闭booleantrue
teleported是否插入至 bodybooleantrue
zoom-rate缩放事件的缩放速率number1.2
scale预览图像缩放number1
min-scale缩放事件的最小缩放比例number0.2
max-scale缩放事件的最大缩放比例number7
close-on-press-escape是否可按 ESC 关闭booleantrue
show-progress是否显示进度条booleanfalse
crossorigin原生 crossorigin 属性'' | 'anonymous' | 'use-credentials'

Events

名称说明类型
update:show显隐变化(val: boolean) => void
close关闭时() => void
switch切换图片时(index: number) => void
rotate旋转时(deg: number) => void
error图片加载失败(evt: Event) => void

Slots

名称说明作用域参数
viewer自定义内容(预览区)
progress自定义进度内容(优先级高于 show-progress){ activeIndex: number, total: number }
toolbar自定义工具栏内容{ actions, prev, next, reset, activeIndex, setActiveItem }
viewer-error自定义图像加载失败内容{ activeIndex: number, src: string }

Exposes

名称说明类型
setActiveItem手动切换到指定索引(支持负数 / 越界自动取模)(index: number) => void

命令式

ts
import { previewImage } from "@fx/components"

previewImage(["url1", "url2"]) // 多图
previewImage("url") // 单图(直接传字符串)

实现说明

  • 懒加载:浏览器支持原生 loading="lazy" 时优先用原生;否则用 IntersectionObserver(节流 200ms,throttle 取自 @fx/utils)观察图片是否进入视口,进入后才设 src
  • 预览preview-src-list 非空时,点击图片触发 show 事件并打开 FxImageViewer(透传 zoom / scale / progress / toolbar 等参数与插槽)。
  • 样式:占位 / 失败背景走 --color-surface-muted,失败文字色走 --color-text-placeholder,不引用第三方 UI 库 CSS 变量。

类型声明

ts
type FxImageViewerAction = 'zoomIn' | 'zoomOut' | 'clockwise' | 'anticlockwise'

// toolbar 插槽 actions() 的第二个参数
interface FxImageViewerActionOptions {
  enableTransition?: boolean
  zoomRate?: number
  rotateDeg?: number
}