Next 主题部分图片禁用 FancyBox
之前用的主题有 fancybox 功能的都有部分图片禁用 fancybox 的功能,看了一遍文档却发现没有这个选项,去 issue 中和 discusstion 中也没找到相关的信息。于是 google 了一下,发现真有相关教程,不过是 18 年的了,现在 next 主题已经变了很多,fancybox 的 js 代码也没在 utils.js 文件中了。找了一下,发现 fancybox 的相关 js 代码已经单独写在了主题文件夹下的 \source\js\third-party\fancybox.js
中了。
接着又在网上找到了一篇博客,发现插入的代码较也改进了一下,修改了当鼠标悬浮在已经被禁用 fancybox 效果的图片上时的状态,原文链接:https://kevin1061517.github.io/blog/posts/Hexo/2721/
结合两篇博文,最终即为在 \source\js\third-party\fancybox.js
文件中的 const $image = $(element);
这一行与 const imageLink = $image.attr('data-src') || $image.attr('src');
之间添加以下代码
1 | const $image = $(element); |
以下为方便复制的代码
1 | if ($(element).hasClass('nofancybox')){ //是否有包含自己定义的nofancybox属性,有就return true |
之后只要给不想有 fancybox 效果的 <img>
元素增加 class="nofancybox"
即可。
后续更新来了,上面的代码是 jQuery 版的 Fancybox 的,现主题最新版本已完全去除 jQuery 的依赖且更新到了 Fancybox 5,上面的代码自然也就失效了。虽然不会 js,还是试着在 Google 和 Chatgpt 的帮助下改了一下代码。可以适配最新版本了。
1 | document.querySelectorAll('.post-body :not(a) > img, .post-body > img').forEach(image => { |
方便复制的版本
1 | if (image.classList.contains('nofancybox')){ //是否有包含自己定义的nofancybox属性,有就return true |
同样的,只要给不想有 fancybox 效果的 <img>
元素增加 class="nofancybox"
即可。