index.html首页(轮播图、网站介绍、固定文章/工具推荐)nav.html顶部导航栏footer.html底部栏(copyright行)posts.html帖子首页(分页显示帖子概况、搜索)post0.html帖子-拓展欧拉定理:从快速幂到疾速幂post1.html帖子-C语言输入流浅析post2.html帖子-Python高阶函数浅析post3.html帖子-git指令小结post4.html帖子-线段树、树状数组和块状数组小结post5.html帖子-记解决Ubuntu系统上的小问题几则post6.html帖子-编程相关使用网站小推荐tools.html工具首页tool0.html工具-多功能计算器(常见算法函数计算,代码eval执行)tool1.html工具-文本处理器(查找、替换、统计、正则搜索)tool2.html工具-随机抽取器(多种模式的随机抽签模拟)tool3.html工具-乱数假文生成器(中英)about.html关于(联系方式)
css/ 下
general.css通用样式indexx.css首页专用样式nav.css导航栏专用样式footer.css底部栏专用样式tools.css工具首页专用样式tools_common.css四个具体工具专用样式posts.css帖子首页专用样式post_common.css七个具体帖子专用样式star_canvas.css首页星星月亮动画样式about.css关于页专用样式
js/ 下
jquery.jsjQuery 库index.js首页脚本nav.js导航脚本footer.js底部栏脚本star_canvas.js首页星星月亮动画脚本posts.js帖子首页脚本post_info.js帖子分类、各帖子概述信息、帖子代码块常量内容post_common.js具体帖子通用脚本tools.js工具首页脚本tool_common.js工具通用脚本tool0.js多功能计算器显示逻辑脚本、说明书常量tool0_thread.js多功能计算器各函数具体实现tool1.js文本处理器显示逻辑脚本、说明书常量tool2.js随机抽取器显示逻辑脚本tool3.js乱数假文生成器显示逻辑脚本、常用汉字表
images/ 下
banner1.png首页横幅图片banner2.png首页横幅图片banner3.png首页横幅图片star.png星星动画静态素材图moon.png月亮动画静态素材图post0_0.png帖子附图(欧拉定理数学表述)post0_1.png帖子附图(扩展欧拉定理数学表述)post1_0.png帖子附图(代码运行结果)
nav.js
具体逻辑:代码注入。即在具体要加载导航栏的网页中,设置一个 id 为 ifr 的 div 标签用于装载导航栏,然后在具体网页执行 nav.js,然后该 JS 将 HTML 代码以字符串形式传送到具体网页,并重新加载。
为了鲁棒性考虑了多种情况(跨域与否)。
比如当前在首页,导航栏当前位置高亮,主要是 build_href 函数,具体而言,通过读取当前 URL,截取 URL 的一部分名字(如得出 index),然后查看是否跟当前导航栏名字一致,如果一致就高亮。
当页面太长时,浏览到下面时,点击回到顶部。主要是 set_goto_top 函数。
监听 resize 和 scroll 事件,如果调整了宽高,重新加载一次页面,因为 CSS 是按百分比设置的,所以能自动通过 CSS 计算新的宽高。下同。
footer.js
主要逻辑代码是自动调整宽高,同上理。
index.js 的大部分逻辑都是这个相关的。
- 自动播放:具体实现为设置周期事件,每次在播放上一张图片消失的同时播放下一张图片出现的动画,从而实现轮播效果。播放结束更新相关状态。
- 手动跳转:点击左下方可以直接跳转到对应横幅,并播放跳转动画。
实现了首页星星和月亮若隐若现的效果。
具体而言,在 star_canvas.js 反复加载了多次同一个星星静态图,并通过给不同的 CSS 样式(star_canvas.css)设置了位置和旋转角度等,然后通过 CSS3 定义了几种若隐若现的动画,并通过 JS 将星星插入到具体 id 为 star 的标签上。月亮同理。
搜索帖子,主要通过 GET 方法实现,即在 URL 上添加参数代表搜索的要求(如 type 代表类型),在 load_post 函数具体实现,找到具体满足要求的的帖子列表,如果超过每页显示的数量就分页显示,否则单页显示。
具体浏览哪一页通过 URL 上的 page 参数控制页数。
通过 generate_abbr 函数,动态地生成一个帖子概述,通过搜索找到帖子ID(pid),即帖子位于常量数组的哪个下标,然后根据 ID 读取帖子的标题、日期、标签等内容,并动态组织成帖子信息块,生成的标签添加到 posts 标签里。
post_common.js
每一个帖子都用同一个 JS 生成,动态性较强。具体而言动态生成的部分包括:
标题信息是帖子概述和具体帖子共用的,为了实现复用,所以只存了一份信息。通过 build_common 函数加载帖子的标题、标签、日期等具体信息,然后动态加载到网页首部。
代码块即显示在帖子里的代码文本,属于帖子的一部分。
首先根据代码块的信息(HTML提供,在 render_all_code 进行读取),读取代码常量(render_code),将不能正常显示的特殊符号替换,然后处理好分行,合成到一个有序列表里,形成代码文本。
一个帖子的底部会随机推荐若干篇其他帖子。这个随机算法通过 select_except 具体实现,最后在构建帖子的 build_common 调用。
tools.js
主要逻辑代码是自动调整宽高,同上理。
并批量地实现了点击跳转到具体逻辑。
具体显示逻辑略(即读取说明书常量,动态注入到 HTML 里,和控制表单、按钮输入输出等代码),下同略。仅概述核心逻辑。
整体逻辑:
- 加载网页时,事先通过
append_func_list调用代码,加载具体的代码说明到前端,并通过tool0_thread.js定义对应的函数并加载。 - 用户输入要执行的计算代码(可执行的多行 JS 代码),然后调用
_cal函数,通过内置函数eval执行计算,并返回计算结果(保存在全局变量_res)里,通过_show显示结果。
常用正则表达式通过动态方式加入到 HTML 列表里显示。
整体逻辑虽然长,但是很好懂,无非就是字符串统计、搜索,并显示搜索结果而已。
整体逻辑虽然长,但是很好懂,无非就是多种情况下的具体随机抽取逻辑。为了提高性能进行了一定的优化和复杂度分析。
具体生成逻辑实际上是随机抽取的延伸,即随机从字典里抽取字符,然后抽取一定的长度后抽取标点符号,加多点分类讨论即可。