利用PhotoSwipe插件实现图片预览

10 阅读 作者:kang1919 2020-08-10

由于安卓项目涉及到h5页面嵌入,需要查看图片相册集,本来打算使用baguetteBox,但是它不太兼容手机,并且页面效果跟灵活性欠缺,后来在文档中看到PhotoSwipe,虽然开发者很懒,好多东西东西没有嵌入到插件中,但是使用效果还是不错的

官网地址  https://photoswipe.com/

首先根据他提供的git,我发现有好多没有用的文件,于是决定不使用composer,直接把有用的文件放入到项目中,可以选择压缩发布版dist,也可以选用src源码版,这里才用的是dist

首先 引入css

  1. <link rel="stylesheet prefetch" href="photoswipe/css/photoswipe.css">
  2. <link rel="stylesheet prefetch" href="photoswipe/css/default-skin/default-skin.css">

js放到最后

 

  1. <script src="photoswipe/js/photoswipe.js"></script>
  2. <script src="photoswipe/js/photoswipe-ui-default.min.js"></script>

开发者很懒,需要引入它的PhotoSwipe元素到DOM中

 

  1. <div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
  2. <div class="pswp__bg"></div>
  3. <div class="pswp__scroll-wrap">
  4. <div class="pswp__container">
  5. <div class="pswp__item"></div>
  6. <div class="pswp__item"></div>
  7. <div class="pswp__item"></div>
  8. </div>
  9. <div class="pswp__ui pswp__ui--hidden">
  10. <div class="pswp__top-bar">
  11. <div class="pswp__counter"></div>
  12. <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
  13. <!--<button class="pswp__button pswp__button&#45;&#45;share" title="Share"></button>-->
  14. <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
  15. <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
  16. <div class="pswp__preloader">
  17. <div class="pswp__preloader__icn">
  18. <div class="pswp__preloader__cut">
  19. <div class="pswp__preloader__donut"></div>
  20. </div>
  21. </div>
  22. </div>
  23. </div>
  24. <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
  25. <div class="pswp__share-tooltip"></div>
  26. </div>
  27. <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
  28. </button>
  29. <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
  30. </button>
  31. <div class="pswp__caption">
  32. <div class="pswp__caption__center"></div>
  33. </div>
  34. </div>
  35. </div>
  36. </div>

 

