@fisch0920/medium-zoom

中文文档
1.0.7发布于 2022/04/12MITTypeScriptESM + CJS零依赖近 30 天下载 24万

用于缩放像中图像的 JavaScript 库

中文使用文档
文档目录15 节
  1. 中区
  2. 特征
  3. 安装
  4. 使用量
  5. API 密码
  6. 选择器
  7. 选项
  8. 方法
  9. 属性
  10. 活动
  11. 实例
  12. 调试
  13. 浏览器支持
  14. 捐款
  15. 许可证

Demo

中区

用于缩放像中图像的 JavaScript 库

version MIT license downloads
gzip size no dependencies travis

Medium Zoom Demo

游戏场 ・ 德莫语 ・ · 故事本

目录

特征

  • 📱 响应 —— 说 移动和桌面上的缩放
  • 🚀 表演和轻量级 —— 说 应该能达到60岁 fps 数据
  • ⚡️ 高定义支持 —— 说 将您的图像 HD 版本装入缩放
  • 🔎 灵活性 —— 说 将缩放应用到选定的图像
  • 🖱 鼠标、键盘和手势友好 —— 说 单击任何地方,按键或滚动向外键关闭缩放
  • 🎂 事件处理 —— 说 当缩放进入新状态时触发事件
  • 📦 自定义 —— 说 设置您自己的边距、 背景和滚动相左
  • 🔧 可插件 —— 说 将自己的特性添加到缩放中
  • 💎 自定义模板 —— 说 扩展默认视图以匹配您的应用程序的 UI

安装

该模块可在 无 登记.

npm install medium-zoom
# or
yarn add medium-zoom
下载
光盘N

使用量

在浏览器里试试

导入库为模块 :

import mediumZoom from 'medium-zoom'

或用脚本标记导入库 :

<script src="node_modules/medium-zoom/dist/medium-zoom.min.js"></script>

就这样! 您不需要导入任何 CSS 样式 .

假设您添加 data-zoomable 图像属性 :

mediumZoom('[data-zoomable]')

API 密码

mediumZoom(selector?: string | HTMLElement | HTMLElement[] | NodeList, options?: object): Zoom

选择器

选择器允许将图像附加到缩放上 。 它可以分为以下几种类型:

// CSS selector
mediumZoom('[data-zoomable]')

// HTMLElement
mediumZoom(document.querySelector('#cover'))

// NodeList
mediumZoom(document.querySelectorAll('[data-zoomable]'))

// Array
const images = [
  document.querySelector('#cover'),
  ...document.querySelectorAll('[data-zoomable]'),
]

mediumZoom(images)

选项

选项可以实现缩放的定制。 它们被定义为具有下列属性的对象:

财产类型默认说明
marginnumber0缩放图像外的空间
backgroundstring"#fff"重叠的背景
scrollOffsetnumber40要滚动以关闭缩放的像素数
containerstring | HTMLElement | objectnull缩放的取景口
更多信息
templatestring | HTMLTemplateElementnull缩放时要显示的模板元素
更多信息
mediumZoom('[data-zoomable]', {
  margin: 24,
  background: '#BADA55',
  scrollOffset: 0,
  container: '#zoom-container',
  template: '#zoom-template',
})

方法

open({ target?: HTMLElement }): Promise<Zoom>

打开缩放并返回用缩放解析的保证.

const zoom = mediumZoom('[data-zoomable]')

zoom.open()

显示事件 open 动画开始和 opened 完成时.

close(): Promise<Zoom>

关闭缩放并返回用缩放解析的保证 .

const zoom = mediumZoom('[data-zoomable]')

zoom.close()

显示事件 close 动画开始和 closed 完成时.

toggle({ target?: HTMLElement }): Promise<Zoom>

当关闭时打开缩放 / 当打开时删除缩放 , 并返回与缩放解析的保证 .

const zoom = mediumZoom('[data-zoomable]')

zoom.toggle()

