二、阅读器的开发(初始)-- 1、阅读器简介及开发准备工作

news2024/7/30 4:41:04

1、阅读器工作原理及开发流程

1.1阅读器工作原理简介

电子书(有txt、pdf、epub、mobi等格式)->解析(书名、作者、目录、封面、章节等)->(通过阅读器引擎)渲染 -> 功能(字号、背景色、目录、书签等)

epub是现较为主流的电子书格式,mobi是亚马逊kindle的电子书格式,我们用epub,目前主流的阅读器APP对epub都有良好的支持

1.2开发流程

开发准备 -> vue cli 搭建 -> 依赖包下载 -> 项目配置 -> 阅读器解析 -> 阅读器渲染 -> 翻页功能 -> 字号背景 -> 进度条 -> 目录

2、开发准备+搭建vue脚手架

2.1开发准备工作(生成字体图标)

我们在icomoon里面下载我们需要的字体图标

2.2搭建vue脚手架

首先需要有node、vue环境,可以控制台中看看node -v ; npm -v ;vue -V

我这里用的是vue cli 5.0,vue2的项目,用的npm init webpack 项目名 命令创建的项目 

第一步:

vue cli 的安装:npm install -g @vue/cli

vue init 的安装:npm i -g @vue/cli-init

(解释一下:

vue cli 就是一个快速搭建vue项目的脚手架工具。使用vue cli可以快速搭建vue开发环境以及对应的webpack配置,生成vue项目文件夹。

 vue-cli2初始化项目即创建项目用vue init webpack 项目名;vue-cli3/4创建项目用vue create 项目名。vue-cli2启动项目用npm run dev;vue-cli3用npm run serve启动项目。

vue cli2.x,只能用于初始化vue2.x的项目;vue cli3.x到4.5x,可以用于初始化vue2.x的项目,不能用于初始化vue3.x的项目;vue cli 4.5x以上,可以用于初始化vue2.x和vue3.x的项目)

第二步:用npm init webpack 项目名 来创建项目(注意项目名中不能用大写字母)

(解释一下:

如下?依次向下是项目名称、项目描述、项目作者、构建方式(建议选择Runtime+Compiler:recommended for most users 适合大多数用户)、安装vue的路由插件(建议y)、是否使用ESLint检测你的代码、是否安装单元测试(建议N)、是否安装用户真实场景(建议N)、项目创建后是否要为你运行npm install(建议选择yes,use npm)  (不需要就直接回车,上下箭头移动))

830822c022ee4e168c79babb137b2ffb.png

1cda4f4baa6048cbb5f9e70016107f20.png

现在去浏览器输入http://localhost:8081即可看见:48f26594bd10476a9b08375f9995b7a9.png

·通过VSCode打开项目,使用npm run dev启动项目7bd6a329085641149812734228250e17.pngeaf2080fa4254015bd4eca12ee93267e.png

如上,访问成功说明脚手架已经搭建成功啦。下面我们尝试通过IP地址来访问我们的站点,我们再开一个终端去看一下我们的ip,通过ifconfig en0来查看本地ip,在vscode终端输入ipconfig可看到df162a8d69f6462f8fdce11b1ff30fbb.pngc6a3aa7774ca467ba1aec9da280fa434.png然后如上用这个ip去访问这个站点,发现是不能访问的,这是因为在config目录下面的index.js,这个配置文件当中有一个host配置,host指定了localhost,那么通过ip地址是无法访问到站点的。我们将post改为host:'0.0.0.0',四个0表示通过本地的一切ip地址都可以访问到我们这个站点5d9defd39e4e4ec89a7b1024c7b4b46d.png8e61316b023c4d6589102272eed2d4ab.png然后重启一下服务,可以看到ip地址也可以访问了e6d19d0530e042418694aaedb1711f5c.png

2.3 搭建资源服务器

现在我们再来搭建一个静态资源服务器,我们拷贝一本电子书到static静态资源文件下,然后在浏览器地址栏中加上static/电子书文件名即可下载该电子书dab9b3e0cb4b47af877f5d8de9c68f2a.pngacc26e0f2f9a47f4a8bea11190e08ca3.png

