YNUtdPlatform/pages/YNEduApp/learnProj/components/PdfView.vue

105 lines
2.7 KiB
Vue
Raw Normal View History

2024-08-28 17:23:03 +08:00
<template>
2024-09-02 18:12:00 +08:00
<view class="content">
<web-view :src="url" @message="handlePostMessage"></web-view>
</view>
2024-08-28 17:23:03 +08:00
</template>
<script>
2024-09-02 18:12:00 +08:00
/* uni
* https://ask.dcloud.net.cn/article/35083
* 组件使用pdf.js源码修改了部分内容
* 只需要完成web-view监听页数并与uni通信即可
* @kklxx 2022/12/09修复组件通信
*/
import { computed } from 'vue'
2024-08-28 17:23:03 +08:00
export default {
props: {
path: {
type: String,
default: ''
}
},
data() {
return {
2024-09-02 18:12:00 +08:00
viewerUrl: '/hybrid/html/web/viewer.html', // 注意静态的html文件需要放在根路径下的 hybrid/html 文件夹中
fileUrl: '', // 要访问的本地pdf的路径
url: '', // 最终显示在web-view中的路径
currentPage: 1, //初始页
totalPage: 0, //总页码
currentReadPage: 0 //当前页码
2024-08-28 17:23:03 +08:00
}
},
2024-09-02 18:12:00 +08:00
onLoad(options) {
// console.log('页面信息:', options)
// this.fileUrl = options.url
// /* 设置标题 */
// uni.setNavigationBarTitle({
// title: 'PDF预览'
// })
// /* 初始页面 */
// this.pageInt() //获取pdfs数据
},
2024-08-28 17:23:03 +08:00
mounted() {
2024-09-02 18:12:00 +08:00
console.log('mounted-pdfView', this.path)
/* H5页面通信方式 */
// #ifdef H5
window.addEventListener('message', this.ReceiveMessage)
// #endif
this.fileUrl = this.path
/* 设置标题 */
uni.setNavigationBarTitle({
title: 'PDF预览'
})
/* 初始页面 */
this.pageInt() //获取pdfs数据
},
//页面销毁前
beforeDestroy() {
uni.removeStorage({
//清除pdf留下的缓存不干扰新的pdf载入
key: 'pdfjs.history',
success() {
// console.log("removeStorage", res)
}
})
},
methods: {
//页面初始化
pageInt() {
this.url = `${this.viewerUrl}?file=${encodeURIComponent(this.fileUrl)}&page=` + this.currentPage
},
/*
* 做成监听滚动条判断更好
*
*/
//uni 组件通信 监听
handlePostMessage(data) {
let arr = data.detail.data.pop()
this.totalPage = arr[0].totalPage //总页数
2024-09-03 15:20:18 +08:00
this.currentReadPage = arr[1].page //当前页数
2024-09-02 18:12:00 +08:00
console.log('app:', this.totalPage, this.currentReadPage)
},
//h5 监听
ReceiveMessage(event) {
if (event.data && event.data.data && event.data.data.arg) {
this.totalPage = event.data.data.arg[0].totalPage
this.currentReadPage = event.data.data.arg[1].page + 1
}
console.log('app:', this.totalPage, this.currentReadPage)
},
//页面销毁前动作
addBrowseRecord() {
// console.log("总页数:",this.totalPage);
// console.log("当前页数:",this.currentReadPage);
}
2024-08-30 17:35:33 +08:00
}
2024-08-28 17:23:03 +08:00
}
</script>
<style lang="scss" scoped></style>