web移动端图片预览组件
ImageViewer是一个用于web移动端的图片预览组件。
demo请使用手机打开链接查看,PC端请打开控制台模拟移动设备 demo
引入方式 常规script标签引入将本项目dist文件夹中的imageViewer.min.js
文件放到目标项目或者CDN,通过script标签加载,访问挂载到全局window的ImageViewer类实例化使用
npm install image-viewer-gallery --save-dev
直接引入import ImageViewer from 'image-viewer-gallery'
即可。
ImageViewer是这个图片预览组件的核心类,实例化第一个入参是图片数组(必传),第二个为一些可选的选项参数对象。 选项参数包括:
container
:一个简单的选择器,代表该图片预览组件所应该插入到的地方(参数可选,默认为body元素);
duration
: 渐变动画速度(参数可选,默认333,单位为ms);
enableScale
:是否启用图片缩放功能(参数可选,默认为true);
enableTapClose
:是否允许单击关闭图片预览(参数可选,默认为false);
fadeInFn
:是否开启图片预览渐变打开效果(参数可选);
fadeOutFn
:是否开启图片预览渐变关闭效果(参数可选);
startIndex
:开始预览的第一张图片所在数组下标,从0开始(参数可选,默认为0);
headerRender
:头部渲染函数,返回一个html字符串并且会被显示在图片预览界面上方,用于自定义头部显示(参数可选);
footerRender
:尾部渲染函数,返回一个html字符串并且会被显示在图片预览界面下方,用于自定义尾部显示(参数可选);
beforeSwipe
:图片开始滑动时的回调函数,入参为当前显示的图片的下标(参数可选);
afterSwipe
:图片滑动结束并且是切换图片时的回调函数,入参为当前显示的图片的下标(参数可选);
swipeFirstRight
:当前图片是第一张并且向右滑动结束时的回调函数,第一个入参为当前ImageViewer实例,第二个入参是滑动的X轴距离(参数可选);
swipeLastLeft
:当前图片是最后一张并且向左滑动结束时的回调函数,第一个入参为当前ImageViewer实例,第二个入参是滑动的X轴距离(参数可选);
fadeInFn
和fadeOutFn
选项的函数,返回值可以是一个元素节点对象,也可以是一个结构为{width,height,top,left}
的对象值,还可以什么都不返回。
headerRender和footerRender返回的html字符串,可以为对应的标签添加上number-current
和number-total
样式类,该组件
会自动寻找拥有这两个样式类的标签,并且在图片滑动时添加一些数据,number-current
样式类对应的是当前图片所在的数组下标,
number-total
样式类对应的是图片总数。
document.addEventListener('DOMContentLoaded', function () { function getElement(index) { // 可以不返回任何一个值,仅仅传入一个空函数指明要开启渐变动画 // 也可以直接返回position数据 {top: 0, left: 0, width: 0, height: 0} // 也可以直接就是一个空函数,不返回任何值(此时只有简单的透明度渐变动画) return document.getElementById('img' + (index + 1)); } // 图片对象说明: // thumbnail: 缩略图的链接(非必传) // url: 原图的链接(必传) var images = [ {url: 'thumbnails/2.jpg', w: 650, h: 347}, {thumbnail: 'thumbnails/3.jpg', url: 'images/3.jpg', w: 1024, h: 625}, {thumbnail: 'thumbnails/4.jpg', url: 'images/4.jpg', w: 1024, h: 750}, {thumbnail: 'thumbnails/5.jpg', url: 'images/5.jpg', w: 1000, h: 879}, {thumbnail: 'thumbnails/6.jpg', url: 'images/6.jpg', w: 1000, h: 562}, {thumbnail: 'thumbnails/7.jpg', url: 'images/7.jpg', w: 1440, h: 900}, {url: 'thumbnails/8.jpg', w: 1024, h: 629}, {url: 'images/233.jpg', w: 864, h: 4390} ]; // 也可以先实例化 var imageViewer = new ImageViewer() // 后续再调用'setImageOption'设置图片数据和'setOption'设置预览选项 // 最后再调用open函数打开预览 window.imageViewer = new ImageViewer(images, { container: 'body', enableScale: true, enableTapClose: true, startIndex: 0, fadeInFn: getElement, fadeOutFn: getElement, headerRender: function () { setTimeout(function () { document.getElementById('close').addEventListener('click', function () { imageViewer.close(); }, false); }, 0); return '<div id="close">关闭</div>'; }, footerRender: function () { return '<span class="number-current"></span>/<span class="number-total"></span>'; }, beforeSwipe: function (current) { console.info('current-before: ' + current); }, afterSwipe: function (current) { console.info('current-after: ' + current); }, swipeLastLeft: function (imageViewer, distance) { console.log('swipeLastLeft', distance); // if (distance > 50) { // imageViewer.setImageOption([{ // thumbnail: 'thumbnails/6.jpg', // url: 'images/6.jpg' // }]); // return true; // } }, swipeFirstRight: function (imageViewer, distance) { console.log('swipeFirstRight', distance); // if (distance > 30) { // imageViewer.setImageOption([ // {thumbnail: 'thumbnails/7.jpg', url: 'images/7.jpg'}, // {thumbnail: 'thumbnails/8.jpg', url: 'images/8.jpg'} // ]); // return true; // } } }); document.getElementsByClassName('img-list')[0].addEventListener('click', function (event) { var index = event.target.getAttribute('data-index'); if (index) { imageViewer.open(parseInt(index)); // imageViewer.open(0); } }, false); }, false);
注意,如果需要渐变打开的动画,不仅仅要提供fadeInFn
函数,还要提供每一张图片的宽高尺寸数据(字段名为w
和h
),如果同时提供thumbnail
和url
字段,则尺寸数据是相对thumbnail
缩略图来说的,否则就是url
大图的尺寸。
ImageViewer类的实例拥有以下可用的API函数:
open
:初始化图片预览组件并且显示,入参为想要展示的图片所在数组下标;
close
:关闭图片预览组件;
destroy
:销毁图片预览组件;
setImageOption
:设置图片数据,第一个入参为图片数组,第二个入参为开始预览的第一张图片所在数组下标;
setOption
:设置预览参数,参考使用示例的ImageViewer类第二个入参参数介绍;
swipeInByIndex
:将对应的图片切换到当前显示界面上,入参为所要展示的图片所在数组下标;
License
MIT License
版权声明:
1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。2、网站不提供资料下载,如需下载请到原作者页面进行下载。