🚀 两步集成

Step 1

一行代码接入

无需构建工具,直接在 HTML 中引入 UMD 脚本即可。

<script src="https://unpkg.com/data-preview/dist/data-preview.umd.js"></script>
Step 2

声明属性

给任何 <img> 加上 data-preview,零结构性改动。

<img src="thumb.jpg" data-preview />
HTML<script src="https://unpkg.com/data-preview/dist/data-preview.umd.js"></script> <script>DataPreview.init()</script> <img src="thumb.jpg" data-preview data-preview-src="large.jpg" />

🤖 天然适合 AI 生成

LLM 只需在输出 HTML 中添加 data-preview 属性,无需操心任何交互逻辑。声明即所得。

AI Prompt → HTML用户:生成一个商品列表页 AI:<div class="product"> <img src="p1.jpg" data-preview data-preview-src="p1-hd.jpg" /> ... </div>

基于 data-preview 语义协议,以下四种用法涵盖所有场景。鼠标悬停图片体验预览效果。

最简用法
demo.jpg
原图与缩略图分离
thumb.jpg
自定义标注
demo.jpg
非 img 元素
摄影 城市天际线 收藏级高清摄影作品
悬停或长按查看大图

🖱️ 交互方式

🖼️ PC:悬浮 → 预览图标 → 悬停弹出大图 👆 移动端:点击触发预览 🌙 自动深色模式

⚙️ 配置项

init() 前修改 DataPreview.config 对象:

DataPreview.config.imgPad = 12 DataPreview.config.maxWRatio = 0.85 DataPreview.init()
配置项默认值说明
imgPad8预览框内边距 (px)
maxWRatio0.9预览框最大宽度占窗口比例
maxHRatio0.85预览框最大高度占窗口比例
delayHide150鼠标离开后隐藏延迟 (ms)
badgeOffset6预览图标距离元素右上角的偏移量 (px)

🌐 语义协议

所有 HTML 属性一览:

属性说明
data-preview标记元素支持预览(必需)
data-preview-src大图 URL(省略则复用 src/currentSrc)
data-preview-label预览图底部标注文本(省略则显示尺寸)

🧩 框架无关

React / Vue / Solid / 原生 HTML — 所有框架的用法一致,仅需在生命周期中调用 init()destroy()

HTML (UMD)
<script src="data-preview.umd.js"></script> <script>DataPreview.init()</script>
ESM
import DataPreview from 'data-preview' DataPreview.init()
React
useEffect(() => { DataPreview.init() return () => DataPreview.destroy() }, [])
Vue
onMounted(() => DataPreview.init()) onUnmounted(() => DataPreview.destroy())

📱 移动端

通过 (pointer: coarse) 自动识别触摸设备,点击触发预览,点击遮罩或 ✕ 关闭。无需额外配置。

📘 TypeScript

包含内置类型声明,无需安装 @types

import DataPreview from 'data-preview' DataPreview.config.imgPad = 12 DataPreview.init()

🌍 浏览器支持

Chrome · Edge · Safari · Firefox 所有现代浏览器。UMD + ESM 双格式,兼容各类工程场景。

🔧 API 参考

所有方法挂载在全局 DataPreview 对象上:

DataPreview.init(selector?)

全局初始化。扫描页面中所有匹配元素并绑定,同时启动 MutationObserver 监听后续动态插入的元素。

DataPreview.init() // 默认绑定 [data-preview] DataPreview.init('.product-card') // 自定义选择器
DataPreview.bind(el)

手动绑定单个元素,幂等,重复调用无副作用。

DataPreview.bind(document.querySelector('.my-img'))
DataPreview.bindAll(selector)

手动批量绑定,适合虚拟列表、分页加载等场景。

DataPreview.bindAll('.product-list img')
DataPreview.unbind(el)

解绑单个元素,移除所有事件监听。

DataPreview.unbind(el)
DataPreview.destroy()

完全销毁 runtime,清理 DOM、事件监听、MutationObserver、预加载缓存。适用于 SPA 路由切换。

DataPreview.destroy()