【Hexo】给博客添加宠物挂件

news/2024/12/14 9:31:36/

适配安知鱼主题和Solitude主题,我采用的是安知鱼主题,Solitude主题可参考教程

{% link 给你的博客底部添加一排宠物,@青桔气球,https://blog.qjqq.cn/posts/f69c.html %}

同时感谢@梦爱吃鱼 大佬的耐心指导和帮助,原文可参考

{% link 给你的博客添加一个宠物挂件,@梦爱吃鱼,https://blog.bsgun.cn/posts/55b29cdb/ %}

顶部挂件

页面左上角随机动物挂件

image-20241023214710888

仅针对安知鱼主题,其他主题自行修改

可直接替换themes\anzhiyu\layout\includes\bbTimeList.pug文件中的内容

if site.data.essayeach i in site.data.essayif i.home_essay- let onclick_value = theme.pjax.enable ? `pjax.loadUrl("/essay/");` : '';- let href_value = theme.pjax.enable ? 'javascript:void(0);' : `/essay/`;#bbTimeList.bbTimeList.containeri.anzhiyufont.anzhiyu-icon-jike.bber-logo.fontbold(onclick=onclick_value, title="即刻短文", href=href_value, aria-hidden="true")#bbtalk.swiper-container.swiper-no-swiping.essay_bar_swiper_container(tabindex="-1")#bber-talk.swiper-wrapper(onclick=onclick_value)each i in site.data.essayeach item, index in i.essay_listif index < 10- var contentText = item.image ? item.content + ' [图片]' : (item.video ? item.content + ' [视频]' : item.content)a.li-style.swiper-slide(href=href_value)= contentTexta.bber-gotobb.anzhiyufont.anzhiyu-icon-circle-arrow-right(onclick=onclick_value, href=href_value, title="查看全文")img.con-animals.entered.loaded(id="new-con-animals" src="")script(src=url_for(theme.home_top.swiper.swiper_js))style.#bbTimeList {position: relative;}.con-animals {display: block;position: absolute;max-width: 260px;top: -85px;z-index: 2;}@media screen and (max-width: 1200px) {.con-animals {display: none;}}script.// 将lastImageUrl移到全局作用域window.lastImageUrl = window.lastImageUrl || '';function setRandomImage() {const img = document.getElementById('new-con-animals');const imageUrls = ["https://i1.wp.com/ruom.wuaze.com/i/2024/10/18/901216.webp","https://i1.wp.com/ruom.wuaze.com/i/2024/10/18/074167.webp","https://i1.wp.com/ruom.wuaze.com/i/2024/10/19/759434.webp","https://i1.wp.com/ruom.wuaze.com/i/2024/10/19/526748.webp","https://i1.wp.com/ruom.wuaze.com/i/2024/10/18/429029.webp"];let randomImage;do {randomImage = imageUrls[Math.floor(Math.random() * imageUrls.length)];} while (randomImage === window.lastImageUrl);window.lastImageUrl = randomImage;if (img) {img.src = randomImage;}}function initializeDragImage() {const img = document.getElementById('new-con-animals');const container = document.getElementById('bbTimeList');if (!img || !container) return;if (!window.lastImageUrl) {setRandomImage();} else {img.src = window.lastImageUrl;}let isDragging = false, wasDragged = false, startX, startLeft;const containerWidth = container.clientWidth;const imgWidth = img.clientWidth;const maxLeft = containerWidth - imgWidth;const edgeThreshold = 20;let lastLeft = parseInt(localStorage.getItem('imgPositionLeft')) || 0;lastLeft = Math.min(maxLeft, Math.max(0, lastLeft));img.style.left = `${lastLeft}px`;const savePosition = (left) => localStorage.setItem('imgPositionLeft', left);img.addEventListener('click', () => {if (!wasDragged) {let currentLeft = lastLeft;let newLeft;if (currentLeft <= edgeThreshold) {newLeft = Math.min(currentLeft + 200, maxLeft);} else if (currentLeft >= maxLeft - edgeThreshold) {newLeft = Math.max(currentLeft - 200, 0);} else {newLeft = currentLeft + (Math.random() < 0.5 ? -200 : 200);newLeft = Math.max(0, Math.min(newLeft, maxLeft));}if (newLeft !== lastLeft) {lastLeft = newLeft;img.style.left = `${newLeft}px`;savePosition(newLeft);}}});img.addEventListener('mousedown', (e) => {isDragging = true;wasDragged = false;startX = e.clientX;startLeft = lastLeft;img.style.transition = 'none';const onMouseMove = (e) => {if (!isDragging) return;wasDragged = true;const offsetX = e.clientX - startX;lastLeft = Math.max(0, Math.min(startLeft + offsetX, maxLeft));requestAnimationFrame(() => {img.style.left = `${lastLeft}px`;});};const onMouseUp = () => {isDragging = false;img.style.transition = 'left 0.5s ease-in-out';savePosition(lastLeft);document.removeEventListener('mousemove', onMouseMove);document.removeEventListener('mouseup', onMouseUp);};document.addEventListener('mousemove', onMouseMove);document.addEventListener('mouseup', onMouseUp);});}document.addEventListener('DOMContentLoaded', initializeDragImage);document.addEventListener('pjax:success', initializeDragImage);

页脚挂件

页脚挂件如下所示

image-20241023214754620

1、开启主题配置footerBar功能

footerBar:enable: true

2、创建footer-animal.js

此处我的存放路径为:blog\themes\anzhiyu\source\js\custom\footer-animal.js,粘贴以下内容:

function initFooterAnimal() {const footerBar = document.querySelector('#footer-bar');if (!footerBar) return console.error('找不到指定元素');const footerAnimal = document.createElement('div');footerAnimal.id = 'footer-animal';footerAnimal.innerHTML = `<img class="animal entered loaded"src="https://i1.wp.com/ruom.wuaze.com/i/2024/10/19/473503.webp"alt="动物" />`;footerBar.insertAdjacentElement('beforebegin', footerAnimal);const style = document.createElement('style');style.textContent = `#footer-animal {position: relative;}#footer-animal::before {content: '';position: absolute;bottom: 0;width: 100%;height: 36px;background: url(https://i1.wp.com/ruom.wuaze.com/i/2024/10/19/351933.webp) repeat center / auto 100%;box-shadow: 0 4px 7px rgba(0,0,0,.15);}.animal {position: relative;max-width: min(974px, 100vw);margin: 0 auto;display: block;}#footer-bar {margin-top: 0 !important;}@media screen and (max-width: 1023px) {#footer-animal::before {height: 4vw;}}[data-theme=dark] #footer-animal {filter: brightness(.8);}`;document.head.appendChild(style);
}document.addEventListener('DOMContentLoaded', initFooterAnimal);
document.addEventListener('pjax:success', initFooterAnimal);

3、引入自定义js

inject:bottom:# 自定义js- <script src="/js/custom/footer-animal.js" defer></script>

4、执行命令三连

hexo cl && hexo g && hexo s

http://www.ppmy.cn/news/1554983.html

相关文章

用于日语词汇学习的微信小程序+ssm

日语词汇学习小程序是高校人才培养计划的重要组成部分&#xff0c;是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。本学生所在学院多采用半手工管理日语词汇学习小程序的方式&#xff0c;所以有必要开发日语词汇…

单元测试中如何使用 Mockito 框架

使用 Mockito 进行单元测试的基本框架可以分为几个步骤。Mockito 是一个强大的 Java 框架&#xff0c;用于创建模拟对象&#xff08;mock objects&#xff09;&#xff0c;可以在不依赖外部系统或组件的情况下测试代码。以下是使用 Mockito 架构进行单元测试的通用步骤&#xf…

前端页面导出word

html-docx-js bug: vite使用html-docx.js会报错&#xff0c;点击下载上方文件替换即可 正文 npm install html-docx-js -S npm install file-saver -S<template><div id"managerReport">word内容......</div> </template><script>&l…

边界层气象:脉动量预报方程展开 | 湍流脉动速度方差预报方程 | 平均湍流动能收支方程推导

写成分量形式 原始式子&#xff1a; ∂ u i ′ ∂ t u ‾ j ∂ u i ′ ∂ x j u j ′ ∂ u ‾ i ∂ x j u j ′ ∂ u i ′ ∂ x j − 1 ρ ‾ ⋅ ∂ p ′ ∂ x i g θ v ′ θ ‾ v δ i 3 f ϵ i j 3 u j ′ v ∂ 2 u i ′ ∂ x j 2 ∂ ( u i ′ u j ′ ‾ ) ∂ x j…

satoken 后端获取用户id的原理是啥 用了前端传的那个参数

在 Sa-Token 框架中&#xff0c;后端获取用户 ID 的过程与前端传递的参数密切相关。Sa-Token 是一个基于 JWT 的轻量级权限管理框架&#xff0c;主要用于解决权限控制、登录管理等问题。具体来说&#xff0c;后端如何获取用户 ID&#xff0c;取决于你前后端如何设计以及 Sa-Tok…

vue项目通过appendChild()函数向页面上追加组件

前言&#xff1a; 此篇文章自己结合项目和文档自己理解的&#xff0c;作用于往后遇见此类开发需求时参考。 正文&#xff1a; 1、createApp() 创建一个应用程序实例 function createApp(rootComponent: Component, rootProps?: object): App 第一个参数是根组件。第二个可选…

Scratch节日作品 | 圣诞节礼物——体验节日的温馨与编程的乐趣! ❄️

今天为大家推荐一款充满节日氛围的Scratch作品——《圣诞礼物》&#xff01;这款程序不仅带来了雪花飘落、圣诞老人和麋鹿的经典场景&#xff0c;还通过编程的形式让小朋友们体验到收到礼物的喜悦。通过这款游戏&#xff0c;小朋友们能学习编程知识、了解圣诞文化&#xff0c;同…

顺序表的使用,对数据的增删改查

主函数&#xff1a; 3.c #include "3.h"//头文件调用 SqlListptr sql_cerate()//创建顺序表函数 {SqlListptr ptr(SqlListptr)malloc(sizeof(SqlList));//在堆区申请连续的空间if(NULLptr){printf("创建失败\n");return NULL;//如果没有申请成功&#xff…