vue 使用懒加载方式预览pdf页面

 1 <template>
 2     <div class="pdfPreview" ref="pdfPreview" id="pdfPreview">
 3         <pdf
 4             v-for="page in pageNum"
 5             :key="page"
 6             :page="page"
 7             :src="url"
 8         ></pdf>
 9     </div>
10 </template>
11 
12 
13 <script>
14 //使用npm install的方式将包加入到项目package.json
15 import pdf from 'vue-pdf'
16 
17 export default {
18     name: 'Pdf',
19     components: {
20         pdf
21     },
22     data () {
23         return {
24             pdf:'',
25             filePath: this.$route.params.filePath,
26             fileName: this.$route.params.fileName,
27             token: this.$cookie.get('token'),
28             url: '',
29             //懒加载页数
30             pageNum: 1,
31             //总页数
32             numPages: '',
33             height: '',
34         }
35     },
36 
37     activated () {
38         this.init();
39         this.getScroll()
40     },
41     mounted() {//实时监听滚动条的变化
42         window.addEventListener('scroll', this.getScroll,true)
43     },
44     destroyed() {//注意:监听的函数要在关闭页面时销毁掉,不然会影响到其它页面
45         window.removeEventListener('scroll', this.getScroll)
46     },
47     methods: {
48         init () {
49             //获取下载地址链接
50             this.url = this.filePath + '&proviewFlag=' + 'true'
51             this.url = pdf.createLoadingTask(this.url);
52             this.url.promise.then(pdf => {
53                 this.pdf = pdf
54                 this.numPages = pdf.numPages;
55                 //滚动加载
56                 this.getScroll();
57             });
58         },
59         getScroll(e) {
60             console.log(e.target.scrollTop ,'滚动高度')
61             const scrollTop = e.target.scrollTop
62             if(this.fileName.indexOf('pdf')!=-1){
63                 this.height = 1300
64             }else {
65                 this.height = 550
66             }
67             console.log(this.pageNum, this.height*(this.pageNum-1),scrollTop,this.height*(this.pageNum+1))
68             if ((scrollTop > this.height*(this.pageNum-1))&&(scrollTop < this.height*(this.pageNum+1))) { //懒加载条件限制判断
69                 if (this.pageNum < this.numPages) {//做一次判断
70                     //达到条件后执行这个函数
71                     this.pageNum += 1
72                     // this.pdf.getPage(this.pageNum).then(page => {
73                     //   console.log(page,'page')
74                     // })
75                     console.log('达到加载条件,执行加载');
76                 }
77             }
78         },
79         // 获取pdf页数
80         getNumPages () {
81             console.log(this.url,'page')
82             let loadingTask = pdf.createLoadingTask(this.url)
83             loadingTask.promise.then(pdf => {
84                 this.numPages = pdf.numPages
85             }).catch(err => {
86                 this.numPages = 0
87                 console.error('pdf 加载失败', err)
88             })
89         },
90     }
91 }
92 </script>

 

posted on 2021-10-29 15:12  青小记  阅读(2636)  评论(2编辑  收藏  举报