attach(...selectors: string[] | HTMLElement[] | NodeList[] | Array[]): Zoom

将图像附于缩放并返回缩放.

const zoom = mediumZoom()

zoom.attach('#image-1', '#image-2')
zoom.attach(
  document.querySelector('#image-3'),
  document.querySelectorAll('[data-zoomable]')
)

detach(...selectors: string[] | HTMLElement[] | NodeList[] | Array[]): Zoom

从缩放中释放图像并返回缩放.

const zoom = mediumZoom('[data-zoomable]')

zoom.detach('#image-1', document.querySelector('#image-2')) // detach two images
zoom.detach() // detach all images

显示事件 detach 在图像.

update(options: object): Zoom

更新选项并返回缩放.

const zoom = mediumZoom('[data-zoomable]')

zoom.update({ background: '#BADA55' })

显示事件 update 在缩放的每个图像上.

clone(options?: object): Zoom

以所提供的选项将 Clones 缩放与当前选项合并并返回缩放 .

const zoom = mediumZoom('[data-zoomable]', { background: '#BADA55' })

const clonedZoom = zoom.clone({ margin: 48 })

clonedZoom.getOptions() // => { background: '#BADA55', margin: 48, ... }

on(type: string, listener: () => void, options?: boolean | AddEventListenerOptions): Zoom

在缩放的每个目标上注册听众.

一样 options 作为 addEventListener 被使用.

const zoom = mediumZoom('[data-zoomable]')

zoom.on('closed', event => {
  // the image has been closed
})

zoom.on(
  'open',
  event => {
    // the image has been opened (tracked only once)
  },
  { once: true }
)

缩放对象可以在 event.detail.zoom。 。 。 .

off(type: string, listener: () => void, options?: boolean | AddEventListenerOptions): Zoom

删除缩放每个目标上先前已注册的收听器.

一样 options 作为 removeEventListener 被使用.

const zoom = mediumZoom('[data-zoomable]')

function listener(event) {
  // ...
}

zoom.on('open', listener)
// ...
zoom.off('open', listener)

缩放对象可以在 event.detail.zoom。 。 。 .

getOptions(): object

返回缩放选项为对象.

const zoom = mediumZoom({ background: '#BADA55' })

zoom.getOptions() // => { background: '#BADA55', ... }

getImages(): HTMLElement[]

返回附在缩放上的图像,作为 HTMLElement编号。 。 。 .

const zoom = mediumZoom('[data-zoomable]')

zoom.getImages() // => [HTMLElement, HTMLElement]

getZoomedImage(): HTMLElement

返回当前缩放的图像 HTMLElement 或者说 null 如果没有.

const zoom = mediumZoom('[data-zoomable]')

zoom.getZoomedImage() // => null
zoom.open().then(() => {
  zoom.getZoomedImage() // => HTMLElement
})

属性

data-zoom-src

指定在缩放时打开的高定义图像。 此图像在用户点击源图像时会加载.

<img src="image-thumbnail.jpg" data-zoom-src="image-hd.jpg" alt="My image" />

活动

活动说明
打开立即开火 open 方法称为
打开当缩放完成动画时被解除
关闭立即开火 close 方法称为
关闭当缩放完成动画时被点燃
调离发射时 detach 方法称为
更新发射时 update 方法称为
const zoom = mediumZoom('[data-zoomable]')

zoom.on('open', event => {
  // track when the image is zoomed
})

缩放对象可以在 event.detail.zoom。 。 。 .

实例

从另一个元素触发缩放
const button = document.querySelector('[data-action="zoom"]')
const zoom = mediumZoom('#image')

button.addEventListener('click', () => zoom.open())
跟踪事件( 用于分析)

你可以用这个 open 用于跟踪用户与您图像交互次数的事件。 如果您想要收集一些关于用户参与的分析数据, 这会有所帮助 .

let counter = 0
const zoom = mediumZoom('#image-tracked')

