当前位置: 首页 > news >正文

成都行业网站怎么看一个网站是不是外包做的

成都行业网站,怎么看一个网站是不是外包做的,制作小网站,母版做双语网站使用pdfjs-dist预览pdf#xff0c;实现预加载#xff0c;滚动条翻页。pdfjs的版本很重要#xff0c;换了好多版本#xff0c;终于有一个能用的 node 20.18.1 pdfjs-dist: ^2.2.228, vue页面代码如下 templatediv v-loadingloa…        使用pdfjs-dist预览pdf实现预加载滚动条翻页。pdfjs的版本很重要换了好多版本终于有一个能用的 node 20.18.1 pdfjs-dist: ^2.2.228, vue页面代码如下 templatediv v-loadingloadingdiv classfixed-toolbardiv classflex flex-directiondiv classmb4el-button clickonClose() sizeminitypewarning返nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;回/el-button/divdiv classmb4el-button clickswitchViewMode() sizemini typesuccess切换模式/el-button/divdiv classmb4el-button clickscalBig() sizeminitypeprimary放nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;大/el-button/div!-- divel-button classmb4 clickrenderPdf(1) sizemini typeprimary默认/el-button/div --divel-button clickscalSmall() sizeminitypeprimary缩nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;小/el-button/divel-dropdown sizemini triggerclick classmore-dropdown styleline-height: 35px;el-button sizemini typeprimary缩nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;放/el-buttonel-dropdown-menu slotdropdownel-dropdown-itemspan classel-button--text- clickscale 11X/span/el-dropdown-itemel-dropdown-itemspan classel-button--text- clickscale 22X/span/el-dropdown-itemel-dropdown-itemspan classel-button--text- clickscale 33X/span/el-dropdown-item/el-dropdown-menu/el-dropdown/div/div!-- PDF容器 --div refpdfContainer classpdf-container scrollhandleScroll!-- 占位符用于撑开滚动区域 --div :style{ height: totalHeight px }/div!-- 渲染可见页面 --div v-forpage in visiblePages :keypage.pageNumber :refpage-${page.pageNumber} classpage-container:style{ top: getPageTop(page.pageNumber) px }canvas :refcanvas-${page.pageNumber}/canvasdiv v-ifpage.loading classloading-indicator加载中.../div/div/div/div /templatescript import pdfjsLib from pdfjs-dist/build/pdf; import pdfjsWorker from pdfjs-dist/build/pdf.worker.entry; import { debounce } from lodash;pdfjsLib.GlobalWorkerOptions.workerSrc pdfjsWorker;export default {data() {return {pdfDoc: null,loading: true,totalPages: 0,pageHeights: [],totalHeight: 0,visiblePages: [],scale: 1,baseScale: 1, // 移动端基准缩放比例scrollTop: 0,viewport: null,renderTasks: {},loadedPages: {}, // 新增记录已加载的页面desiredTotal: 5, // 每次加载的页面数量canvasPool: []};},mounted() {const pageSize this.$route.query.pageSizethis.desiredTotal pageSize?pageSize:this.desiredTotalconsole.log(预加载页面数量: --, this.desiredTotal);this.loadPdf(this.pdfUrl);this.debouncedHandleScroll debounce(this.updateVisiblePages, 100);this.debouncedHandleResize debounce(() {this.calculatePageHeights();this.updateVisiblePages();}, 100);window.addEventListener(resize, this.handleResize);},beforeDestroy() {window.removeEventListener(resize, this.handleResize);this.debouncedHandleScroll.cancel();this.debouncedHandleResize.cancel();Object.values(this.renderTasks).forEach((task) task.cancel());},computed: {pdfUrl() {return this.$route.query.pdfUrl;},},watch: {scale(newVal) {this.loadedPages {}this.updateVisiblePages()}},methods: {switchViewMode() {this.$router.replace({name: pagePreviewPdf,query: {pdfUrl: this.pdfUrl}})},onClose() {this.$router.go(-1)},// 放大scalBig() {this.scale this.scale 0.2},// 缩小scalSmall() {if (this.scale 1.2) {this.scale this.scale - 0.2}},async loadPdf(url) {try {const loadingTask pdfjsLib.getDocument(url);this.pdfDoc await loadingTask.promise;this.totalPages this.pdfDoc.numPages;await this.calculatePageHeights();this.updateVisiblePages();this.loading false;} catch (error) {console.error(加载PDF失败:, error);this.loading false;this.$message.error(加载PDF失败: error);}},handleScroll() {this.debouncedHandleScroll();},handleResize() {this.debouncedHandleResize();},async calculatePageHeights() {this.pageHeights [];let page await this.pdfDoc.getPage(1);let viewport page.getViewport({ scale: 1 });this.baseScale this.isMobile ? window.innerWidth / viewport.width : 1for (let i 1; i this.totalPages; i) {const page await this.pdfDoc.getPage(i);const viewport page.getViewport({ scale: this.scale*this.baseScale });this.pageHeights.push(viewport.height);console.log(i, 页面高度, viewport.height, px,页面宽度:, viewport.width, px)}this.totalHeight this.pageHeights.reduce((sum, height) sum height, 0);},getPageTop(pageNumber) {const top this.pageHeights.slice(0, pageNumber - 1).reduce((sum, height) sum height, 0)// console.log(当前显示页面top, top)return top;},updateVisiblePages() {const container this.$refs.pdfContainer;const scrollTop container.scrollTop;const containerHeight container.clientHeight;// 计算初始可见范围let startPage 1;let endPage this.totalPages;let currentHeight 0;// 计算起始页for (let i 0; i this.pageHeights.length; i) {currentHeight this.pageHeights[i];if (currentHeight scrollTop) {startPage i 1;break;}}// 计算结束页currentHeight 0;for (let i 0; i this.pageHeights.length; i) {currentHeight this.pageHeights[i];if (currentHeight scrollTop containerHeight) {endPage i 1;break;}}// 扩展预加载范围总页数不超过10const desiredTotal this.desiredTotal;const visibleCount endPage - startPage 1;let remaining desiredTotal - visibleCount;if (remaining 0) {let preloadBefore Math.floor(remaining / 2);let preloadAfter remaining - preloadBefore;let newStart Math.max(1, startPage - preloadBefore);let newEnd Math.min(this.totalPages, endPage preloadAfter);// 边界调整const addedBefore startPage - newStart;const addedAfter newEnd - endPage;if (addedBefore preloadBefore) {newEnd Math.min(this.totalPages, newEnd (preloadBefore - addedBefore));} else if (addedAfter preloadAfter) {newStart Math.max(1, newStart - (preloadAfter - addedAfter));}startPage newStart;endPage newEnd;// 确保不超过总页数限制if (endPage - startPage 1 desiredTotal) {endPage startPage desiredTotal - 1;if (endPage this.totalPages) endPage this.totalPages;}} else {// 可见页数超过10时调整endPage startPage desiredTotal - 1;if (endPage this.totalPages) {endPage this.totalPages;startPage Math.max(1, endPage - desiredTotal 1);}}// 生成可见页面数组this.visiblePages [];console.log(渲染显示范围, startPage, --- , endPage)const pages []for (let j startPage; j endPage; j) {pages.push(j )}console.log(loadedPages:, JSON.stringify(this.loadedPages))// 移除不在显示区的页面Object.keys(this.loadedPages).filter(k !pages.includes(k)).forEach(pageNumber {this.$delete(this.loadedPages, pageNumber);})console.log(cleaned loadedPages:, JSON.stringify(this.loadedPages))for (let i startPage; i endPage; i) {const isLoaded !!this.loadedPages[i];this.visiblePages.push({pageNumber: i,loading: !isLoaded,});if (!isLoaded) {this.renderPage(i);console.log(渲染, i)} else {console.log(DONE, i)}}},async renderPage(pageNumber) {console.log(loadedPages:, JSON.stringify(this.loadedPages))if (this.loadedPages[pageNumber]) {const index this.visiblePages.findIndex((p) p.pageNumber pageNumber);if (index ! -1) this.$set(this.visiblePages[index], loading, false);return;}if (this.renderTasks[pageNumber]) this.renderTasks[pageNumber].cancel();try {const page await this.pdfDoc.getPage(pageNumber);const canvas this.$refs[canvas-${pageNumber}][0];const context canvas.getContext(2d);const viewport page.getViewport({ scale: this.scale*this.baseScale });canvas.height viewport.height;canvas.width viewport.width;const renderTask page.render({ canvasContext: context, viewport });this.renderTasks[pageNumber] renderTask;await renderTask.promise;this.$set(this.loadedPages, pageNumber, true); // 标记为已加载const index this.visiblePages.findIndex((p) p.pageNumber pageNumber);if (index ! -1) this.$set(this.visiblePages[index], loading, false);} catch (error) {if (error.name ! RenderingCancelledException) console.error(渲染失败:, error);}},}, }; /scriptstyle langscss scoped .pdf-container {height: 100vh;overflow-y: auto;width: 100%;position: relative; }.page-container {position: absolute;width: 100%;background: #f5f5f5;margin-bottom: 20px;display: flex;justify-content: center; }.loading-indicator {text-align: center;padding: 20px; }.fixed-toolbar {position: fixed;bottom: 50%;right: 0;background-color: white;/* 可选设置背景颜色 */opacity: 0.7;z-index: 1000;/* 确保工具栏在其他内容之上 */padding: 10px;box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);/* 可选添加阴影效果 */margin-bottom: 10px;flex-wrap: wrap; }.mb4 {margin-bottom: 4px; }media screen and (max-width: 768px) {} /style
http://www.hkea.cn/news/14480249/

