【JavaScript 插件】图片展示插件 PhotoSwipe 初识

前言:

考虑自己网站的图片展示,而且要支持移动端和PC端。自己写的代码也不尽如意,要写好的话也需要时间,于是就想到了使用相关插件。

准备:

PhotoSwipe 官网地址:http://photoswipe.com/

【JavaScript 插件】图片展示插件 PhotoSwipe 初识

英语还可以的同学可以看官方文档学习:http://photoswipe.com/documentation/getting-started.html

下载对应的几个CSS、JS文件就可以了:https://github.com/dimsemenov/PhotoSwipe/tree/master/dist

【JavaScript 插件】图片展示插件 PhotoSwipe 初识

正文:

进入正题,我们先把下载的文件添加到项目里面,然后就可以下面的步骤了。

1.引用JS、CSS文件

html;toolbar:false</p> <pre><code> **2.添加 PhotoSwipe 的图片展示窗口的 HTML 代码** ;toolbar:false

3.初始化

我们先简单的了解下,这个通过 JS 进行初始化,图片信息使用指定的两个图片文件信息:

js;toolbar:false var openPhotoSwipe = function () { var pswpElement = document.querySelectorAll('.pswp')[0]; // build items array var items = [ { src: 'https://farm2.staticflickr.com/1043/5186867718_06b2e9e551_b.jpg', w: 964, h: 1024 }, { src: 'https://farm7.staticflickr.com/6175/6176698785_7dee72237e_b.jpg', w: 1024, h: 683 } ];</p> <p>// define options (if needed) var options = { // history & focus options are disabled on CodePen history: false, focus: false, showAnimationDuration: 0, hideAnimationDuration: 0 }; var gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, options); gallery.init(); }; openPhotoSwipe();</p> <pre><code> 这样简单的效果就出来了。 演示地址:[http://www.ycdoit.com/plugins/photoswipe/index1.html](http://www.ycdoit.com/plugins/photoswipe/index1.html) 页面源代码:[https://github.com/YeXiaoChao/yexiaochao.github.io/blob/master/plugins/PhotoSwipe/index1.html](https://github.com/YeXiaoChao/yexiaochao.github.io/blob/master/plugins/PhotoSwipe/index1.html) **进阶:** 但是如果我们不希望在 JS 设置图片信息,而是直接在 HTML 文件里面生成图片代码,然后点击的时候展示图片。 首先我们要知道, PhotoSwipe 添加自己的属性到这个图片对象的代码如下所示: ;toolbar:false
var slides = [
// slide 1
{
src: ‘path/to/image1.jpg’, // path to image
w: 1024, // image width
h: 768, // image height
msrc: ‘path/to/small-image.jpg’, // small image placeholder,
// main (large) image loads on top of it,
// if you skip this parameter – grey rectangle will be displayed,
// try to define this property only when small image was loaded before
title: ‘Image Caption’ // used by Default PhotoSwipe UI
// if you skip it, there won’t be any caption
// You may add more properties here and use them.

// For example, demo gallery uses "author" property, which is used in the caption.

// author: ‘John Doe’
},
// slide 2
{
src: ‘path/to/image2.jpg’,
w: 600,
h: 600
// etc.

}
// etc.

];

图片数组列表的HTML代码是这样的:

html;toolbar:false Image caption</p> <pre><code>Image caption </code></pre> <pre><code> 然后我们通过 JS 把图片属性信息绑定起来: ;toolbar:false
var initPhotoSwipeFromDOM = function(gallerySelector) {
// parse slide data (url, title, size …) from DOM elements
// (children of gallerySelector)
var parseThumbnailElements = function(el) {
var thumbElements = el.childNodes,
numNodes = thumbElements.length,
items = [],
figureEl,
linkEl,
size,
item;
for(var i = 0; i < numNodes; i++) {
figureEl = thumbElements[i]; // element
// include only element nodes
if(figureEl.nodeType !== 1) {
continue;
}
linkEl = figureEl.children[0]; // element
size = linkEl.getAttribute(‘data-size’).split(‘x’);
// create slide object
item = {
src: linkEl.getAttribute(‘href’),
w: parseInt(size[0], 10),
h: parseInt(size[1], 10)
};
if(figureEl.children.length > 1) {
// content
item.title = figureEl.children[1].innerHTML;
}
if(linkEl.children.length > 0) {
// thumbnail element, retrieving thumbnail url
item.msrc = linkEl.children[0].getAttribute(‘src’);
}
item.el = figureEl; // save link to element for getThumbBoundsFn
items.push(item);
}
return items;
};
// find nearest parent element
var closest = function closest(el, fn) {
return el && ( fn(el) ? el : closest(el.parentNode, fn) );
};
// triggers when user clicks on thumbnail
var onThumbnailsClick = function(e) {
e = e || window.event;
e.preventDefault ? e.preventDefault() : e.returnValue = false;
var eTarget = e.target || e.srcElement;
// find root element of slide
var clickedListItem = closest(eTarget, function(el) {
return (el.tagName && el.tagName.toUpperCase() === ‘FIGURE’);
});
if(!clickedListItem) {
return;
}
// find index of clicked item by looping through all child nodes
// alternatively, you may define index via data- attribute
var clickedGallery = clickedListItem.parentNode,
childNodes = clickedListItem.parentNode.childNodes,
numChildNodes = childNodes.length,
nodeIndex = 0,
index;
for (var i = 0; i < numChildNodes; i++) {
if(childNodes[i].nodeType !== 1) {
continue;
}
if(childNodes[i] === clickedListItem) {
index = nodeIndex;
break;
}
nodeIndex++;
}
if(index >= 0) {
// open PhotoSwipe if valid index found
openPhotoSwipe( index, clickedGallery );
}
return false;
};
// parse picture index and gallery index from URL (#&pid=1&gid=2)
var photoswipeParseHash = function() {
var hash = window.location.hash.substring(1),
params = {};
if(hash.length < 5) {
return params;
}
var vars = hash.split(‘&’);
for (var i = 0; i < vars.length; i++) {
if(!vars[i]) {
continue;
}
var pair = vars[i].split(‘=’);
if(pair.length < 2) {
continue;
}
params[pair[0]] = pair[1];
}
if(params.gid) {
params.gid = parseInt(params.gid, 10);
}

return params;
};
var openPhotoSwipe = function(index, galleryElement, disableAnimation, fromURL) {
var pswpElement = document.querySelectorAll(‘.pswp’)[0],
gallery,
options,
items;
items = parseThumbnailElements(galleryElement);
// define options (if needed)
options = {
// define gallery index (for URL)
galleryUID: galleryElement.getAttribute(‘data-pswp-uid’),
getThumbBoundsFn: function(index) {
// See Options -> getThumbBoundsFn section of documentation for more info
var thumbnail = items[index].el.getElementsByTagName(‘img’)[0], // find thumbnail
pageYScroll = window.pageYOffset || document.documentElement.scrollTop,
rect = thumbnail.getBoundingClientRect();
return {x:rect.left, y:rect.top + pageYScroll, w:rect.width};
}
};
// PhotoSwipe opened from URL
if(fromURL) {
if(options.galleryPIDs) {
// parse real index when custom PIDs are used
// http://photoswipe.com/documentation/faq.html#custom-pid-in-url
for(var j = 0; j < items.length; j++) {
if(items[j].pid == index) {
options.index = j;
break;
}
}
} else {
// in URL indexes start from 1
options.index = parseInt(index, 10) – 1;
}
} else {
options.index = parseInt(index, 10);
}
// exit if index not found
if( isNaN(options.index) ) {
return;
}
if(disableAnimation) {
options.showAnimationDuration = 0;
}
// Pass data to PhotoSwipe and initialize it
gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);
gallery.init();
};
// loop through all gallery elements and bind events
var galleryElements = document.querySelectorAll( gallerySelector );

for(var i = 0, l = galleryElements.length; i < l; i++) {
galleryElements[i].setAttribute(‘data-pswp-uid’, i+1);
galleryElements[i].onclick = onThumbnailsClick;
}

// Parse URL and open gallery if it contains #&pid=3&gid=1
var hashData = photoswipeParseHash();
if(hashData.pid && hashData.gid) {
openPhotoSwipe( hashData.pid , galleryElements[ hashData.gid – 1 ], true, true );
}
};

