博客优化之路 计划

  • 博客资源搬家瘦身
  • 图片添加水印
  • fancybox 图片跳转修正
  • 代码块显示优化
  • 本地搜索优化
  • 归档和分类优化

参考NEXT主题的本地搜索

  NEXT主题的自动搜索功能不仅可以搜索出文章的标题,也可以将文章的相关信息搜索出来,比起当前的主题真是好太多了。

NEXT主题

  另外当前使用的主题也有很大的问题,手机界面没有搜索功能,也是我不能忍,当初选择这个主题一是因为好看。
  其次是手机端有目录,而hexo是没有的,但是目前才发现,根本就没有能让我称心如意的主题,所以我只好自己来弄了。

NEXT主题本地搜索的探索

  既然NEXT已经有如此优秀的本地搜索,那我就不需要去找插件,更不需要自己去思考怎么弄了,自己复制NEXT的代码就好了。
  在NEXT主题下的搜索按钮可以看到相关的class信息,通过class信息可以找到先关的js代码。
  在这里我就发现了关键的localsearch.swig文件,里面完全都是关于NEXT主题的localsearch相关的js代码。
  我将所有的代码都复制到black-blue主题的left-con.ejs当中。

NEXT主题

  上面的截图可以看到,我遇到第一个问题就是路径问题,NEXT原本的路径处理是好的,但是当前主题并不适用,
  config.search.path这些相关的环境变量全部都无法正确调用,无奈,我只好将路径写死。

NEXT主题

  而在_partials文件夹中你也可以找到另一个localsearch.swig文件,里面保存的正是搜索栏相关的div信息。
  同样将它复制到left-con.ejs当中。

  完成上述步骤之后,hexo s来打开网站查看效果,你会发现搜索框在左下角呈现出奇怪的效果。

NEXT主题

  很明显这个问题是因为缺少相应的CSS样式。
  寻找一番之后,你会在localsearch.styl文件中找到相关的CSS样式。
  当然这个样式还需要调整成CSS,也不算太复杂。

NEXT主题

  当一切样式都调整好之后,打开网站就没有了奇怪的搜索面板了。
  现在的问题是怎么触发搜索面板了,那么我就需要一个按钮。
  于是我决定将按钮做到图标下拉菜单中。

NEXT主题

  在li列表中加入多个按钮就可以完成我想要的效果。

NEXT主题

  但是直接加入会导致下面的面板错误移动,那样友情链接的区域就没有办法去到正确的地方。
  因此我需要去找到处理这方面的js。
  最后在pc.js里面找到相应的代码。

NEXT主题

  这样每一个按钮多有相应的事件,也添加上我之前就想要的归档和分类页面。
  然而点击搜索按钮也没有任何反应,js也有相关的报错,但是看不懂。

NEXT主题
NEXT主题

  这里找了好久都没有找到问题的根源,一度让我迷茫。
  最后只能沿着程序的逻辑找出出错的地方。
  在这个过程中,还真就发现了问题。

NEXT主题

  原来这里绑定的位置是NEXT相关的class,改成适合我这边的class container就好了。
  这次是终于可以了,谢天谢地。

NEXT主题

  这个配色好像和当前的主题不匹配。
  没事,手动修改相应的CSS就好了。

NEXT主题

  现在好像没有问题了,但是点击搜索,却发现根本搜索不出东西。
  我想到可能是search.json文件出问题了,所以我按照NEXT的主题xml生成,重新配置了设置文档,并且修改了相应的链接信息。这样就可以了。

NEXT主题

  另外还需要在主题设置中添加NEXT主题localsearch相关的设置,但是获取变量的时候却不太成功,我只能将一些代码写死。
  比如说输入之后自动搜索功能,主题相关的配置永远回馈false信息。

NEXT主题

  到了这里,电脑端的本地搜索已经移植成功。后面就是移植手机端了。

NEXT主题本地搜索手机端移植

  本以为电脑端都成功了,手机端应该是毫无压力的,然而我却大错特错了。

  首先需要将下来菜单的内容移植到手机当中。
  经过搜索,我发现手机侧边栏的生成是在mobile.js当中完成的。

NEXT主题
NEXT主题

  添加了归档和分类的标签之后,剩下的就是实现搜索功能。
  理论上并没有难度,只要做好class给代码识别就可以了。
  然而这里却不行,即便给了对应的class,却怎么也触发不了事件。
  我在点击事件中加入console.log也没有在控制台中回馈我想要的信息。

  这里我折腾了好久才弄明白,原来mobile.js的DOM事件需要额外绑定的
NEXT主题

  这样就弄好了手机端的搜索界面了。

额外的优化 - 侧边栏

  手机端的搜索虽然做好了,但是制作过程中发现了一些小BUG。我简直是不能忍。

  首先是侧边栏不能拖拽,如果标签太多的话就看不到了。
  为此在样式上面加入overflow就好了。
  但是滚动条又变得太长了(:з」∠)

NEXT主题

  修复这个问题也花了好长时间去研究,首先考虑的是高度问题。
  但是到底是哪个高度出了问题还需要时间去研究。
  最后我写了一堆样式进行测试之后,发现高度值竟然是固定的。
  重新翻了一遍代码之后发现js强行加入当前body的高度。

NEXT主题

  注释掉这一行之后,重新调整CSS样式,就可以做到完美滚动了。
  然而就遇到了另一个问题,侧边栏关不掉了。
  经过研究才发现,侧边栏有两个div,一个是viewer-box-l 侧边栏本身,一个viewer-box-r 用于点击关闭侧边栏的。
  上面的操作取消掉了右边的高度,导致无法触发关闭页面。
  那么加入height:100vh样式保持屏幕的高度就可以解决问题。(为此在网上找了很多CSS相关的资料)

NEXT主题

额外的优化 - TAG开关

  另外在归档页面中的TAG开关也出现了BUG。

NEXT主题

  TAG开关一直跟随着屏幕移动。而且这个位置非常不合理。
  经过一番查找,在hide-labels.ejs找到相关的代码。
  我想让TAG开关和侧边栏的按钮一样保持一致。

NEXT主题

  另外这里涉及到比较复杂的代码操作,我不想要js进行复写,而是直接在CSS完成操作。
  经过我一晚上的测试,才最终写出了完美的效果。

NEXT主题

额外的优化 - Clipboard.js

  其实这个问题是前些天解决的。

NEXT主题

  这个按钮就是通过clipboard.js实现链接复制功能。
  这个是SPFK主题里面带的效果,然而连官方的复制都是翻车的,因为不用最新版的clipboard.js就需要按很多次才能出发复制。(这都是后话了)
  首先找到相关的代码,可以在nav.ejs可以找到相关内容。

NEXT主题

  这里需要注意的是,不能直接引用clipboard.js,这会和main.js的require产生冲突(clipboard并没有require)

NEXT主题

  这里需要在mian.js中加入相关的require信息。

NEXT主题

总结

  这些天一直在弄博客的样式等等,自己的付出还是有很多收获的,这次对Hexo这个运作原理有了全新的认识。