博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vue-PhotoSwipe插件填坑
阅读量:6892 次
发布时间:2019-06-27

本文共 5571 字,大约阅读时间需要 18 分钟。

关于用户发布的动态内容模块展示

在项目中首页,颜络社,个人主页,其他用户主页4个页面都需要展示用户所发布的动态内容(类似于微信朋友圈内容),故进行封装。

页面效果如下:

难点:

a.图片展示。点击查看大图,上滑图片退出。

主要使用了PhotoSwipe插件。首先使用npm在项目中安装photoswipe npm install photoswipe安装成功后,在对应的.vue文件中引入: import PhotoSwipe from 'photoswipe' import PhotoSwipeUI_Default from 'photoswipe/dist/photoswipe-ui-default' import 'photoswipe/dist/photoswipe.css' import 'photoswipe/dist/default-skin/default-skin.css'复制代码

(小坑:一定要写入下面的代码内容)

```
```复制代码

完成了初期准备工作,现在开始正式使用啦~

复制代码

(小坑2:使用photoswipe预览图片自己的图片的数组必须保证有图片宽高,即利用将图片进行宽高设定)

接下来,就开始给需要点击放大预览的图片进行绑定预览事件啦~

methods: {    initPhotoSwipeFromDOM(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];          if (figureEl.nodeType !== 1) {            continue          }          linkEl = figureEl.children[0];          size = linkEl.getAttribute('data-size').split('x')          item = {            src: linkEl.getAttribute('href'),            w: parseInt(size[0], 10),            h: parseInt(size[1], 10)          };          if (figureEl.children.length > 1) {            item.title = figureEl.children[1].innerHTML          }          if (linkEl.children.length > 0) {            item.msrc = linkEl.children[0].getAttribute('src')          }          item.el = figureEl          items.push(item)        }        return items      }      var closest = function closest(el, fn) {        return el && (fn(el) ? el : closest(el.parentNode, fn))      }      var onThumbnailsClick = function(e) {        e = e || window.event        e.preventDefault ? e.preventDefault() : e.returnValue = false        var eTarget = e.target || e.srcElement        var clickedListItem = closest(eTarget, function(el) {          return (el.tagName && el.tagName.toUpperCase() === 'FIGURE')        });            if (!clickedListItem) {          return;        }        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) {          openPhotoSwipe(index, clickedGallery)        }        return false;      }      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);        options = {          history: false,          galleryUID: galleryElement.getAttribute('data-pswp-uid'),          getThumbBoundsFn: function(index) {            var thumbnail = items[index].el.getElementsByTagName('img')[0],              pageYScroll = window.pageYOffset || document.documentElement.scrollTop,              rect = thumbnail.getBoundingClientRect()            return { x: rect.left, y: rect.top + pageYScroll, w: rect.width }          }            }        if (fromURL) {          if (options.galleryPIDs) {            for (var j = 0; j < items.length; j++) {              if (items[j].pid == index) {                options.index = j                break              }            }          } else {            options.index = parseInt(index, 10) - 1          }        } else {          options.index = parseInt(index, 10)        }        if (isNaN(options.index)) {          return ''        }        if (disableAnimation) {          options.showAnimationDuration = 0        }            gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, options)        gallery.init()      }      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      }      var hashData = photoswipeParseHash()      if (hashData.pid && hashData.gid) {        openPhotoSwipe(hashData.pid, galleryElements[hashData.gid - 1], true, true)      }    }},updated() {    this.initPhotoSwipeFromDOM('.my-gallery')}复制代码

以上,实现图片点击查看,可以左右滑动,向上滑动退出图片查看。

转载地址:http://xvebl.baihongyu.com/

你可能感兴趣的文章
SpriteBuilder —— 跨平台游戏开发工具
查看>>
python xpath selenium
查看>>
《VMware vSphere 6.0虚拟化架构实战指南》——2.4 全新安装后的必要配置
查看>>
《Oracle SQL疑难解析》——1.15 启用其他排序和比较选项
查看>>
Mysql Connector 5.1 好用的新特性
查看>>
移动App性能测评与优化2.2.4 优化方法四:云省电策略
查看>>
Java中Redis的使用教程
查看>>
从洞穴壁画说起,信息可视化图表发展的迷人历史
查看>>
《Web前端开发精品课 HTML与CSS进阶教程》——2.8 HTML5舍弃的标签
查看>>
4 个你需要了解的容器网络工具
查看>>
利用ModSecurity防御暴力破解
查看>>
《libGDX移动游戏开发从入门到精通》一1.2 搭建libGDX开发环境
查看>>
《游戏大师Chris Crawford谈互动叙事》一9.6 互动小说机理剖析
查看>>
聚米微商好做吗 、为什么这么多人都在做聚米婧氏品牌呢
查看>>
互联网企业安全高级指南3.11 业务持续性管理
查看>>
Vertica的这些事&lt;八&gt;—— vertica加密数据
查看>>
python 自定义 包 模块 打包 安装
查看>>
ubuntu桌面的标题栏和启动栏消失问题[亲测可用]
查看>>
Cloud technology in today's job market
查看>>
3月31日云栖精选夜读:数据科学咨询:想要转型毫无头绪?看了本文你不慌
查看>>