// execute above function
initPhotoSwipeFromDOM(‘.my-gallery’);

我们把自己的图片信息根据模板修改下,然后把前面的图片展示代码放在一起就行了。

演示地址:http://www.ycdoit.com/plugins/photoswipe/index2.html

页面源代码:https://github.com/YeXiaoChao/yexiaochao.github.io/blob/master/plugins/PhotoSwipe/index2.html

接着根据自己的页面需求,相对应的修改代码就可以了。

因为并不需要太复杂的功能,解决了自己的问题,就没有继续研究了。需要深入了解的同学,可以看看官方文档

Original: https://www.cnblogs.com/yc-755909659/p/8490467.html
Author: 叶超Luka
Title: 【JavaScript 插件】图片展示插件 PhotoSwipe 初识

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535140/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JavaScript 多级联动浮动菜单

    请到这里看09-08-18更新版本 类似的多级浮动菜单网上也很多实例,但大部分都是只针对一种情况或不够灵活,简单说就是做死了的。所以我就想到做一个能够自定义菜单的,有更多功能的多级…

    JavaScript 2023年5月29日
    056
  • Include javascript and css dynamically

    Some script I must post here in case of my bad memory. Maybe useful for my blog visitors. …

    JavaScript 2023年5月29日
    071
  • JavaScript 学习-45.jQuery 表单选择器

    前言 jQuery 表单选择器,专门操作表单内容 表单选择器 表单选择器总结 表单项 示例 说明 输入框 $(“:input”) 查找所有input元素,包含input、texta…

    JavaScript 2023年5月29日
    084
  • javascript 匿名函数

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    JavaScript 2023年5月29日
    047
  • 如何编写 Cloud9 JavaScript IDE 的功能扩展

    require.def第一个参数标识扩展的名字,第二参数中 ide,ext ,util和 editors 代表传入该扩展依赖的对象引用,formatjson扩展的第五个依赖是加载为…

    JavaScript 2023年5月29日
    057
  • JavaScript 拖拉缩放效果

    拖拉缩放效果,实现通过鼠标拖动来调整层的面积(宽高)大小。例如选框效果。 这里的拖拉缩放比一般的选框复杂一点,能设置八个方位(方向)的固定触发点,能设置最小范围,最大范围和比例缩放…

    JavaScript 2023年5月29日
    077
  • 十个JavaScript中易犯的小错误,你中了几枪?

    序言 在今天,JavaScript已经成为了网页编辑的核心。尤其是过去的几年,互联网见证了在SPA开发、图形处理、交互等方面大量JS库的出现。 如果初次打交道,很多人会觉得js很简…

    JavaScript 2023年5月29日
    086
  • javaScript系列 [52]-模板引擎的实现逻辑

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    JavaScript 2023年5月29日
    063
  • JavaScript 同步异步示意图

    posted @2017-07-24 08:48 一个勤奋的胖子 阅读(839 ) 评论() 编辑 Original: https://www.cnblogs.com/ys-wuh…

    JavaScript 2023年5月29日
    053
  • 【转】Javascript 获取链接(url)参数的方法

    Javascript 获取链接(url)参数的方法&#…

    JavaScript 2023年5月29日
    077
  • JavaScript进行WebSocket字节流通讯示例

    websocket进行通讯时,可以选择采用字符串或者字节流的传输模式。但在发送与接收时,需要考虑数据的分包,即分成一个个请求与响应消息。无论是采用哪种传输模式,都不免要遇到这个问题…

    JavaScript 2023年5月29日
    067
  • Javascript 严格模式

    严格模式是一种将更好的错误检查引入代码中的方法。 在使用严格模式时,你无法使用隐式声明的变量、将值赋给只读属性或将属性添加到不可扩展的对象等。 声明严格模式 可以通过在文件、程序或…

    JavaScript 2023年5月29日
    051
  • Node.js:用JavaScript写服务器端程序-介绍并写个MVC框架

    (注:1、本文基于Node.js V0.3.6; 2、本文假设你了解JavaScript; 3、本文假设你了解MVC框架;4、本文作者:QLeelulu,转载请注明出处。5、本文示…

    JavaScript 2023年5月29日
    073
  • JavaScript中的Generator函数

    1. 简介 Generator函数时ES6提供的一种异步编程解决方案。Generator语法行为和普通函数完全不同,我们可以把Generator理解为一个 包含了多个内部状态的状态…

    JavaScript 2023年5月29日
    058
  • 你从未听说过的 JavaScript 早期特性

    最近这些年在对 JavaScript 进行考古时,发现网景时代的 JavaScipt 实现,存在一些鲜为人知的特性,我从中挑选几个有趣的说一下。 Object.prototype….

    JavaScript 2023年5月29日
    067
  • JavaScript日期对象使用总结

    javascript Date日期对象的创建 创建一个日期对象: var objDate=new Date([arguments list]); 我总结了参数形式主要有以下3种: …

    JavaScript 2023年5月29日
    055
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球