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

外贸 推广网站中国网站为什么做的那么丑

外贸 推广网站,中国网站为什么做的那么丑,企业网络规划设计方案,网络媒体设计是什么参考地址:https://juejin.cn/post/7105933034771185701 这个参考文章的代码直接可以复制使用,样式也是给到的,但是实现的是一页一页的显示pdf内容,我的需求是要全部展示出来,页码切换时是做一个滚动定位操作。 思路&am…

参考地址:https://juejin.cn/post/7105933034771185701
这个参考文章的代码直接可以复制使用,样式也是给到的,但是实现的是一页一页的显示pdf内容,我的需求是要全部展示出来,页码切换时是做一个滚动定位操作。

思路:

  1. 通过vue3-pdfjs插件提供的方法createLoadingTask获取到总页码numPages,通过循环将所有页面渲染
  2. 页码定位通过锚点定位方式实现。

安装插件:

 npm install vue-pdf-embed@1.1.6npm install vue3-pdfjs

注意:vue-pdf-embed使用1.1.6版本,之前未固定版本出现内容不显示问题(大概1版本的可以,2版本的不行,我这边使用的是1.1.6版本)。

完整代码:

<template><div class="pdf-preview-container"><!-- 头部导航栏 --><div class="pdf-header"><div class="page-navigation"><div class="page-controls"><!-- 上一页按钮 --><el-button link :disabled="state.pageNum <= 1" @click="prevPage"><el-icon><ArrowUp /></el-icon></el-button><!-- 页码输入框 --><el-input v-model.number="state.pageNum" class="page-input" @keyup.enter="goToPage" @blur="goToPage" /><!-- 下一页按钮 :disabled="currentPage >= totalPages" --><el-button link @click="nextPage"><el-icon><ArrowDown /></el-icon></el-button></div><!-- 总页数 --><span class="total-pages">/&nbsp;&nbsp;{{ state.numPages }}</span></div></div><!-- PDF预览区域 --><div class="pdf-content"><!-- PDF内容显示区域 --><div class="pdf-display-area"><div v-for="item in state.numPages" :key="item" class='pdf-item' :id="`pdf-page-${item}`"><vue-pdf-embed :source="state.source" class="vue-pdf-embed" :page="item" /></div></div></div></div>
</template><script setup lang="ts">
import { ref, onMounted, onBeforeUnmount, watch, computed, reactive } from 'vue';
import { Close, ArrowUp, ArrowDown } from '@element-plus/icons-vue';
import VuePdfEmbed from "vue-pdf-embed";
import { createLoadingTask } from "vue3-pdfjs";const pdfFile = 'https://pic2-cdn.trytalks.com/pic2/202507091052/files_1a1b765ec00125e0FfuRNLZz.pdf?Expires=1754621583&OSSAccessKeyId=LTAI5tQd3SECCekgpXLBnQSo&Signature=nUn9kW375rdiVNHi2wdDLDm0gAM%3D'const state = reactive({source: pdfFile, // 预览pdf文件地址pageNum: 1, // 当前页面scale: 1, // 缩放比例numPages: 0, // 总页数
});const loadingTask: any = ref(null)const pdfInit = () => {loadingTask.value = createLoadingTask(state.source);loadingTask.value.promise.then((pdf: { numPages: number }) => {state.numPages = pdf.numPages;});
}// 滚动到指定页面
let isManualNavigation = false;
const scrollToPage = (page: number) => {// 设置手动导航标志isManualNavigation = true;// 先立即更新页码状态const validPage = Math.max(1, Math.min(page, state.numPages));state.pageNum = validPage;// 执行滚动const element = document.getElementById(`pdf-page-${validPage}`);if (element) {element.scrollIntoView({behavior: 'smooth',block: 'start'});}// 滚动结束后清除标志setTimeout(() => {isManualNavigation = false;}, 1000);
};// 上一页
const prevPage = (): void => {if (state.pageNum > 1) {scrollToPage(state.pageNum - 1);}
};// 下一页
const nextPage = (): void => {const nextPage = state.pageNum + 1;if (nextPage <= state.numPages) {scrollToPage(nextPage);}
};// 跳转到指定页
const goToPage = (): void => {// 确保输入是有效数字let page = parseInt(String(state.pageNum));if (isNaN(page) || page < 1) {page = 1;} else if (page > state.numPages) {page = state.numPages;}// 更新输入框显示正确的页码state.pageNum = page;scrollToPage(page);
};// 处理滚动事件,更新当前页码(带防抖)
let scrollTimeout: number | null = null;
const handleScroll = () => {// 如果是手动导航触发的滚动,则不更新页码if (isManualNavigation) return;if (scrollTimeout) {clearTimeout(scrollTimeout);}scrollTimeout = setTimeout(() => {const container = document.querySelector('.pdf-content');if (!container) return;const scrollPosition = container.scrollTop;const items = document.querySelectorAll('.pdf-item');const containerHeight = container.clientHeight;const threshold = containerHeight * 0.3; // 30%视口高度作为阈值let currentPage = state.pageNum;// 精确检测当前可见页面items.forEach((item) => {const pageNum = parseInt(item.id.replace('pdf-page-', ''));const rect = item.getBoundingClientRect();// 如果页面顶部在视口阈值范围内,则认为是当前页if (rect.top >= -threshold && rect.top <= threshold) {currentPage = pageNum;}});// 只有当页码确实变化时才更新if (currentPage !== state.pageNum) {state.pageNum = currentPage;}}, 150) as unknown as number; // 适当增加防抖时间
};// 组件挂载时
onMounted(() => {// 检查浏览器PDF支持const isPdfSupported = 'application/pdf' in navigator.mimeTypes;console.log('浏览器原生支持PDF:', isPdfSupported);// 添加滚动事件监听const contentEl = document.querySelector('.pdf-content');if (contentEl) {contentEl.addEventListener('scroll', handleScroll);}pdfInit();
});onBeforeUnmount(() => {// 移除滚动事件监听const contentEl = document.querySelector('.pdf-content');if (contentEl) {contentEl.removeEventListener('scroll', handleScroll);}
});
</script><style lang="scss" scoped>
.pdf-preview-container {display: flex;flex-direction: column;height: 100%;background-color: #fff;border-radius: 4px;overflow: hidden;.pdf-header {display: flex;justify-content: space-between;align-items: center;padding: 10px 16px;background-color: #fff;border-bottom: 1px solid #e0e0e0;.back-button {cursor: pointer;display: inline-block;padding: 5px 5px 0px;border-radius: 4px;transition: background-color 0.2s;&:hover {background-color: #f0f0f0;}}.pdf-actions {display: flex;gap: 10px;}.page-navigation {display: flex;align-items: center;.page-controls {display: flex;align-items: center;padding: 2px 8px;.page-input {width: 50px;margin: 0 5px;:deep(.el-input__inner) {text-align: center;padding: 0 5px;}}}.total-pages {margin-left: 5px;color: #606266;}}}.pdf-content {flex: 1;overflow: auto;/* 自定义滚动条样式 */&::-webkit-scrollbar {width: 6px;height: 6px;}&::-webkit-scrollbar-track {background: rgba(0, 0, 0, 0.05);border-radius: 3px;}&::-webkit-scrollbar-thumb {background: rgba(0, 0, 0, 0.15);border-radius: 3px;transition: background 0.2s;&:hover {background: rgba(0, 0, 0, 0.25);}}.pdf-loading,.pdf-error {height: 100%;display: flex;flex-direction: column;justify-content: center;align-items: center;}.pdf-display-area {.pdf-item {margin: 16px 0px;}}}
}
</style>

