webAPP阅读器实现
学而不死则罔,思而不学则殆。。
对手机阅读器进行简单的模拟。整个项目的布局主要包括正常文档流中的文章标题、文章正文及上下翻页按钮,处于非文档流中上下导航栏及选项面板。通过事件进行样式的切换,并利用localStorage进行样式的存储。同时,进行相关文档的撰写。利用分治思想将页面布局进行划分,位于文档流中的正文部分加一层div用于点击时触发处于固定位置上下导航栏及选项面板弹出。位于导航栏及选项面板内部的元素使用绝对定位确定位置。利用JavaScript及jQuery进行元素的DOM操作、样式切换、事件操作、数据存储等。
本文实现的阅读器,文章标题及正文部分位于正常的文档流中,当点击屏幕中间时,弹出顶部及底部导航栏(包括最底部导航栏与样式面板)。其中顶部导航栏主要用于返回文档开始处,对其进行固定定位,确定其弹出后的固定位置;而底部导航栏也设置固定定位,其内主要有目录、字体、阅读模式模块,主要用于对阅读体验效果进行设置。导航栏内部的子元素都处于绝对定位。利用jQuery通过事件交互来动态显示或隐藏导航栏信息。同时,利用localStorage存储设置后的样式效果。这里需要注意,当滚动上下文时导航栏应该隐藏,包括样式面板。其每次设置的样式可以通过localStorage进行存储,这里localStorage可进行封装,防止变量名冲突,然后利用其setItem与getItem进行存取数据。
效果图:
源码:https://github.com/sunshineqt/reader/tree/master/reader/reading
ps:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | ( function (){ var Util = ( function (){ var prefix = 'html5_reader' ; // 封装localStorage存储,防止方法中命名冲突, var StorageGetter = function (key){ return localStorage.getItem(prefix + key); } var StorageSetter = function (key, val){ return localStorage.setItem(prefix + key,val); } return { StorageGetter:StorageGetter, StorageSetter:StorageSetter } })(); var bkColor = Util.StorageGetter( 'background-color' ); if (!bkColor){ bkColor = 'red' ; } RootContainer.css( 'background-color' ,bkColor); $( '#bk-container1' ).click( function (){ var bkColor = $( "#bk-container1" ).css( "background-color" ); RootContainer.css( 'background-color' ,bkColor); Util.StorageSetter( 'background-color' ,bkColor); // RootContainer.css('background','#fdf'); }); |
宝剑锋从磨砺出,梅花香自苦寒来。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义