相关文章:

  • 网站怎么做代码优化python在线编程器
  • 南京网站做的好的公司贵州省住房和城乡建设厅网网站首页
  • 北京网站设计公司新鸿儒山西网站建设费用
  • 西安手机商城网站建设提交网站收录
  • 手机app界面设计网站wordpress主题网址导航葬爱
  • 宁河网站建设品牌网站建设大概费用
  • 网站制作公司兴田德润简介网站订票策划方案
  • html怎么弄成网站wordpress钉钉登陆
  • 伊利集团网站建设怎么样呢wordpress建淘宝客
  • 兰州网站的优化企业微信用途
  • 证券公司网站建设方案互联网项目推广是什么
  • 北京做网站制作公司网站被360拦截怎么办
  • 中山网站建设文化价位成全视频免费高清观看在线电视剧
  • 漯河网站建设e阜阳 做网站
  • 有什么网站可以做代理的loop wordpress
  • 搜狗网站做滤芯怎么样重庆建设工程信息网站
  • 柳州做网站的个人网站导航模版
  • 苏州网站制作网站建设做一个中型网站需要多少钱
  • 贵州网站优化宠物网站模板下载
  • 建设网站网页打不开写一个网站需要什么技术
  • 中国建设银行信用卡官方网站wordpress 高级字段
  • 重庆快速网站推广做英文版网站
  • 曾经做网站网站代理wordpress后端响应慢
  • 做推送的网站有哪些html5 网站开发 适配
  • 福州建设网站linux增加网站
  • 海外社交网站开发百度学术官网入口网页版
  • 怎样在百度上作网站推广iis 二级网站 发布
  • seo建站公司怎么制作微信链接网页
  • gta5线下买房网站建设沈阳 网站开发
  • html网站标签wordpress建站吧