jQuery 图片查看插件 Magnify 开发简介(仿 Windows 照片查看器)

原创 2017年12月25日 13:06:53

前言

因为一些特殊的业务需求,经过一个多月的蛰伏及思考,我开发了这款 jQuery 图片查看器插件 Magnify,它实现了 Windows 照片查看器的所有功能,比如模态窗的拖拽、调整大小、最大化,图片的缩放、平移、旋转,键盘控制等。插件的样式都是最基础的 CSS,定制非常容易,可以轻松修改成自己喜欢的样式。随后会陆续发布 React 及 Vue 相关版本的插件。本文主要介绍插件的特点及使用方法,而关于插件开发的细节将会在之后的具体文章中说明。

Github: https://github.com/nzbin/magnify

Website: https://nzbin.github.io/magnify

开发小记

由于最近工作繁忙,几乎每天都是晚上十点到家,然后开始编写插件,睡觉时已过凌晨,如今身心俱疲。因为没有找到相关的插件,所以很多问题都是绞尽脑汁独立思考,比如以鼠标为中心缩放图片、改变弹窗大小时对图片移动的限制、图片旋转之后的缩放、平移等问题,而开发插件最让人头疼的就是细节,甚至大部分时间是在修复单一功能的 bug 。

另外,开发插件的最大难度不是功能实现,而是如何设计插件,如何让插件的使用更简单、更方便。关于如何设计插件并不是本篇文章的重点,我会在之后专门写一篇介绍插件设计思想的文章。

插件所有的代码几乎都是在调整弹窗或者图片的 width、height、left、top ,所以兼容性问题不大,主要是 2D 旋转问题,IE 9 以下需要使用滤镜实现。为了方便调整样式,其中有很多相对位置的计算。

Magnify 采用了文件分离的方式编写,使用 npm 插件打包,并没有使用新语法,也没有使用现在流行的打包工具。使用 npm 工具已经是项目开发打包发布的一个趋势。

演示

如果你不想点开网址查看示例的话,可以通过下面的 CodePen 查看插件效果,除了视窗的大小之外,两种方式没有任何区别:

See the Pen A jQuery lightbox plugin to view images just like in Windows.

如果你的网速和其他原因不能打开 CodePen 的话,可以查看下面的图片演示。

主要功能

Magnify 的功能可以参考 Windows 照片查看器,基本完成了可以实现的所有功能。

1.模态窗拖拽

如果图片尺寸不大于展示区域,通过图片展示区域也可以拖拽弹窗。这和 QQ 图片查看器的操作方式是相同的。

这里写图片描述

2.模态窗调整大小

可以通过参数设置模态窗的最小宽高。目前的调整大小存在一点 bug,但不影响整体的使用。

这里写图片描述

3.模态窗最大化

这里写图片描述

4.图片缩放

可以通过鼠标滚轮、按钮、键盘等操作。

这里写图片描述

5.图片旋转

目前的图片旋转功能还没有添加支持 IE9 以下版本的代码。

这里写图片描述

6.键盘控制

Magnify 和 Windows 照片查看器的按键是一样的。

  • 上一张
  • 下一张
  • + 放大
  • - 缩小
  • ctrl + alt + 0 实际尺寸
  • ctrl + , 向左旋转
  • ctrl + . 向右旋转

7.全屏显示

Magnify 的全屏显示只实现了基本的展示功能,还没有实现幻灯片自动轮播的功能。全屏环境下使用键盘控制图片。

使用方法

Magnify 的使用和其他大多数 lightbox 插件的用法并没有两样,如果你习惯了其它插件的使用,使用 Magnify 也不会有任何障碍。

1.需要引用的文件


<link href="/path/to/magnify.css" rel="stylesheet">
<script src="/path/to/jquery.js"></script>
<script src="/path/to/jquery.magnify.js"></script>

Magnify 默认使用 font-awesome 的图标,所以需要引用 font-awesome 的 css 文件。如果你想使用其它图标,可以修改 options 的 icons 参数。在之后的版本中,我可能会添加定制的字体图标文件或者使用 svg 图标。


<link href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">

2.HTML 结构

Magnify 默认使用以下结构,这样的结构可以做兼容处理,也是大多数 lightbox 使用的结构。

<a data-magnify="gallery" href="big-1.jpg">
  <img src="small-1.jpg">
</a>
<a data-magnify="gallery" href="big-2.jpg">
  <img src="small-2.jpg">
</a>
<a data-magnify="gallery" href="big-3.jpg">
  <img src="small-3.jpg">
</a>

也可以使用下面更简洁的结构


<img data-magnify="gallery" data-src="big-1.jpg" src="small-1.jpg">
<img data-magnify="gallery" data-src="big-2.jpg" src="small-2.jpg">
<img data-magnify="gallery" data-src="big-3.jpg" src="small-3.jpg">

Magnify 的 HTML 结构包含以下几个选项

  • 添加 data-src 属性可以链接到大图。如果在 <a> 标签中使用,它会覆盖 href 属性的值。
  • 添加 data-caption 属性可以显示标题。如果你不使用这个属性,插件会显示 URL 中的图片名。
  • 添加 data-group 属性可以对图片分组。

3.初始化插件

如果在 HTML 中添加 data-magnify 属性,插件会自动初始化。

手动初始化插件的方法和所有 jQuery 插件一样:

$('[data-magnify=gallery]').magnify(options);

参数配置

