vue-PhotoSwipe插件填坑
生活随笔
收集整理的這篇文章主要介紹了
vue-PhotoSwipe插件填坑
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
關(guān)于用戶發(fā)布的動(dòng)態(tài)內(nèi)容模塊展示
在項(xiàng)目中首頁,顏絡(luò)社,個(gè)人主頁,其他用戶主頁4個(gè)頁面都需要展示用戶所發(fā)布的動(dòng)態(tài)內(nèi)容(類似于微信朋友圈內(nèi)容),故進(jìn)行封裝。
頁面效果如下:
難點(diǎn):
a.圖片展示。點(diǎn)擊查看大圖,上滑圖片退出。
主要使用了PhotoSwipe插件。 首先使用npm在項(xiàng)目中安裝photoswipenpm install photoswipe安裝成功后,在對應(yīng)的.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' 復(fù)制代碼(小坑:一定要寫入下面的代碼內(nèi)容)
``` <!-- PhotoSwipe插件需要的元素, 一定要有類名 pswp --> <div class="pswp" tabindex="-1" role="dialog" aria-hidden="true"><div class="pswp__bg"></div><div class="pswp__scroll-wrap"><div class="pswp__container"><div class="pswp__item"></div><div class="pswp__item"></div><div class="pswp__item"></div></div><!-- 預(yù)覽區(qū)域頂部的默認(rèn)UI,可以修改 --><div class="pswp__ui pswp__ui--hidden"><div class="pswp__top-bar"><!-- 與圖片相關(guān)的操作 --><div class="pswp__counter"></div><button class="pswp__button pswp__button--close" title="Close (Esc)"></button><!--將分享按鈕去掉 --><!-- <button class="pswp__button pswp__button--share" title="Share"></button> --><button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button><button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button><div class="pswp__preloader"><div class="pswp__preloader__icn"><div class="pswp__preloader__cut"><div class="pswp__preloader__donut"></div></div></div></div></div><div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap"><div class="pswp__share-tooltip"></div></div><button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)"></button><button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)"></button><div class="pswp__caption"><div class="pswp__caption__center"></div></div></div></div> </div> ``` 復(fù)制代碼完成了初期準(zhǔn)備工作,現(xiàn)在開始正式使用啦~
<div class="thumbnails my-gallery"><figure v-for="(img, index) in item.tiebaPictureslist" :key="index" itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject" class="thumbnail"><a :href="img.ptPic" itemprop="contentUrl" :data-size="img.ptPic | dataSize" v-show="img.ptPic"><img :src="img.ptPic + '?imageView2/5/w/100/h/100'" itemprop="thumbnail" alt="" /></a></figure> </div> 復(fù)制代碼(小坑2:使用photoswipe預(yù)覽圖片自己的圖片的數(shù)組必須保證有圖片寬高,即利用七牛云圖片處理技術(shù)將圖片進(jìn)行寬高設(shè)定)
接下來,就開始給需要點(diǎn)擊放大預(yù)覽的圖片進(jìn)行綁定預(yù)覽事件啦~
methods: {initPhotoSwipeFromDOM(gallerySelector) {var parseThumbnailElements = function(el) {var thumbElements = el.childNodes,numNodes = thumbElements.length,items = [],figureEl,linkEl,size,itemfor (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 = figureElitems.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.evente.preventDefault ? e.preventDefault() : e.returnValue = falsevar eTarget = e.target || e.srcElementvar 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,indexfor (var i = 0; i < numChildNodes; i++) {if (childNodes[i].nodeType !== 1) {continue}if (childNodes[i] === clickedListItem) {index = nodeIndexbreak}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,itemsitems = 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 = jbreak}}} 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') } 復(fù)制代碼以上,實(shí)現(xiàn)圖片點(diǎn)擊查看,可以左右滑動(dòng),向上滑動(dòng)退出圖片查看。
總結(jié)
以上是生活随笔為你收集整理的vue-PhotoSwipe插件填坑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dmg文件转iso格式
- 下一篇: java集合体检套餐管理系统_基于ssm