文章转载自:

http://tpvGtHaz.fhddr.cn
http://isMCvDvJ.fhddr.cn
http://31dMgOoI.fhddr.cn
http://JR0hHM1p.fhddr.cn
http://85icEuJT.fhddr.cn
http://BIrQkptq.fhddr.cn
http://vOz15TGY.fhddr.cn
http://Ol5o3ACS.fhddr.cn
http://uh76Gfks.fhddr.cn
http://TUqfvpjv.fhddr.cn
http://UHSoKi0t.fhddr.cn
http://Yl7HhqkE.fhddr.cn
http://XPtEXzqv.fhddr.cn
http://aKpO2yVo.fhddr.cn
http://VbNlPBHi.fhddr.cn
http://ThJq2nTi.fhddr.cn
http://FBNkvS7Y.fhddr.cn
http://NqoQHMks.fhddr.cn
http://PZfJzaOB.fhddr.cn
http://lE6dFrF2.fhddr.cn
http://qJavPTow.fhddr.cn
http://RhjYB6Fh.fhddr.cn
http://zhFJMl4S.fhddr.cn
http://F6zDMgDu.fhddr.cn
http://N2hBtPTp.fhddr.cn
http://SHOBRWlS.fhddr.cn
http://VqOJLS2z.fhddr.cn
http://X1UcGxD1.fhddr.cn
http://i2gOZWZ9.fhddr.cn
http://fq5S6Q9i.fhddr.cn
http://www.dtcms.com/wzjs/697593.html

相关文章:

  • seo发帖网站橙光音乐一家做音乐的网站
  • php二次网站开发步骤电影视频网站建设费用
  • 网站注册理由手机网站用什么系统
  • 权威的合肥网站推广重庆交通大学官网网站
  • 网站数据库连接出错网站配色表
  • 邯郸网站建设最新报价企业网站seo 优帮云
  • 自己怎么做卡密网站c语言在线编程网站
  • 博客网站品牌推广全案
  • 做网站镜像wordpress 总分类页
  • 旅游网站建设分析机电设备网站模板
  • 如何创建企业网站企业是做app还是做网站
  • 网站建设模板是什么意思东营 网站建设公司
  • 大埔县住房和城乡规划建设局网站上海seo及网络推广
  • 手机网站 asp重庆建网站的公司集中在哪里
  • 中国广东网站建设html5网页制作代码大全
  • 已有网站做移动网站网站开发的前端后端
  • 南充建网站的资料上海市建设注册管理网站
  • 怎么使用wordpress建站西安建站平台哪个好
  • 北京企业网站建设公司哪家好网站不用域名需要备案吗
  • 搜狐快站生成app网站创建公司网站
  • 网站连通率wordpress刷量插件
  • 无锡自助做网站不懂代码如何开始网站程序建设
  • 中国做的好的房产网站房屋装修效果图app有哪些
  • 深圳企业网站建设多少钱企业网站建设定位注意的问题
  • 网站下载音乐搜索推广平台有哪些
  • 网站建设部署视频教程小红书推广渠道
  • 怎样做diy家具网站企业网站如何做排名
  • 网站搭建语言网页设计分为几个部分
  • WordPress建站 用插件威海做网站优化
  • 公司网站建设需要多少钱培训网页设计机构