options = {
    draggable: true,
    resizable: true,
    movable: true,
    keyboard: true,
    title: true,
    modalWidth: 320,
    modalHeight: 320,
    fixedContent: true,
    fixedModalSize: false,
    initMaximized: false,
    gapThreshold: 0.02,
    ratioThreshold: 0.1,
    minRatio: 0.1,
    maxRatio: 16,
    headToolbar: [
      'maximize',
      'close'
    ],
    footToolbar: [
      'zoomIn',
      'zoomOut',
      'prev',
      'fullscreen',
      'next',
      'actualSize',
      'rotateRight'
    ],
    icons: {
      maximize: 'fa fa-window-maximize',
      close: 'fa fa-close',
      zoomIn: 'fa fa-search-plus',
      zoomOut: 'fa fa-search-minus',
      prev: 'fa fa-arrow-left',
      next: 'fa fa-arrow-right',
      fullscreen: 'fa fa-photo',
      actualSize: 'fa fa-arrows-alt',
      rotateLeft: 'fa fa-rotate-left',
      rotateRight: 'fa fa-rotate-right'
    }
}

关于插件参数的具体含义,我就不在此复制黏贴了,请大家参考 官方文档 的详细说明。如有问题,可以在此留言。

自定义样式

这里写图片描述

因为插件的样式比较简单,所以修改起来也比较容易。除了 Windows 照片查看器,QQ 的图片查看器也非常的高大上。我们只要简单修改就可以实现 QQ 图片查看器的效果,但是部分功能比如缩略图还没有实现。

See the Pen Magnify with another viewer style

面对这样的图片查看器足以令人心旷神怡~

总结

目前插件整体已经趋于完善,但仍然有很多需要修改及添加的细节,尤其对移动端的支持,大家可以 star 一下随时关注项目的更新动态。关于插件的介绍就不再赘述了,如果大家发现了 Bug 或者有更好的建议,可以在 GitHub 中提问,也可以在此留言,大家的支持是我前进的最大动力!如果这款插件对你有帮助或者你在项目中使用了这款插件,欢迎留言告知!

版权声明:本文为博主原创文章,未经博主允许不得转载。

jquery实现简单的图片查看器

jquery pluin
  • KrystalQ
  • KrystalQ
  • 2015年12月17日 17:00
  • 632

基于jQuery的一个简单的图片查看器实现

项目中自己diy了一个图片查看器。因为初始代码不是自己的,只是在上面改了一下也没有弄的很漂亮。等以后有时间了在重写一下样式和封装,作为备用的只是积累吧。如果有童鞋有用到,完全可以在此基础上改,比较容易...
  • hj7jay
  • hj7jay
  • 2016年05月12日 13:15
  • 1408

iOS开发之图片查看器

可以学到UIButton,UIImageView,UILabel的代码创建。实现一个简单的点击按钮,切换图片的小程序。 知识点: 在getter方法中,不要使用self.imageList(会调用...
  • a191030148
  • a191030148
  • 2015年11月16日 22:59
  • 2271

C#调用电脑的默认图片浏览器软件打开图片

private void 调用Window显示ToolStripMenuItem_Click(object sender, EventArgs e) { str...
  • u010771437
  • u010771437
  • 2014年10月16日 17:20
  • 3507

10款响应式 jQuery实现图片效果插件

1.基于jQuery实现的汇图网大屏焦点图效果 汇图网大屏jQuery焦点图代码,可设置切换模式,如淡入淡出切换,左右滚动切换,上下滚动切换,可设置是否自动轮播,可设置鼠标划过是否停止播放等。 ...
  • bingqingsuimeng
  • bingqingsuimeng
  • 2015年01月12日 19:59
  • 2099

仿微信朋友圈图片查看器

项目中有个需求,点击图片缩略图查看大图,并且是用gridview展示的图片,也就是说不止一张图片,为了提高用户体验,点击大图自然能滑动看最好了。 所以百度看了一篇技术贴: 本文参考原文,感谢:htt...
  • qq_33703877
  • qq_33703877
  • 2016年07月31日 18:14
  • 916

Android仿微信朋友圈图片查看器

看博文之前,希望大家先打开自己的微信点到朋友圈中去,仔细观察是不是发现朋友圈里的有个“九宫格”的图片区域,点击图片又会跳到图片的详细查看页面,并且支持图片的滑动和缩放?这个功能是不是很常用呢?!那么我...
  • lee_tianya
  • lee_tianya
  • 2014年10月20日 00:02
  • 30612

XP图片查看器的替代软件-超简版ACDSee

(图1)Win2000下可以达到WinXp图片查看器效果的软件..Win2000Sp4是个很不错的系统除了主题和部份小功能外其兼容性及实用性可以说超过xp。可能因为Win2000刚出来给人们的印象不好...
  • ys166com
  • ys166com
  • 2017年03月17日 18:27
  • 174

发布两款JQ小插件(图片查看器 + 分类选择器)

图片查看器,github地址:https://github.com/VaJoy/imgViewer 效果如下:   这款当初大概写了2小时,有点匆忙地赶出来的,使用的接口很简单:...
  • natalie86
  • natalie86
  • 2015年02月05日 09:45
  • 604

Android仿微信朋友圈图片查看器

看博文之前,希望大家先打开自己的微信点到朋友圈中去,仔细观察是不是发现朋友圈里的有个“九宫格”的图片区域,点击图片又会跳到图片的详细查看页面,并且支持图片的滑动和缩放?这个功能是不是很常用呢?!那么我...
  • swh9294
  • swh9294
  • 2016年08月04日 18:35
  • 953
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jQuery 图片查看插件 Magnify 开发简介(仿 Windows 照片查看器)
举报原因:
原因补充:

(最多只允许输入30个字)