完整的html代码

 

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
  6. <meta name="apple-touch-fullscreen" content="yes"> <!-- 一会试验下是否有必要存在 -->
  7. <meta name="apple-mobile-web-app-capable" content="yes">
  8. <meta name="apple-mobile-web-app-status-bar-style" content="black">
  9. <meta name="format-detection" content="telephone=no">
  10. <meta http-equiv="x-rim-auto-match" content="none"/>
  11. <meta name="HandheldFriendly" content="true"/>
  12. <link rel="stylesheet" href="news_css/news_1.css">
  13. <link rel="stylesheet" href="news_css/news_2.css">
  14. <link rel="stylesheet prefetch" href="photoswipe/css/photoswipe.css">
  15. <link rel="stylesheet prefetch" href="photoswipe/css/default-skin/default-skin.css">
  16. <style>
  17. * {margin: 0;padding: 0;}
  18. .clearfix::before, .clearfix::after {
  19. display: block;
  20. content: '';
  21. visibility: hidden;
  22. height: 100%;
  23. clear: both;
  24. }
  25. body {padding-top: 2%;}
  26. .my-gallery {width:96%;margin: 0 auto;}
  27. .my-gallery .img-dv {width:100%;margin-bottom: 1%;}
  28. .my-gallery .img-dv a {display:block;width:100%;text-align: center}
  29. .my-gallery .img-dv a img {width:100%;}
  30. </style>
  31. </head>
  32. <body>
  33. <div class="wrapper" style="color:#333333;font-size: 15px">
  34. <header class="con_hd infoBg">
  35. <a href="?app=app_order@detail&order_id={$order_id}" class="hd-back"></a>
  36. <h2 class="hd-tit">{$data.name}</h2>
  37. </header>
  38. <div class="my-gallery" data-pswp-uid="1">
  39. {foreach $data['img_list'] $k=>$v}
  40. <figure>
  41. <div class="img-dv"><a href="{$v['value']}" data-size="1920x1080"><img src="{$v['value']}"></a></div>
  42. <figcaption style="display:none;">{$v['name']}</figcaption>
  43. </figure>
  44. {/foreach}
  45. </div>
  46. <div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
  47. <div class="pswp__bg"></div>
  48. <div class="pswp__scroll-wrap">
  49. <div class="pswp__container">
  50. <div class="pswp__item"></div>
  51. <div class="pswp__item"></div>
  52. <div class="pswp__item"></div>
  53. </div>
  54. <div class="pswp__ui pswp__ui--hidden">
  55. <div class="pswp__top-bar">
  56. <div class="pswp__counter"></div>
  57. <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
  58. <!--<button class="pswp__button pswp__button&#45;&#45;share" title="Share"></button>-->
  59. <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
  60. <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
  61. <div class="pswp__preloader">
  62. <div class="pswp__preloader__icn">
  63. <div class="pswp__preloader__cut">
  64. <div class="pswp__preloader__donut"></div>
  65. </div>
  66. </div>
  67. </div>
  68. </div>
  69. <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
  70. <div class="pswp__share-tooltip"></div>
  71. </div>
  72. <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
  73. </button>
  74. <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
  75. </button>
  76. <div class="pswp__caption">
  77. <div class="pswp__caption__center"></div>
  78. </div>
  79. </div>
  80. </div>
  81. </div>
  82. </body>
  83. <script src="photoswipe/js/photoswipe.js"></script>
  84. <script src="photoswipe/js/photoswipe-ui-default.min.js"></script>
  85. <script type="text/javascript">
  86. var initPhotoSwipeFromDOM = function(gallerySelector) {
  87. // 解析来自DOM元素幻灯片数据(URL,标题,大小...)
  88. var parseThumbnailElements = function(el) {
  89. var thumbElements = el.childNodes,
  90. numNodes = thumbElements.length,
  91. items = [],
  92. figureEl,
  93. linkEl,
  94. size,
  95. item,
  96. divEl;
  97. for(var i = 0; i < numNodes; i++) {
  98. figureEl = thumbElements[i]; // <figure> element
  99. // 仅包括元素节点
  100. if(figureEl.nodeType !== 1) {
  101. continue;
  102. }
  103. divEl = figureEl.children[0];
  104. linkEl = divEl.children[0]; // <a> element
  105. size = linkEl.getAttribute('data-size').split('x');
  106. // 创建幻灯片对象
  107. item = {
  108. src: linkEl.getAttribute('href'),
  109. w: parseInt(size[0], 10),
  110. h: parseInt(size[1], 10)
  111. };
  112. if(figureEl.children.length > 1) {
  113. item.title = figureEl.children[1].innerHTML;
  114. }
  115. if(linkEl.children.length > 0) {
  116. // <img> 缩略图节点, 检索缩略图网址
  117. item.msrc = linkEl.children[0].getAttribute('src');
  118. }
  119. item.el = figureEl; // 保存链接元素 for getThumbBoundsFn
  120. items.push(item);
  121. }
  122. return items;
  123. };
  124. // 查找最近的父节点
  125. var closest = function closest(el, fn) {
  126. return el && ( fn(el) ? el : closest(el.parentNode, fn) );
  127. };
  128. // 当用户点击缩略图触发
  129. var onThumbnailsClick = function(e) {
  130. e = e || window.event;
  131. e.preventDefault ? e.preventDefault() : e.returnValue = false;
  132. var eTarget = e.target || e.srcElement;
  133. var clickedListItem = closest(eTarget, function(el) {
  134. return (el.tagName && el.tagName.toUpperCase() === 'FIGURE');
  135. 原文地址:https://blog.csdn.net/lunsunhuan1825/article/details/96474155
广告一下
热门教程
PHP7报A non well formed numeric value encountered 0
Linux系统下关闭mongodb的几种命令分享 0
mongodb删除数据、删除集合、删除数据库的命令 0
Git&Github极速入门与攻坚实战课程 0
python爬虫教程使用Django和scrapy实现 0
libnetsnmpmibs.so.31: cannot open shared object file 0
数据结构和算法视频教程 0
redis的hash结构怎么删除数据呢? 0
C++和LUA解析器的数据交互实战视频 0
mongodb errmsg" : "too many users are authenticated 0
C++基础入门视频教程 0
用30个小时精通C++视频教程可能吗? 0
C++分布式多线程游戏服务器开发视频教程socket tcp boost库 0
C++培训教程就业班教程 0
layui的util工具格式时间戳为字符串 0
C++实战教程之远程桌面远程控制实战 1
网络安全培训视频教程 0
LINUX_C++软件工程师视频教程高级项目实战 0
C++高级数据结构与算法视频教程 0
跨域问题很头疼?通过配置nginx轻松解决ajax跨域问题 0
相关文章
【译】JavaScript数据结构(3):单向链表与双向链表 16
10个JavaScript难点 16
【译】苹果拒绝支持PWA,有损Web的未来 16
iView 一周年了,同时发布了 2.0 正式版,但这只是开始... 16
nodejs+mongodb构建一个简单登录注册功能 16
【译】JavaScript数据结构(4):树 16
组件化开发与黑箱 16
TypeScript - 不止稳,而且快 16
webpack3+anujs+ReactCSSTransitionGroup 16
原生js实现图片放大镜效果 16
WEB缓存探究第二弹——实战 16
纯笔记:vfork 的一些使用场景(顺便讲一下 fork 的原理) 16
Android APP 内部捐赠实现(支付宝&amp;微信) 16
WKWebView 的一些小总结 16
模型评价(一) AUC大法 16
开始使用GraphQL 16
Webpack模块化原理简析 16
gulp使用问题记录 16
使用Angular4动画为页面添彩 16
Python27 Matplotlib (win64 python2.7) 安装及简单使用 16