Skip to content

灯箱

@astryxdesign/core v0.7.1 · Lightbox

Coastal shoreline with ocean waves

A scenic coastline with waves rolling onto a sandy beach beneath a clear sky.

使用方法 ​

Lightbox 用原生 <dialog> 打开媒体。isOpen 用 v-model:is-open 绑定。media 传一个对象就是单张图片或一段视频。传数组就是图库:上一张、下一张和计数一直留在页面上,到头时禁用,而不是消失。

useLightbox({ media }) 管打开状态和下标。把 bindings 绑到 Lightbox 上,缩略图里调用 open(index)。

hasZoom 把图片变成按钮。双击、Enter、Space、+、- 在 1 倍和 2 倍之间切换。放大后可以拖动,方向键每次平移 50px。拖动结束时的那一下点击不会把对话框关掉。视频用浏览器自己的控件,不能缩放。hasAutoPlay 在显示出视频时开始播放。

Escape 和关闭按钮都会发出 update:isOpen,值为 false。点对话框或画面外的遮罩也一样。

vue
<script setup lang="ts">
import { Lightbox, useLightbox } from '@astryx-vue/core/Lightbox'
import { Thumbnail } from '@astryx-vue/core/Thumbnail'

const photo = {
  src: '/template-assets/light-scene-horizontal-1.png',
  alt: 'Coastal shoreline with ocean waves',
  caption: 'A scenic coastline with waves rolling onto a sandy beach beneath a clear sky.',
}
const { bindings, open } = useLightbox({ media: photo })
</script>

<template>
  <Thumbnail :src="photo.src" :alt="photo.alt" :label="photo.alt" @click="open()" />
  <Lightbox v-bind="bindings" />
</template>

建议 ​

建议做法
推荐alt 写出这是什么,caption 补上画面里看不出来的信息。
推荐图库从读者点的那张打开,调用 open(index)。
推荐只有静止图片、而且细节值得看时才打开 hasZoom。
避免给视频加 hasZoom。视频保持浏览器控件,缩放不会生效。
避免alt 留空。对话框名称和图片名称都从这里来。

解剖

部分说明
查看器遮罩铺满视口、装着当前媒体和控件的对话框遮罩。
媒体查看器里正在展示的图片或视频。
关闭按钮关闭查看器的按钮。
上一张画廊里切到上一项媒体的按钮。
下一张画廊里切到下一项媒体的按钮。
说明文字显示在当前媒体下方、由使用方提供的说明。
计数画廊模式里显示的当前位置和总数。

示例 ​

图库

Backpack

A backpack displayed on a neutral background.

1 / 4

缩略图网格打开全屏图库。点任意一张,灯箱就从那一张开始。上一张和下一张可以不关闭就翻完。

视频

A flower blooming in time-lapse

在灯箱里打开视频,使用浏览器自带控件。视频不能缩放,也不能平移。

缩放

Coastal shoreline with ocean waves

A scenic coastline. Double-click to zoom in and drag to pan.

打开缩放和平移。双击图片放大,拖动查看。再双击一次,或点关闭,回到原大小并退出。