【发布时间】:2018-05-04 00:25:50
【问题描述】:
基本上我想要做的是在用户滚动模式中的 pdf 文件后(有点像弹出窗口),模式底部的按钮应该变为活动状态。
编辑:
主要问题是我上传的 pdf 大小不同(用户可以将其上传到系统),所以我无法定义它的确切高度。另外我不得不使用 pdfjs 来上传文件,所以它引起了更多的问题(显然不可能将滚动事件添加到非常 pdf (https://github.com/pipwerks/PDFObject/issues/58#event-603169061).)
所以经过一些试验和错误后,我是这样做的:
已下载 pdfjs https://mozilla.github.io/pdf.js/(很酷的东西)。 以下是有关它的更多信息 - https://developer.tizen.org/community/tip-tech/displaying-pdf-files-pdf.js-library
-
一页一页地渲染我的 pdf,将页面添加到添加了滚动事件的现有元素,并通过将页面数乘以一页的高度来找出 pdf 文件的高度:
PDFJS.getDocument('some/pdf.pdf').promise.then(function(pdf) {
thePdf = pdf;
var viewer = angular.element(document.querySelector('#pdf-scroller') );
for(var page = 1; page <= pdf.numPages; page++) {
var canvas = document.createElement('canvas');
canvas.className = 'pdf-page-canvas';
viewer.append(canvas);
renderPage(page, canvas);
}
});
function renderPage(pageNumber, canvas) {
thePdf.getPage(pageNumber).then(function(page) {
var viewport = page.getViewport(scale);
canvas.height = viewport.height;
canvas.width = viewport.width;
page.render({canvasContext: canvas.getContext('2d'), viewport: viewport});
});
}
angular.element(document.querySelector('#pdf-scroller') ).bind('scroll', function(){
var wrapper = angular.element(document.querySelector('#pdf-scroller') );
var agreementTextElement = document.getElementsByClassName('pdf-page-canvas')[0]
var pagesNo = document.getElementsByClassName('pdf-page-canvas').length
var totalDocumentHeight = agreementTextElement.offsetHeight * pagesNo;
if (this.scrollTop >= ((totalDocumentHeight) - wrapper.context.offsetHeight)){
document.getElementById('closeButton').removeAttribute('disabled')
}
})
【问题讨论】:
-
请重新整理您的问题。你应该只把工作代码放在
code-snippets。
标签: angularjs scroll modal-dialog addeventlistener pdfjs