生活随笔
收集整理的這篇文章主要介紹了
vue移动端pdf在线预览,并实现手势缩放、移动
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
通常我們會遇到ios手機不能下載文件的問題,那是因為蘋果手機的攔截機制,這時我們只能通過別的方法來解決問題,我這里的解決方法是直接實現在線預覽
pdf預覽跟圖片預覽不同,pdf可能會有多張,而圖片只有一張,使用圖片預覽的組件肯定是行不通的這里我使用的是一個vue-pdf的插件,這是一個使用起來容易上手的插件。首先我們需要在vue項目中引入它:
npm install --save vue-pdf
然后在展示pdf的頁面引用
import pdf from ‘vue-pdf’
html代碼
<template><div class="pdf"><div class="pdf-tab"><divclass="btn-def btn-pre"@click.stop="prePage">上一頁
</div><divclass="btn-def btn-next"@click.stop="nextPage">下一頁
</div></div><div>{{pageNum}}/{{pageTotalNum}}
</div><div class="any-scroll-view"><div ref="body" :style="bodyStyle"><pdfid="pdfPreview"ref="pdf":src="pdfUrl":page="pageNum":rotate="pageRotate"@password="password"@progress="loadedRatio = $event"@page-loaded="pageLoaded($event)"@num-pages="pageTotalNum=$event"@error="pdfError($event)"@link-clicked="page = $event"></pdf></div></div></div>
</template>
js代碼和style代碼
alloyfinger.js、transform.js、to.js引入的這三個js里封裝了手勢縮放移動、旋轉的方法,可以去GitHub將源碼擋下來,將這三個js復制到自己的static文件下,然后引用即可。點此進入GitHub
<script
>import pdf
from 'vue-pdf'import AlloyFinger
from "../../../static/js/alloyfinger.js";import transform
from "../../../static/js/transform.js";import To
from "../../../static/js/to.js";export default {name: 'mistakesVoucher',props: {acceleration: {type: Number
,default: 3600}},data() {return {id: '',pdfUrl:'',pageNum:1,pageTotalNum:1,pageRotate:0,loadedRatio:0,curPageNum:0,transitionDuration: 300,goPath: '', };},beforeRouteEnter (to, from, next) { let path
= from
.fullPath
;next(vm => vm
.setPath(path
));},created(){this.getParams()},computed: {bodyStyle() {return {transitionDuration: `${this.transitionDuration}ms`,transform: `translate(${this.scrollLeft}px, ${this.scrollTop}px)`};}},mounted() {this.getData();},methods: {setPath(path) {this.goPath
= path
.split("/")[1];},back() {this.$router
.push({name: this.goPath
,params: {id: this.id
}})},getParams() {let routerParams
= this.$route
.params
.id
this.id
= routerParams
this.pdfUrl
= pdf
.createLoadingTask(this.$route
.params
.url
)},getData() {let that
= this;let element
= document
.getElementById("pdfPreview");Transform(element
);var initScale
= 1;this.af
= new AlloyFinger(element
, {rotate: function (evt) { element
.rotateZ
+= evt
.angle
;},multipointStart: function () {initScale
= element
.scaleX
;},pinch: function (evt) { element
.scaleX
= element
.scaleY
= initScale
* evt
.zoom
;},pressMove: function (evt) { element
.translateX
+= evt
.deltaX
;element
.translateY
+= evt
.deltaY
;evt
.preventDefault();},});},prePage(){var p
= this.pageNump
= p
>1?p
-1:this.pageTotalNum
this.pageNum
= p
},nextPage(){var p
= this.pageNump
= p
<this.pageTotalNum
?p
+1:1this.pageNum
= p
},password(updatePassword, reason) {updatePassword(prompt('password is "123456"'))},pageLoaded(e){this.curPageNum
= e
},pdfError(error){console
.error(error
)},},components:{pdf
},};
</script
><style
>
#app
{font
-family
: Avenir
,Helvetica
,Arial
,sans
-serif
;-webkit
-font
-smoothing
: antialiased
;-moz
-osx
-font
-smoothing
: grayscale
;width: 100%;margin: 0 auto
;overflow: hidden
;min
-height
: 100vh
;
}
.pdf
-tab
{display: -ms
-flexbox
;display: flex
;-ms
-flex
-wrap
: wrap
;flex
-wrap
: wrap
;padding: 0 .4rem
;-ms
-flex
-pack
: justify
;justify
-content
: space
-between
;
}
.pdf
-tab
.btn
-def
{border
-radius
: .2rem
;font
-size
: .98rem
;height: 1.93333rem
;width: 6.4rem
;text
-align
: center
;line
-height
: 1.93333rem
;background: #409eff
;color: #fff
;margin
-bottom
: 1.26667rem
;
}
.pdf
-total
{text
-align
: center
;font
-size
: 1.45333rem
;
}
.pdf
-process
, .pdf
-total
{text
-align
: center
;font
-size
: 1.45333rem
;
}
.pdf
-num
{margin
-bottom
: 1.2rem
;
}
</style
>
效果
gitee測試源碼: https://gitee.com/fang_zheng_wei/mobile-preview
下一篇: vue移動端實現excel在線預覽
總結
以上是生活随笔為你收集整理的vue移动端pdf在线预览,并实现手势缩放、移动的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。