一回车即可发现该电子书已经下载完成了,说明我们的静态资源服务器就生效了,这是一个比较简易的方式,后面我们会把我们的电子书放到静态资源服务器上面,比如像nginx服务器,我们到时候会使用nginx服务器作为静态资源服务器1843c123993e46b1a3967c5c30247a71.png

2.4安装一些依赖包

接下来我们下载一些需要的依赖包,npm install node-sass sass-loader --save-dev,scss是css的一种扩展语言,这个--save-dev表示会将我们的配置文件写入到package.json当中的devDependencies当中。这里注意不同版本的node需要安装对应的sass版本,我这里node是16版本,所以node-sass是对应要下载6.0+,我安装6.0.1的,而这个版本的node-sass要对应10.2.0的版本的sass-loader。然后又遇到依赖冲突这些问题,这种版本的事情真的是好麻烦的感觉。接下来再下载阅读器引擎,npm install epubjs --save

2.5把图标集成到项目中

接下来我们将图标集成到项目当中,把icoom文件夹拷贝到项目中,然后在src目录下面有个assets,assets主要存放我们的静态资源,我们在它下面建一个叫styles的文件夹,然后把我们刚才拷贝的fonts文件夹拷贝到styles下面,把styles.css也拷贝过来(重命名为icon.css),然后就把刚才拷的icoom删除。这个icon.css就是我们图标的class,再在main.js中把icon.css引入进来,我们可以在APP.vue中加个span图标看看浏览器中有没有显示,如下图可以看到有说明图标已经集成到项目中来啦。

485b48d6d30a4c54a587f9545599847e.png

e0754c58a84f4bdeb3cdea2bc6dd6931.pngeec623fef7c1435fa81733080a7846ae.png31cba893d7e94ebb840d9fac8b133d15.png

 

这里补充一下vue项目中各个文档的作用:

main.js文件:它是 项目 的入口文件,项目中所有的页面都会加载main.js,它主要有三个作用:①实例化vue ②放置项目中经常会用到的插件和css样式,例如网络请求插件axios和vue-resource、图片懒加载插件vue-lazyload ③存储全局变量

App.vue文件:它是主组件,是页面入口文件,所有页面都是在app.vue中进行切换的,可以理解为所有路由都是app.vue的子组件。不但可以当做是网站首页,也可以写所有页面中公共需要的动画或者样式,不在上面写代码也可以

src/assets:一般用于放置src里的组件所使用的静态资源

 

2.6 viewport 配置

viewport 是依赖设置用户在手机上的可视区域

vue脚手架默认的设置的可视区域的宽度为设备宽度,缩放比例为1:1,这样会有一个问题,就是屏幕的缩放比例没有固定,操作时经常容易误触,导致屏幕放大或缩小。

通过maximum-scale和minimum-scale限定屏幕缩放比例为1:1,通过user-scalable限制用户对屏幕进行缩放,下面在代码中具体实现,第一个图是没配置前,即加上后面那些,此时再去看发现屏幕不能放大或缩小了dff9c6efb1464f7f9a3cfcb6220b0df0.pngfb0b37316c7449509e3107aeb9d36159.png2.7 rem配置

·rem是css3新增的一个相对长度单位

·rem的值相当于根元素font-size值的倍数。1rem=根元素font-size,2rem=根元素font-size*2

在什么时候设置根元素font-size?我们选择在DOM加载完毕,也就是DOMContentlOaded事件动态设置根元素font-size,html.style.fontSize=window.innerWidth / 10 + 'px'  选屏幕十分之一做默认值而不是一个固定值,这样好处是随着屏幕宽度的变化,rem对应的值也会动态变化,代码如下,可以看到font-size已经设置成功了80e3ea76540449c2b9829404eb7c7c93.png

084328b232254ce88280ebaf3999bb93.png

我们改变屏幕宽度可以看到不同屏幕宽度,字体大小不同啦25e75e816b86494fa2fbb54ed2b77436.png90a2b4aea5a34f2084dcf0d3df58301d.png

