Skip to content

Image 图片 ​

用于展示图片资源,支持可选预览能力。

基础用法 ​

基础图片

适应方式 ​

object-fit 变体

cover(裁切填充)

contain(完整显示)

通过 fit 设置 object-fit,再配合 ::part(image) 固定图片容器尺寸实现裁切效果。

占位与兜底 ​

加载占位

设置 placeholder 后,图片加载完成前显示浅灰占位;加载完成后自动切换为图片。

加载失败兜底

默认失败占位

自定义兜底图

图片加载失败时默认显示「图片加载失败」占位;提供 fallback 属性可指定兜底图片地址,兜底图也失败时回退到占位文案。

懒加载 ​

懒加载长列表(滚动逐图加载)

设置 lazy 后图片进入视口才发起加载;配合 placeholder 展示「加载中」占位。向下滚动列表,观察占位 → 加载的过渡(视口内图片立即加载)。

预览 ​

点击预览(内置浮层)

点击图片打开全屏预览浮层:工具栏支持放大/缩小/旋转/水平翻转/垂直翻转/下载,放大后可拖拽平移、滚动滚轮缩放;触屏支持双指捏合缩放(锚定双指中点,中点移动自带平移)与单指拖拽平移;Esc 或点击遮罩关闭;打开时聚焦关闭按钮,关闭后还原焦点。派发 oas-preview 事件(detail 含 src)。

预览浮层打开时挂载到 document.body(portal),规避组件位于 transform/filter 祖先内时 position: fixed 失效的问题;portal 期间 ::part(preview-*) 无法从宿主穿透,定制请走 CSS 变量。

图集预览 ​

图集预览(多图翻页)

设置 preview-src-list(JSON URL 数组)进入图集模式:点击后可用两侧箭头、工具栏翻页按钮或键盘 ←→ 翻页,页码指示「n/total」;某张加载失败显示失败占位(复用 error 插槽内容)而非空白。

无限循环(infinite)

加 infinite 后翻页首尾循环:最后一张再「下一张」回到第一张,第一张再「上一张」跳到最后一张。

缩略图与原图分离 ​

preview-src(缩略图与原图分离)

列表内显示 src 缩略图,点开预览时加载 preview-src 指定的高清原图(下载地址同步指向原图)。

受控预览 ​

受控预览(preview-open + openPreview())

打开预览当前状态:预览未打开

外部按钮调 openPreview() 方法打开;preview-open 属性在场时受控当前开合态——内部开合(点击/Esc/关闭按钮)会反射回该属性并派发 oas-preview-change(detail { open }),外部增删该属性同样驱动开合(双向同步)。

自定义工具栏 ​

自定义工具栏(slot=toolbar + oas-toolbar-render)

提供 template[slot="toolbar"] 后,模板内容被克隆进预览浮层工具栏区并替换默认按钮组(原模板保留在 light DOM;无模板时维持默认工具栏)。克隆完成与每次打开预览都会派发 oas-toolbar-render:在事件回调里用 detail 的 element(工具栏容器)与 actions(查看器命令)把自定义按钮接到预览命令即可,上图按钮均已接线可直接点击。

oas-toolbar-render 的 detail 为 { element, actions }:element 是克隆后的工具栏容器(宿主在其上绑定按钮事件,重复绑定幂等);actions 命令集合如下(图集模式下 prev/next 有效,单图模式为 no-op):

命令说明
zoomIn / zoomOut放大 / 缩小一档(与滚轮、默认按钮同一份 transform 状态机)
rotateLeft / rotateRight逆时针 / 顺时针旋转 90°
flipX / flipY水平 / 垂直翻转
download触发当前预览图下载
close关闭预览浮层(等价 Esc / 点遮罩)
prev / next图集上一张 / 下一张(受 infinite 边界约束,同默认翻页)

宿主接线示例:

js
el.addEventListener('oas-toolbar-render', (e) => {
  const { element, actions } = e.detail
  element.querySelector('#my-zoom-in').onclick = actions.zoomIn
})

oas-image-group 共享预览同样支持:把 template[slot="toolbar"] 直接放在组图内即可透传到共享浮层。自定义工具栏的按钮自动获得 token 化基础样式(light/dark 可读),并参与 Tab 焦点陷阱。

加载事件 ​

加载事件(oas-load / oas-error)

加载成功 → oas-load

加载失败 → oas-error

主图加载成功派发 oas-load、最终失败派发 oas-error(detail 均含 src);fallback 重试期间不派发 oas-error,兜底图也失败时才派发(detail.src 为兜底图地址)。

自定义占位与失败插槽 ​

自定义 placeholder / error 插槽

slot="placeholder"

slot="error"

template[slot="placeholder"] / template[slot="error"](或任意带同名 slot 属性的元素)会被克隆进对应占位区,优先于内置文案;图集预览中某张加载失败也复用 error 插槽内容。

翻转 ​

翻转(flipX / flipY)

工具栏提供「水平翻转」「垂直翻转」,与缩放、旋转、拖拽平移串接为同一份 transform 状态机,互不打断。

拖拽与滚轮缩放 ​

拖拽平移 + 滚轮缩放(大图/长图)

放大后在预览图上按住拖拽平移(超出可视范围的部分按边界自动收敛),在预览区滚动滚轮缩放(已阻断页面滚动)。缩放步进与上下限可经 CSS 变量覆盖(见下表)。

