img-previewer

像 iOS 相册一样看图:照片从原位放大到屏幕中央,关闭时再缩回原处。动画全部由 CSS transform 驱动,切换、缩放都很顺滑。

  • ≈ 5 KB gzip 后的 JS
  • 0 依赖
  • 支持双指缩放和键盘操作
npm i img-previewer

操作方式

打开预览后可以这样操作,移动端支持双指缩放。

  • 缩放图片鼠标滚轮或 + -
  • 拖动图片放大后按住拖动
  • 上一张 / 下一张← →
  • 关闭预览Esc 或点击空白处
  • 旋转、缩放、重置右上角工具栏

安装

npm i img-previewer
# 或
pnpm add img-previewer

也可以直接通过 CDN 引入:

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/img-previewer/dist/index.css">
<script src="https://cdn.jsdelivr.net/npm/img-previewer/dist/img-previewer.min.js"></script>

使用

传入一个 CSS 选择器,选择器内的所有 <img> 都可以点击预览,不需要改动已有的 HTML。

import ImgPreviewer from 'img-previewer'
import 'img-previewer/dist/index.css'

const previewer = new ImgPreviewer('#app', {
  fillRatio: 0.8,
  onShow({ index, img }) {},
  onHidden({ index, img }) {}
})

图片是动态加载的?渲染完成后调用 previewer.update() 即可。

配置项

名称说明默认值
fillRatio图片占预览区域的比例0.8
dataUrlKey存放大图地址的属性名src
triggerEvent触发预览的事件,click 或 dblclickclick
imageZoom缩放配置:min、max、step1 / 5 / 0.1
style样式配置:modalOpacity、headerOpacity、zIndex0.6 / 0 / 99
i18n工具栏提示文字,默认按浏览器语言显示中文或英文自动
bubblingLevel向上检查父元素是否被 CSS 隐藏的层数0
hideOriginal预览时隐藏页面上原位的图片true
duration打开和关闭动画的时长(毫秒),切换和缩放动画按比例跟随400
onBeforeShow打开前调用,返回 false 取消打开—
onShow开始打开时调用—
onShown打开动画结束后调用—
onChange切换图片时调用,额外带 prevIndex—
onBeforeHide关闭前调用,返回 false 取消关闭—
onHide开始关闭时调用(别名 onClose)—
onHidden关闭动画结束后调用—

生命周期回调都会收到 { index, img },img 是页面上原来的图片元素。

实例方法

方法说明
show(index)预览指定索引的图片
next() / prev()切换到下一张 / 上一张
hide()关闭预览
update()重新收集图片列表
getTotalIndex()获取最后一张图片的索引
destroy()销毁实例,移除事件监听和 DOM