这里还有个问题就是如果屏幕宽度较大的时候,我们的字号会非常大,所以我们需要为font-size设置一个上限,比如我们定为最大50,代码如下修改11097e3d0699408698c51c62a6f7bb64.png

fd649e708d604d678221c08ca2f2e401.png

2.7 reset.scss和global.scss

接下来我们再引入这两个全局样式文件

·reset.scss的目的是为了消除不同浏览器默认样式的不一致性

·global.scss规定了整个站点的公共样式、公共方法和公共参数等

在global中我们需要实现px2rem方法,将px动态转化为rem

去访问下面这个站点,把里面那个框的样式复制,然后在src/style下新建reset.scss,然后复制到这里d34a13bca0b74e538a3cffa95f74a24a.png

48e9a3a866724dd5be257c61cd5d0cd6.png然后再在reset.scss后面对根元素以及body元素的宽高和默认字体进行一个设置,如下dd7d9f0435cd43dd8972bf61d4e347a2.png

然后我们再创建一个global.scss,这里面我们要实现把px动态转化为rem,记得到main.js中引入

7052a2289ce34e0981f8d56ea1ef0f21.png75b2c7b906404661b074335f737ff479.png

2de23f14b273473caf59c6802f962edb.png

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1533071.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣热门算法题 56. 合并区间,57. 插入区间,58. 最后一个单词的长度v

56. 合并区间,57. 插入区间,58. 最后一个单词的长度,每题做详细思路梳理,配套Python&Java双语代码, 2024.03.20 可通过leetcode所有测试用例。 目录 56. 合并区间 解题思路 完整代码 Python Java ​编辑 5…

【NLP笔记】预训练+微调范式之OpenAI Transformer、ELMo、ULM-FiT、Bert..