zoom.on('open', event => {
  console.log(`"${event.target.alt}" has been zoomed ${++counter} times`)
})
关闭后切开缩放
const zoom = mediumZoom('[data-zoomable]')

zoom.on('closed', () => zoom.detach(), { once: true })
附加 j 查询元素

j 查询元素兼容 medium-zoom 已转换为数组.

mediumZoom($('[data-zoomable]').toArray())
创建可缩放的回放组件

使用反应钩

import React from 'react'
import mediumZoom from 'medium-zoom'

function ImageZoom({ zoom, src, alt, background }) {
  const zoomRef = React.useRef(zoom.clone({ background }))

  function attachZoom(image) {
    zoomRef.current.attach(image)
  }

  return <img src={src} alt={alt} ref={attachZoom} />
}

function App() {
  const zoom = React.useRef(mediumZoom({ background: '#000', margin: 48 }))

  render() {
    return (
      <ImageZoom src="image.jpg" alt="Image" zoom={zoom.current} color="#BADA55" />
    )
  }
}

使用反应类

import React, { Component } from 'react'
import mediumZoom from 'medium-zoom'

class ImageZoom extends Component {
  zoom = this.props.zoom.clone({
    background: this.props.color,
  })

  attachZoom = image => {
    this.zoom.attach(image)
  }

  render() {
    return (
      <img src={this.props.src} alt={this.props.alt} ref={this.attachZoom} />
    )
  }
}

class App extends Component {
  zoom = mediumZoom({ background: '#000', margin: 48 })

  render() {
    return (
      <ImageZoom src="image.jpg" alt="Image" zoom={this.zoom} color="#BADA55" />
    )
  }
}

你看见了 更多实例 包括 反应 财务报告和审定财务报表 阴道,或检查 故事书。 。 。 .

调试

缩放的图像不可见

图书馆不提供 z-index 值在缩放图像上,以避免与其他框架相冲突。 一些框架可规定 z-index 他们的元素, 这使得放大的图像不可见.

如果是这样,你可以提供 z-index 您 CSS 中的值 :

.medium-zoom-overlay,
.medium-zoom-image--opened {
  z-index: 999;
}

浏览器支持

独立边缘颜色火花萨法里
10个* 联合国第12条* 联合国第36条页:1第9条

* 联合国 这些浏览器需要 template 多边填充 使用时 自定义模板。 。 。 .

交叉浏览器测试由

BrowserStack

捐款

  • 运行 yarn 以安装节点依赖
  • 运行 yarn start 以监视模式构建库
  • 运行 yarn run storybook 在http://localhost:9001上查看您的更改

请读一下 提供指南 更详细的解释.

您还可以使用 无。 。 。 .

许可证

麻省理工学院 弗朗索瓦·查利福尔

版本与发布记录

@fisch0920/medium-zoom 共发布 2 个版本,首次发布于 2022/04/12;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.0.7latest2022/04/124 年前
1.0.62022/04/124 年前

关于 @fisch0920/medium-zoom 的常见问题

@fisch0920/medium-zoom 是什么?

用于缩放像中图像的 JavaScript 库

如何安装 @fisch0920/medium-zoom?

在项目目录运行 npm install @fisch0920/medium-zoom,或使用 pnpm add / yarn add / bun add。

@fisch0920/medium-zoom 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@fisch0920/medium-zoom 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@fisch0920/medium-zoom 可以商用吗?

@fisch0920/medium-zoom 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@fisch0920/medium-zoom 的下载量有多少?

根据 npm 官方下载统计,@fisch0920/medium-zoom 在 2026/10/15 – 2026/11/13 这 30 天内被下载 239,910 次,日均约 7,997 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@fisch0920/medium-zoom 还在维护吗?

最新版本 1.0.7 发布于 2022/04/12(4 年前);至今共发布 2 个版本,其中过去 12 个月发布了 0 个;首次发布于 2022/04/12。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。