相册墙组合 ​

相册墙(多图各自进图集)

网格排布多张缩略图,点击任意一张从该张开始进入同一图集翻页(主图 src 命中列表时按该张起开)。

图集容器(oas-image-group) ​

图集容器(声明式图片墙 → 共享预览)

把多个 oas-image 放进 oas-image-group,容器自动收集为共享图集:点击任一图片从该张起打开预览,两侧箭头 / 键盘 ←→ 在整组图间翻页(页码 n/total)。子图带 preview 时点击同样被容器接管为组图集,不再需要各自配置 preview-src-list。

子图动态增删(或修改 src)图集自动同步;current 可选受控当前索引——属性在场时点击按 current 起开、内部翻页反射回该属性,缺席时不造属性、仅派发 oas-change(detail { current, prev },演示见上方消息反馈);infinite 透传共享预览。

与 preview-src-list 的关系:preview-src-list 适合「数据数组驱动」的单点图集入口(一张缩略图代表整组);oas-image-group 适合「声明式图片墙」——每张子图天然是图集成员,DOM 里加图即入集。两者共享同一份预览浮层能力(缩放/旋转/翻转/下载/Esc/遮罩/焦点陷阱);组内子图仍可用 preview-src 指定预览原图、用 preview-src-list 把单张子图展平为多张。组图默认 flex 换行排列,间距可经 CSS 变量 --oas-image-group-gap 覆盖。

预览缩放 CSS 变量 ​

CSS 变量默认值说明
--oas-image-zoom-step0.5每次放大/缩小的步进(工具栏按钮与滚轮共用)
--oas-image-zoom-min0.5缩放下限
--oas-image-zoom-max3缩放上限

在宿主元素或主题层覆盖即生效,例如 style="--oas-image-zoom-max: 5"。

显式尺寸与 Referrer 策略 ​

width / height 显式尺寸:数字按 px,也接受任意 CSS 尺寸串(如 50%),写在内层 img 上(max-width: 100% 响应式约束保留);空值清除恢复 auto 布局。referrerpolicy 透传内层 img 控制隐私策略(如 no-referrer),空值回落浏览器默认。

显式尺寸 width / height

referrerpolicy 透传

API ​

oas-image ​

属性 ​

属性说明类型默认值
alt替代文本——
fallback加载失败时切换的兜底图地址;未设置则显示「图片加载失败」占位string—
fitobject-fit 值string—
height显式高度(同 width 规则)string—
infinite图集首尾循环切换boolean—
lazy懒加载:图片进入视口才发起加载(IntersectionObserver);已位于视口内立即加载;环境不支持时退化为立即加载boolean—
placeholder加载完成前显示浅灰占位boolean—
preview开启内置预览:点击放大 + 缩放/旋转/下载 + Esc 关闭 + 焦点陷阱boolean—
preview-open受控预览开合(属性在场受控,配合 oas-preview-change 双向;另见 openPreview() 方法)boolean—
preview-src预览原图 URL(缩略图与原图分离;缺省用 src)string—
preview-src-list图集预览:URL JSON 数组,点开后 prev/next 翻页 + 页码 + 键盘 ←→string—
referrerpolicy透传内层 img 的 Referrer 策略string—
src图片地址string—
width显式宽度(数字按 px,CSS 尺寸串原样透传,空值恢复 auto)string—

事件 ​

事件说明
oas-error图片最终失败(回退链耗尽),detail: { src }
oas-load图片加载成功,detail: { src }
oas-preview打开预览浮层,detail: { src };浮层关闭不派发事件
oas-preview-change预览开合变化,detail: { open }
oas-preview-nav图集翻页/跳转,detail: { index, src };供 oas-image-group 容器接管索引
oas-toolbar-render自定义工具栏渲染通知(克隆完成与每次打开预览均派发,宿主重复绑定幂等),detail { element, actions }:element 为克隆后的工具栏容器,actions 为查看器命令集合

插槽 ​

名称说明
template[slot="error"]自定义失败占位内容(主图与图集预览失败位复用)
template[slot="placeholder"]自定义加载占位内容(缺省为浅灰占位 + 文案)
template[slot="toolbar"]自定义预览工具栏内容:克隆进浮层工具栏区并替换默认按钮组(缺席维持默认);克隆完成与每次打开预览派发 oas-toolbar-render(detail { element, actions }),actions 命令:zoomIn/zoomOut/rotateLeft/rotateRight/flipX/flipY/download/close/prev/next(单图模式 prev/next 无效)

oas-image-group ​

属性 ​

属性说明类型默认值
current当前图集索引(可选受控):属性在场时受控——点击按 current 起开、内部翻页反射回该属性、外部改属性驱动预览跳图;缺席时不造属性,仅派发 oas-change——
infinite翻页首尾循环(透传共享预览宿主)boolean—

事件 ​

事件说明
oas-change图集切换,detail: { current, prev }
oas-preview打开共享预览浮层,detail: { src }(src 为当前张地址)

插槽 ​

名称说明
默认图集成员(oas-image)
template[slot="toolbar"]透传共享预览宿主:自定义共享预览浮层的工具栏(克隆替换默认按钮组 + oas-toolbar-render 命令通道,同 oas-image)

CSS 变量 ​

CSS 变量默认值
--oas-image-group-gapvar(--oas-space-3)

基于 MIT OR Apache-2.0 双许可发布