vue-preview動態(tài)獲取圖片寬高并增加旋轉功能的實現(xiàn)
vue-preview是一個常用的圖片查看器,微博網頁版就是用的這個插件:
我在項目中也用過這個插件,總體來說,還是比較滿意。但是缺少一個圖片旋轉功能。
安裝使用
第一步:安裝
npm i vue-preview -S
第二步:引用配置
import VuePreview from 'vue-preview' Vue.use(VuePreview) Vue.use(preview, { mainClass: 'pswp--minimal--dark', barsSize: {top: 0, bottom: 0}, captionEl: false, fullscreenEl: false, shareEl: false, bgOpacity: 0.85, tapToClose: true, tapToToggleControls: false })
第三步:使用
// 定義預覽圖片列表 previewlist: [ { src: ‘./pic01.jpg', w: 1200, h: 900 }, { src: ‘./pic01.jpg', w: 1200, h: 900 } ] // 給圖片添加“preview-img”類(必須添加且要同名),以及綁定“show”方法 <img :src="decodeURIComponent(item.name)" class="preview-img" @click="show(index)"> // 點擊圖片觸發(fā)預覽方法 show (index) { this.$preview.open(index, this. previewlist); }
動態(tài)獲取圖片寬高
如果圖片列表資源是從服務器獲取,則需要先獲取圖片的真實寬高,具體代碼如下:
this. previewlist = []; //查看列表 let imglist = […]; //從服務器獲取的圖片地址列表 show (index) { for (let i = 0; i < imglist.length; i++) { // 獲取圖片實際大小 let newImage = {}; let img = new Image(); img.src = imglist[i]; img.onload = function () { newImage.src = imglist[i]; newImage.w = img.width; newImage.h = img.height; }; this.previewlist.push(newImage); } // 正常情況下javascript都是按照順序執(zhí)行的。但是我們可能讓該語句后面的語句執(zhí)行完再執(zhí)行本身,用setTimeout延時0ms來實現(xiàn)。 setTimeout(() => { this.$preview.open(index, this.previewlist); }, 0); }
新增圖片旋轉功能
默認的功能有全屏、放大、分享、圖片切換等,有時候我們還需要圖片旋轉功能,怎么辦呢?那只能自己動手改插件了。
第一步:添加旋轉圖標
圖標文件路徑:node_modules\photoswipe\dist\default-skin
原來只有前面8個圖片,后面那個稍微大一點的旋轉圖標是我加上去的,當然你也可以把尺寸設置為和原來的一樣。
第二步:添加旋轉按鈕到頁面
頁面文件路徑:node_modules\vue-preview\src\plugins\preview\preview.vue
<button class="pswp__button pswp__button--rotate" title="旋轉" @click="imgRotateFn"></button>
第三步:添加旋轉按鈕的樣式
樣式文件路徑:node_modules\photoswipe\dist\default-skin
.pswp__button--rotate { background-position: -176px 0; }
第四步:實現(xiàn)旋轉方法
文件路徑:node_modules\vue-preview\src\plugins\preview\preview.vue
imgRotateFn () { this.angle+=90; let imgNode = document.getElementsByClassName('pswp__img'); for (let i = 0; i<imgNode.length; i++) { imgNode[i].style.WebkitTransform = 'rotate('+this.angle+'deg)'; } }
這里我只貼出了關鍵代碼,需要你自己做瀏覽器兼容,以及切換圖片時,應該將圖片角度設置為0等。
測試結果
測試沒有問題,終于可以下班了,哈哈哈。
Tips:懶得自己動手改插件的伙伴,可以在樓主的GitHub倉庫下載改好后的文件,在你安裝好 vue-preview 后用“attachment”文件夾中的三個文件替換你項目中的對應文件就擁有“旋轉”功能了。GitHub地址:https://github.com/xiongjun0812/vue-preview
今天就分享到這里,有問題歡迎留言交流,希望能給大家一個參考,也希望大家多多支持腳本之家。
- vue使用exif獲取圖片旋轉,壓縮的示例代碼
- Vue2.0實現(xiàn)調用攝像頭進行拍照功能 exif.js實現(xiàn)圖片上傳功能
- vue 實現(xiàn)Web端的定位功能 獲取經緯度
- 基于elementUI使用v-model實現(xiàn)經緯度輸入的vue組件
- vue實現(xiàn)簡易圖片左右旋轉,上一張,下一張組件案例
- Vue圖片瀏覽組件v-viewer用法分析【支持旋轉、縮放、翻轉等操作】
- 移動端 Vue+Vant 的Uploader 實現(xiàn)上傳、壓縮、旋轉圖片功能
- vue實現(xiàn)裁切圖片同時實現(xiàn)放大、縮小、旋轉功能
- vue2實現(xiàn)移動端上傳、預覽、壓縮圖片解決拍照旋轉問題
- vuejs開發(fā)組件分享之H5圖片上傳、壓縮及拍照旋轉的問題處理
- vue使用exif獲取圖片經緯度的示例代碼
相關文章
詳解vue3+element-plus實現(xiàn)動態(tài)菜單和動態(tài)路由動態(tài)按鈕(前后端分離)
本文需要使用axios,路由,pinia,安裝element-plus,并且本文vue3是基于js而非ts的,這些環(huán)境如何搭建不做描述,需要讀者自己完成,感興趣的朋友跟隨小編一起看看吧2023-11-11vue+element多選級聯(lián)選擇器自定義props使用詳解
這篇文章主要給大家介紹了關于vue+element多選級聯(lián)選擇器自定義props使用的相關資料,級聯(lián)選擇器展示的結果都是以數(shù)組的形式展示,也就是v-model綁定的結果,需要的朋友可以參考下2023-07-07el-select二次封裝實現(xiàn)可分頁加載數(shù)據(jù)的示例代碼
使用el-select時一次性渲染幾百條數(shù)據(jù)時會造成頁面克頓, 可以通過分頁來實現(xiàn),所以本文給大家介紹了el-select二次封裝實現(xiàn)可分頁加載數(shù)據(jù),文中有詳細的代碼講解,具有一定的參考價值,需要的朋友可以參考下2023-12-12vue最強table vxe-table 虛擬滾動列表 前端導出問題分析
最近遇到個問題,后臺一次性返回2萬條列表數(shù)據(jù)并且需求要求所有數(shù)據(jù)必須全部展示,不能做假分頁,怎么操作呢,下面通過本文介紹下vue最強table vxe-table 虛擬滾動列表 前端導出問題,感興趣的朋友一起看看吧2023-10-10