<template>
<div id="div_read_area_scrool" class="no-scrollbar--x" :style="'text-align:center;height:'+ '500px;'+'overflow: auto;'">
<div id="div_read_area"></div>
</div>
</template>
<script>
// 参数:the-document={}
// 属性:
import pdfjsLib from 'pdfjs-dist'
import $ from 'jquery'
export default {
name: 'ReadByPdf',
data () {
return {
theReadOnline: {
current: 1,
numPages: 0,
html: ''
}
}
},
methods: {
// 初始化pdfjs
initThePDFJSLIB: function () {
pdfjsLib.GlobalWorkerOptions.workerSrc = 'pdfjs-dist/build/pdf.worker.js'
},
// 根据页码获取pdf内容
loadPDFForTheDocument (index) {
// 实例化pdfjs
pdfjsLib.getDocument("/static/110.pdf").then(pdf => {
// 通过页码获取每页内容
pdf.getPage(index).then(page => {
// 获得总页数
this.theReadOnline.numPages = pdf.numPages
// 设置页面显示倍数 842×595
let _clientWidth = document.documentElement.clientWidth * 0.618
let view = _clientWidth % 842 > 0 ? 1.33 : 1
// 实例化画布
let canvas = document.createElement('canvas')
let context = canvas.getContext('2d')
let dpr = window.devicePixelRatio || 1
let bsr = context.webkitBackingStorePixelRatio ||
context.mozBackingStorePixelRatio ||
context.msBackingStorePixelRatio ||
context.oBackingStorePixelRatio ||
context.backingStorePixelRatio || 1
let ratio = dpr / bsr
let viewport = page.getViewport(view)
canvas.width = viewport.width * ratio
canvas.height = viewport.height * ratio
// canvas.style.width = viewport.width + 'px'
// canvas.style.height = viewport.height + 'px'
// context.setTransform(ratio, 0, 0, ratio, 0, 0)
let renderContext = {
canvasContext: context,
viewport: viewport
}
// 追加上新的一页空间
document.getElementById('div_read_area').appendChild(canvas)
// 赋值上显示内容
page.render(renderContext).then(() => {
})
})
}).catch(err => {
console.log(err)
})
},
watchTheReadScroll: function () {
let _theVue = this
// 获取节点
let _scrollContent = document.getElementById('div_read_area_scrool')
// 绑定事件
_scrollContent.addEventListener('scroll', function () {
var viewH, contentH, scrollTop
viewH = $(this).height()
contentH = $(this).get(0).scrollHeight
scrollTop = $(this).scrollTop()
// 后期改成传递给父级
if (scrollTop / (contentH - viewH) >= 1) { // 到达底部时,加载新内容
_theVue.theReadOnline.current++
if (_theVue.theReadOnline.current <= _theVue.theReadOnline.numPages) {
_theVue.loadPDFForTheDocument(_theVue.theReadOnline.current)
}
}
})
}
},
mounted: function () {
this.initThePDFJSLIB()
this.watchTheReadScroll()
this.loadPDFForTheDocument(1)
}
}
</script>
分享到:
相关推荐
在Vue.js框架中,手写一个自定义操作的工作流是一项挑战性的任务,但它能让你更好地理解和控制工作流的每一个细节。下面将详细讲解这个过程涉及的关键知识点。 首先,我们需要了解`Vue`的基础知识。Vue.js是一款轻...
基于vue编写的一些自定义bpmn.js案例-基础篇.zip基于vue编写的一些自定义bpmn.js案例-基础篇.zip基于vue编写的一些自定义bpmn.js案例-基础篇.zip基于vue编写的一些自定义bpmn.js案例-基础篇.zip基于vue编写的一些...
【vue+leaflet】自定义控件(五), cv开箱即可使用 【vue+leaflet】自定义控件(五), cv开箱即可使用 【vue+leaflet】自定义控件(五), cv开箱即可使用 【vue+leaflet】自定义控件(五), cv开箱即可使用 【vue+leaflet】...
总结来说,这个“VUE打印demo,自动分页”项目涵盖了Vue.js组件化开发、Vue插件集成、CSS打印样式和自动分页逻辑等多个知识点。通过这个项目,开发者可以学习到如何在Vue环境中优雅地实现打印功能,提高用户体验。
在IT行业中,自定义分页控件是一种常见的需求,特别是在Web开发中,为了提供良好的用户体验,需要对大量的数据进行分页展示。本项目名为“自己做的自定义分页控件”,作者通过自己的实践解决了在使用现有分页控件时...
在 Vue 应用中集成 PDF.js,首先需要确保你的项目环境中已经安装了 Vue CLI 或其他构建工具。接着,你需要引入 PDF.js。可以通过 npm 或 yarn 安装: ```bash npm install pdfjs-dist --save # 或者 yarn add pdfjs...
vue-test-loader 从Vue组件中提取自定义测试块
在IT行业中,分页是一种常见的数据展示方式,特别是在大数据量的网页或应用中,它能够帮助用户有效地浏览和管理信息。自定义分页标签是指开发者根据项目需求,为应用程序创建的特定分页组件,以便更好地控制和美化...
JavaScript自定义分页样式是网页开发中常见的需求,特别是在数据量较大时,为了提供良好的用户体验,需要将数据分页展示。本示例中,我们通过JavaScript实现了一个简单的自定义分页功能,它允许用户根据需求调整每页...
Swiper自定义分页器使用详解 Swiper是一款功能强大且流行的滑块插件,它提供了丰富的配置选项和api,能够满足各种滑块需求。Swiper的自定义分页器是其一个重要的配置项,它能够让开发者自定义分页器的样式和行为。...
在IT行业中,分页是一种常见的数据展示方式,特别是在网页或应用程序中处理大量数据时。它有助于提高用户体验,避免一次性加载过多数据导致页面响应慢或内存消耗过大。自定义分页则是根据具体需求进行设计和实现的...
本文将详细介绍如何在Vue项目中创建一个自定义分页组件。 首先,让我们分析一下提供的代码片段。这个分页组件主要由以下几个部分组成: 1. **HTML结构**: 在`template`中,组件包含一个`.page-bar`类的`div`,...
本篇将详细讲解如何在 Vue 中创建一个带有自动分页功能的轮播图。 一、Vue 轮播图组件基础 在 Vue 中,我们可以创建自定义组件来实现轮播图。首先,我们需要一个包含多个图片或内容的数组,每个元素代表一张轮播图...
Ant Design of Vue Carousel 走马灯 实现简单的分页效果demo 内容简单
vue自定义右键菜单 -vue2版 vue自定义右键菜单 js右键菜单
本篇文章将详细探讨如何在Vue 2.0项目中集成Markdown编辑器,以便为用户提供一个便捷的文本编辑体验。 Markdown是一种轻量级的标记语言,它允许我们使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML。...
在本文中,我们将深入探讨如何使用Vue3、AntV X6和TSX技术栈来创建一个自定义的流程图。这个项目旨在利用这些强大的工具,提供一个可扩展且用户友好的流程图编辑环境。 首先,Vue3是Vue.js框架的最新版本,它引入了...
在Vue2框架中,ElementUI是一个非常流行的UI组件库,提供了丰富的组件,如表格、按钮、弹窗等,其中el-pagination是用于实现分页功能的组件。为了在多个页面上复用并统一分页样式,我们可以将其封装为一个公用组件。...