关于fluid打字机问题的解决记录

关于fluid打字机问题的解决记录

新博客相同内容在此:关于fluid打字机问题的解决记录

解决了一个在配置博客时遇到的关于fluid中首页标题使用打字机随机选择的问题,过程记录于此~

问题起因:

配置博客时需要给博客整个标题,看到标题可以做成打字机(slogan)形式,也就是会缓缓把内容一个字一个字显示出来的形式,于是就启用了这个功能,随即看到如下所示的设置,于是我满怀欣喜的加入了随机选择功能,下文中的text就是我首页目前随机显示的内容。

yaml 复制代码
  # 首页副标题的独立设置
  # Independent config of home page subtitle
  slogan:
    enable: true

    # 为空则按 hexo config.subtitle 显示,支持列表格式来实现随机选择一行文字显示
    # If empty, text based on `subtitle` in hexo config, support list format to random selection of a row for display
    # 替换了原来的多行格式
    text: 
      - "为什么每一次点开都要被这玩意硬控一次"
      - "记录存在,记录这美好又不美好的每一天"
      - "泥泞的下水道倒映着漫天星光"

哎,您猜怎么着,居然首页把上面text中的所有内容全部显示出来啦(现在复现问题需要我回溯文件,但是我是懒鬼😭),也就是说直接在博客首页显示了:

"为什么每一次点开都要被这玩意硬控一次记录存在,记录这美好又不美好的每一天泥泞的下水道倒映着漫天星光"

这么长的一段话,真的很抽象。

问题一阶段

于是寻找原因和解决方法。我首先拿着单页配置文件问了AI,AI表示:这是因为我输入的时候用了tab键,要换成空格,实在不行就不用空格直接用[...]的格式。

试了很多次,没用。

随查看项目的issue,看看有没有和我一样碰到问题的人,一看还真有:slogan随机选择写法,但是没人回答,遂继续研究。

在查看项目文件的时候,突然发现最新的release是1.9.8,日期是2024年的,而最新的,刚刚更新支持slogan随机选择的_config.yml文件,是6个月前,也就是25年5月份的。这让我有了个想法,是不是发行版还不支持这个功能?

于是顺藤摸瓜,找到了fluid库中新支持slogan随机选择的文件typed.ejs,和本地的typed.ejs一比对,果然不一样。(本地的位于:根目录\node_modules\hexo-theme-fluid\layout_partials\plugins\typed.ejs

于是将本地文件更新为这个还未发布的最新文件,效果就像你们现在所看到的我的博客的目录一样啦,可以随机显示一段文字~

问题二阶段

上文都写着问题一阶段了,那当然有问题二阶段😭,我将一阶段的问题整理后回复给了提出那个issue的朋友,没想到没过几天那位朋友就发现了新的问题:换成最新的文件之后所有的页面标题都变成了随机显示的文字了😭。效果如下,这篇博客是我用来测试博客功能的那篇博客,可以看到中间应该显示标题的地方显示的是"为什么每一次点开都要被这玩意硬控一次"。

天塌了,那怎么行,遂重新开始研究问题所在。首先从配置文件下手,观察配置文件,如下所示:

yaml 复制代码
  # 一些好玩的功能
  # Some fun features
  fun_features:
    # 为 subtitle 添加打字机效果
    # Typing animation for subtitle
    typing:
      enable: true
      
  
      # 打印速度,数字越大越慢
      # Typing speed, the larger the number, the slower
      typeSpeed: 70
  
      # 游标字符
      # Cursor character
      cursorChar: "~"
  
      # 是否循环播放效果
      # If true, loop animation
      loop: false
  
      # 在指定页面开启,不填则在所有页面开启
      # Enable in specified page, all pages by default
      # Options: home | post | tag | category | about | links | page | 404
      scope: []

看到底下有在指定页面开启的功能,大喜过望,遂立即填入home,想只在主页开启随机功能😋。修改后果然有效,但是其他所有页面的打字机效果不见了😡,全部变成了静态显示,没有一个字一个字显示的效果了。

正好能够分析整个项目的ai配置好了,把整个项目丢给它让它分析,结果没想到还真有效果:

Github copliot: 根据你的问题描述和当前工作区的内容,问题的根源在于 typed.ejs 文件的逻辑未正确区分首页和文章页,导致随机 Slogan 的打字效果在文章页也被应用。

遂分析typed.ejs文件,简单来说它的逻辑如下:

javascript 复制代码
<% if (is_home() && theme.index.slogan.api && theme.index.slogan.api.enable) { %>
   // 逻辑 A: 调用了API的逻辑~
   ...
<% } else if (Array.isArray(theme.index.slogan.text) && theme.index.slogan.text.length > 0) { %>
   // 逻辑 B: 配置了数组时,无论是哪个页面,都是随机显示
   ...
<% } else { %>
   // 逻辑 C: 其他情况(包括文章页),显示传入的 text (即标题)
   typing(text);
<% } %>

原来是逻辑B出现了问题,那就好说了,对逻辑B加上对是否是主页的判断就可以了,最后解决方法就是在逻辑B中加入了个is_home判断。

javascript 复制代码
/* ↓↓↓ 注意这里加上了 is_home() && ↓↓↓ */
<% } else if (is_home() && Array.isArray(theme.index.slogan.text) && theme.index.slogan.text.length > 0) { %>

最后完美解决,当然,也不能说完美,如果有人想在其他页也实现随机显示的话,就需要继续修改代码逻辑,但是考虑到在配置文件中,随机显示的功能是放在首页下的,所以我也没有再多修改功能和逻辑,毕竟对我来说这么大的项目改得越多越可能出错,更何况是这么小的功能。

后记

已经提交了pr,这件事之前没怎么用过github的代码仓库维护功能的我还算是一次不错的历练,也希望自己在技术上能够更快更多的成长,毕竟前面的日子我欠下了太多~

最后祝读到这篇文章的你天天开心~

相关推荐
亚林瓜子20 小时前
nodejs里面的百分号解码之URLSearchParams
开发语言·javascript·ecmascript·node·url·百分号编码
南山安20 小时前
React学习:通过TodoList,完整理解组件通信
javascript·react.js·前端框架
瘦的可以下饭了20 小时前
Day04-APIs 日期对象
javascript
用户726007456958020 小时前
彻底搞懂前端动态图片加载:Vue、Vite与Webpack完全指南
javascript
风止何安啊20 小时前
Steam玩累了?那用 Node.js 写个小游戏:手把手玩懂 JS 运行环境
前端·javascript·node.js
天外天-亮20 小时前
Vue 中常用的指令
前端·javascript·vue.js
清风细雨_林木木20 小时前
vite与vue的cli的区别
前端·javascript·vue.js
亚洲小炫风20 小时前
react 资源清单
前端·javascript·react.js
Alice21 小时前
FVCOM Debug
开发语言·javascript·ecmascript
古蓬莱掌管玉米的神21 小时前
day 2 promote工程
javascript