今天跟大家聊聊我捣鼓的这个“freda”项目,名字挺简单的,但过程真是一波三折。
我想搞一个epub阅读器,原因很简单,市面上那些个阅读器,要么广告满天飞,要么功能鸡肋,要么界面丑到爆。作为一个颜控+实用主义者,我决定自己撸一个。
我调研了一圈,发现windows平台下做epub阅读器还是有一些现成的轮子的,比如之前看到的freda-chinese。它的优点是可以做注释和书签,还能改背景颜色,感觉还不错。但我这人就喜欢折腾,想看看能不能搞出点新花样。
接下来就是选技术栈了。我琢磨着,阅读器嘛界面要漂亮,性能要流畅,最好还能跨平台。于是我选择了Electron + *的组合。Electron负责搭框架,*负责搞界面,完美!
开始动手!先用Electron-Vue脚手架搭好项目,然后开始啃Epub解析的库。网上搜了一堆,各种库用起来都不太顺手。有的解析速度慢,有的对中文支持不还有的直接就报错。没办法,只能硬着头皮自己改。
解析Epub文件这块,我真是下了苦功夫。epub文件本质上就是一个zip包,解压后是一堆html、css、js和图片。要做的就是把这些东西读取出来,然后按照一定的规则渲染到界面上。
遇到最大的坑就是中文乱码问题。各种编码格式转换,试了好多种方法,才终于把中文显示正常了。
界面这块,我参考了一些优秀的阅读器设计,自己用*写了一套UI组件。包括书架、阅读页面、目录、设置等等。为了让阅读体验更我还加入了字体调整、亮度调节、夜间模式等功能。
遇到一个特别头疼的问题是翻页。一开始我用的是简单的scroll来实现翻页,但是体验很差,滑动不流畅,而且容易出现跳页的情况。后来我研究了一下专业的阅读器,发现它们都是用canvas来实现翻页的。于是我也尝试用canvas来实现,效果好了很多。
为了方便用户管理书籍,我还做了一个简单的书架功能。可以添加书籍、删除书籍、排序书籍等等。数据存储方面,我选择了Local Storage,简单方便。
做到这里,基本上一个能用的epub阅读器就出来了。但是,还有很多细节需要完善。比如,对不同排版格式的支持,对图片的优化,对字体渲染的优化等等。
我打算加入更多的功能。比如,云同步书签和阅读进度,支持更多的文件格式,加入语音朗读功能等等。
这回“freda”项目,我学到了很多东西。不仅巩固了前端技术,还了解了epub文件的结构和解析方法。更重要的是,我体验到了从零开始做一个项目的乐趣。虽然过程很辛苦,但是看到自己的作品一点点成型,那种成就感是无法用语言表达的。
这个项目还有很多不足之处,我会继续努力,把它做得更也欢迎大家提出宝贵的意见和建议。
还没有评论,来说两句吧...