文章目录 OpenAI TransformerELMoULM-FiTBert基础结构Embedding预训练&微调 【原文链接】: BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 【本文参考链接】 The Illustrated BERT, ELMo, and co. (How NLP Cracked Tra…

ASP.NET-Global.asax使用详解

本文介绍了如何使用Global.asax文件来增强ASP.NET Web应用程序的功能。首先,介绍了Global.asax文件的作用和基本功能。接着,详细探讨了在Global.asax中实现定时任务、应用程序级别的错误处理、应用程序启动和结束时执行特定逻辑等功能。随后,…

Macbook m1安装docker详细教程

下载安装包 进入官网 https://www.docker.com/ 下滑找到下载位置 下滑找到Mac对应安装包 等待下载完成即可。 安装 双击打开下载的安装包 将Docker拖到Applications中 安装完成后,找到安装的Docker 双击打开 点击accept同意 进入下面: 点fini…

Chart-based Reasoning: Transferring Capabilities from LLMs to VLMs

Chart-based Reasoning: Transferring Capabilities from LLMs to VLMs 相关链接:arXiv 关键字:Vision-language models、ChartQA、multimodal reasoning、fine-tuning、synthetic data 摘要 本文提出了一种技术,将大型语言模型(…

Python分析人民日报关于台湾的报道

【项目背景】 《人民日报》数据挖掘,时间:1949.10.1-2023.12.31 标题含有“台湾”的报道 需要以下内容 1、标题,即上述时间段的报道标题和相应的报道时间、版面 2、包含标题、时间、版面的所有报道内容 3、报道的年份和数量的趋势图 4、…

CV论文--2024.3.21

1、Chain-of-Spot: Interactive Reasoning Improves Large Vision-Language Models 中文标题:Chain-of-Spot:交互式推理改进大型视觉语言模型 简介:在视觉语言理解领域,模型在解释和推理视觉内容方面的熟练程度已经成为许多应用的…

企业组织机构代码查询入口词令直达关键词口令是什么?

什么是企业组织机构代码? 组织机构代码是国内依法注册、依法登记的机关、企事业单位、社会团体,以及其他组织机构颁发一个在全国范围内唯一的、始终不变的代码标识。组织机构代码在单位的运营和管理中发挥着重要作用。 如何查询获取企业组织机构代码&a…

【机器学习】基于萤火虫算法优化的BP神经网络分类预测(FA-BP)

目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】萤火虫算法(FA)原理及实现 2.设计与实现 数据集: 多输入多输出:样本特征24,标签类别4。…

一些常见漏洞原理

一些漏洞的原理: SQL注入漏洞: SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数…

day65 分层实现商品管理系统

分层实现商品管理系统 事务的特点,隔离级别的分类 在java中如何实现事务的操作 商品信息: 在goods表中作为子表引用class主表的主键作为goods表的外键 有对应主外键关联时也就是n对1的关系时 在使用jdbc技术时goods类对象要包含class类对象作为goods对…

从浏览器地址栏输入 URL 到请求返回发生了什么?

从浏览器地址栏输入 URL 到请求返回发生了什么? 从浏览器地址栏输入 URL 到请求返回发生了什么?简略的答案什么是 URL?DNS域名解析TCP建立连接:三次握手发送HTTP请求消息结构请求报文请求行请求头请求体 响应报文响应行响应头响应…

Vue 计算属性和watch监听

1.1.计算属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!-- 引入vue.js --><script src"node_modules/vue/dist/vue.js"></script> </h…

LeetCode 刷题 --- 快速幂

前言&#xff1a; 幂运算是一种常见的运算&#xff0c;求取a^n,最容易想到的方法便是通过循环逐个累乘&#xff0c;其复杂度为O(n)&#xff0c;这在很多时候是不够快的&#xff0c;所以我们需要一种算法来优化幂运算的过程。 快速幂&#xff0c;二进制取幂&#xff08;Binary…

【视频图像取证篇】模糊图像增强技术之去噪声类滤波场景应用小结

【视频图像取证篇】模糊图像增强技术之去噪声类滤波场景应用小结 模糊图像增强技术之去噪声类滤波场景应用小结—【蘇小沐】 文章目录 【视频图像取证篇】模糊图像增强技术之去噪声类滤波场景应用小结&#xff08;一&#xff09;去噪声类滤波器1、去块滤波器&#xff08;Deblo…

基于Vue.js和D3.js的智能停车可视化系统

引言 随着物联网技术的发展&#xff0c;智能停车系统正逐渐普及。前端作为用户交互的主要界面&#xff0c;对于提供直观、实时的停车信息至关重要。 目录 引言 一、系统设计 二、代码实现 1. 环境准备 首先&#xff0c;确保您的开发环境已经安装了Node.js和npm。然后&…

Qt 多元素控件

Qt开发 多元素控件 Qt 中提供的多元素控件有: QListWidgetQListViewQTableWidgetQTableViewQTreeWidgetQTreeView xxWidget 和 xxView 之间的区别 以 QTableWidget 和 QTableView 为例. QTableView 是基于 MVC 设计的控件. QTableView 自身不持有数据. 使用QTableView 的 …

Prometheus 配置Basic auth认证

官方配置说明&#xff1a; Basic auth | Prometheus 一、生成密码加密串 Prometheus于2.24版本&#xff08;包括2.24&#xff09;之后提供Basic Auth功能进行加密访问&#xff0c;在浏览器登录UI的时候需要输入用户密码&#xff0c;访问Prometheus api的时候也需要加上用户密…

Qt 鼠标滚轮示例

1.声明 void wheelEvent(QWheelEvent *event) override;2.实现&#xff08;方便复制、测试起见用静态变量&#xff09; #include <mutex> void MainWindow::wheelEvent(QWheelEvent *event) {static QLabel *label new QLabel("Zoom Level: 100%", this);st…

Cesium for UE-01-虚幻引擎的下载安装及插件配置

学习Cesium for UE的过程笔记 下载UE 下载 下载完成后&#xff0c;点击运行&#xff0c;执行安装 安装完成后需要下载epic game 下载完成&#xff0c;需要登录 没有账号的自行注册&#xff0c;或者选一个有账号的平台登录即可 选择虚幻引擎&#xff0c;再点击库 可以看到下…