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.js
jQuery 库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 列表里显示。
整体逻辑虽然长,但是很好懂,无非就是字符串统计、搜索,并显示搜索结果而已。
整体逻辑虽然长,但是很好懂,无非就是多种情况下的具体随机抽取逻辑。为了提高性能进行了一定的优化和复杂度分析。
具体生成逻辑实际上是随机抽取的延伸,即随机从字典里抽取字符,然后抽取一定的长度后抽取标点符号,加多点分类讨论即可。