精华

给Hexo的Anzhiyu主题侧边栏添加一个春节倒计时

10 2

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 kingkare 于 2026-2-4 18:49 编辑

折腾的起因:

今天逛论坛的时候看到站长发的这个帖子 HTML+CSS实现2026年春节倒计时!!附源码!!  感觉挺好看的,正好最近在折腾Hexo程序,就想着折腾到Hexo上面去,然后就开始了我的折腾之路.
演示图:

给Hexo的Anzhiyu主题侧边栏添加一个春节倒计时

给Hexo的Anzhiyu主题侧边栏添加一个春节倒计时

给Hexo的Anzhiyu主题侧边栏添加一个春节倒计时

给Hexo的Anzhiyu主题侧边栏添加一个春节倒计时

给Hexo的Anzhiyu主题侧边栏添加一个春节倒计时

给Hexo的Anzhiyu主题侧边栏添加一个春节倒计时

给Hexo的Anzhiyu主题侧边栏添加一个春节倒计时

给Hexo的Anzhiyu主题侧边栏添加一个春节倒计时

给Hexo的Anzhiyu主题侧边栏添加一个春节倒计时

给Hexo的Anzhiyu主题侧边栏添加一个春节倒计时

给Hexo的Anzhiyu主题侧边栏添加一个春节倒计时

给Hexo的Anzhiyu主题侧边栏添加一个春节倒计时


教程开始(我自己的操作,如果有别的更简便的欢迎讨论,以anzhiyu主题为例,其他主题请自行研究):

第一步:
在你的 Hexo 博客根目录下,创建或修改 themes/anzhiyu/layout/includes/widgets/aside_countdown.pug(如果目录不存在请手动创建)然后添加以下代码:
  1. if theme.aside_countdown && theme.aside_countdown.enable
  2.   .card-widget.card-countdown
  3.     .item-headline
  4.       i.fas.fa-hourglass-half
  5.       span= _p('春节倒计时')
  6.       i.fas.fa-cog.countdown-settings(onclick="toggleCountdownMenu()" title="切换风格")
  7.    
  8.     .countdown-menu#countdown-menu
  9.       if theme.aside_countdown.themes_list
  10.         each name, key in theme.aside_countdown.themes_list
  11.           .menu-item(onclick=`changeCountdownTheme('${key}')`)= name

  12.     //- 这里的 class 会根据 JS 动态切换 theme-modern, theme-golden 等
  13.     .countdown-content#countdown-main-content(class=`theme-${theme.aside_countdown.default_theme || 'traditional'}`)
  14.       .spring-date-info
  15.         span#spring-date-text 2026年2月17日 · 农历正月初一
  16.       .countdown-timer
  17.         .timer-item
  18.           span#days.timer-num 00
  19.           span.timer-unit 天
  20.         .timer-item
  21.           span#hours.timer-num 00
  22.           span.timer-unit 时
  23.         .timer-item
  24.           span#minutes.timer-num 00
  25.           span.timer-unit 分
  26.         .timer-item
  27.           span#seconds.timer-num 00
  28.           span.timer-unit 秒
  29.       .zodiac-info
  30.         i.fas.fa-dragon
  31.         span#zodiac-text 丙午马年 · 金马迎春
  32.         
  33.     //- 专门用于金耀效果的动态容器
  34.     .fu-container#fu-container
复制代码
金耀效果没实现,搞了一下发现会错位那个福字一直在下面一直新增,暂且不搞

第二步:添加样式CSS代码,可以外挂CDN
  1. /* 1. 基础容器样式 */
  2. .card-countdown {
  3.   position: relative;
  4.   overflow: visible !important; /* 必须为 visible,否则下拉菜单会被遮挡 */
  5.   padding: 15px !important;
  6. }

  7. /* 标题与齿轮图标 */
  8. .card-countdown .item-headline {
  9.   display: flex;
  10.   align-items: center;
  11.   justify-content: space-between;
  12.   margin-bottom: 12px;
  13. }

  14. .countdown-settings {
  15.   cursor: pointer;
  16.   transition: all 0.3s ease;
  17.   opacity: 0.6;
  18. }

  19. .countdown-settings:hover {
  20.   transform: rotate(90deg);
  21.   color: #ff4d4f;
  22.   opacity: 1;
  23. }

  24. /* 2. 下拉菜单样式 */
  25. .countdown-menu {
  26.   display: none;
  27.   position: absolute;
  28.   right: 15px;
  29.   top: 45px;
  30.   background: var(--anzhiyu-card-bg);
  31.   border: 1px solid var(--anzhiyu-border-styling);
  32.   border-radius: 12px;
  33.   z-index: 1000;
  34.   padding: 8px;
  35.   box-shadow: 0 8px 20px rgba(0,0,0,0.15);
  36.   min-width: 100px;
  37. }

  38. .countdown-menu.show {
  39.   display: block;
  40.   animation: countdownSlideIn 0.3s ease;
  41. }

  42. .menu-item {
  43.   padding: 8px 15px;
  44.   font-size: 13px;
  45.   cursor: pointer;
  46.   border-radius: 6px;
  47.   transition: all 0.2s;
  48.   color: var(--anzhiyu-fontcolor);
  49.   text-align: center;
  50. }

  51. .menu-item:hover {
  52.   background: var(--anzhiyu-theme);
  53.   color: #fff !important;
  54. }

  55. /* 3. 倒计时内容区通用样式 */
  56. .countdown-content {
  57.   border-radius: 12px;
  58.   padding: 15px;
  59.   text-align: center;
  60.   transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
  61.   color: #fff;
  62.   position: relative;
  63.   overflow: hidden;
  64. }

  65. .spring-date-info {
  66.   font-size: 12px;
  67.   opacity: 0.9;
  68.   margin-bottom: 10px;
  69. }

  70. .countdown-timer {
  71.   display: flex;
  72.   justify-content: space-around;
  73.   margin: 10px 0;
  74. }

  75. .timer-item {
  76.   display: flex;
  77.   flex-direction: column;
  78.   align-items: center;
  79. }

  80. .timer-num {
  81.   font-size: 24px;
  82.   font-weight: bold;
  83.   font-family: 'Courier New', Courier, monospace;
  84. }

  85. .timer-unit {
  86.   font-size: 12px;
  87.   opacity: 0.8;
  88. }

  89. .zodiac-info {
  90.   font-size: 13px;
  91.   margin-top: 10px;
  92.   padding-top: 10px;
  93.   border-top: 1px solid rgba(255,255,255,0.2);
  94. }

  95. /* 4. 五大主题配色方案 */

  96. /* 传统红火 (Traditional) */
  97. .theme-traditional {
  98.   background: linear-gradient(135deg, #d32f2f 0%, #ff5252 100%);
  99.   box-shadow: 0 4px 15px rgba(211, 47, 47, 0.3);
  100. }

  101. /* 华丽金秋 (Modern) */
  102. .theme-modern {
  103.   background: linear-gradient(135deg, #fbc02d 0%, #ffa000 100%);
  104.   color: #5d4037 !important;
  105. }
  106. .theme-modern .zodiac-info { border-top-color: rgba(0,0,0,0.1); }

  107. /* 水墨丹青 (Ink) */
  108. .theme-ink {
  109.   background: linear-gradient(135deg, #2c3e50 0%, #000000 100%);
  110.   border: 1px solid rgba(255,255,255,0.1);
  111. }

  112. /* 科技之蓝 (Blue) */
  113. .theme-blue {
  114.   background: linear-gradient(135deg, #1976d2 0%, #03a9f4 100%);
  115.   box-shadow: 0 4px 15px rgba(25, 118, 210, 0.3);
  116. }

  117. /* 生机盎然 (Green) */
  118. .theme-green {
  119.   background: linear-gradient(135deg, #388e3c 0%, #8bc34a 100%);
  120.   box-shadow: 0 4px 15px rgba(56, 142, 60, 0.3);
  121. }

  122. /* 5. 装饰动画 */
  123. @keyframes countdownSlideIn {
  124.   from { opacity: 0; transform: translateY(-10px); }
  125.   to { opacity: 1; transform: translateY(0); }
  126. }

  127. /* 手机端适配优化 */
  128. @media screen and (max-width: 768px) {
  129.   .timer-num { font-size: 20px; }
  130.   .countdown-content { padding: 10px; }
  131. }
复制代码
CSS和JS文件需要在主题配置文件 _config.anzhiyu.yml 中引用,配置文件中添加引用地址

inject:
  head:
    - <link rel="stylesheet" href="你的github链接/countdown.css">
  bottom:
    - <script src="你的github链接/countdown.js"></script>

第三步:注入逻辑脚本
  1. /**
  2. * 2026 春节倒计时插件
  3. * 兼容 Pjax,支持主题切换与本地存储
  4. */

  5. // 声明一个全局变量,用于清除旧的定时器,防止 Pjax 跳转后产生多个定时器冲突
  6. var countdownTimer = null;

  7. function initCountdown() {
  8.     const targetDate = new Date('2026-02-17T00:00:00').getTime();

  9.     // 1. 倒计时核心逻辑
  10.     const updateTimer = () => {
  11.         const now = new Date().getTime();
  12.         const diff = targetDate - now;

  13.         const d = document.getElementById('days');
  14.         const h = document.getElementById('hours');
  15.         const m = document.getElementById('minutes');
  16.         const s = document.getElementById('seconds');

  17.         // 如果元素不存在(比如不在首页),则停止执行
  18.         if (!d) return;

  19.         if (diff <= 0) {
  20.             if (countdownTimer) clearInterval(countdownTimer);
  21.             return;
  22.         }

  23.         d.innerText = Math.floor(diff / 86400000).toString().padStart(2, '0');
  24.         h.innerText = Math.floor((diff % 86400000) / 3600000).toString().padStart(2, '0');
  25.         m.innerText = Math.floor((diff % 3600000) / 60000).toString().padStart(2, '0');
  26.         s.innerText = Math.floor((diff % 60000) / 1000).toString().padStart(2, '0');
  27.     };

  28.     // 清除旧定时器并开启新定时器
  29.     if (countdownTimer) clearInterval(countdownTimer);
  30.     if (document.getElementById('days')) {
  31.         countdownTimer = setInterval(updateTimer, 1000);
  32.         updateTimer();
  33.     }

  34.     // 2. 加载用户之前保存的主题风格
  35.     const savedTheme = localStorage.getItem('countdown-theme');
  36.     const content = document.getElementById('countdown-main-content');
  37.     if (savedTheme && content) {
  38.         // 保持 class 结构为 "countdown-content theme-xxx"
  39.         content.className = 'countdown-content theme-' + savedTheme;
  40.     }
  41. }

  42. // 3. 切换菜单显示/隐藏
  43. function toggleCountdownMenu() {
  44.     const menu = document.getElementById('countdown-menu');
  45.     if (menu) {
  46.         menu.classList.toggle('show');
  47.     }
  48. }

  49. // 4. 切换主题函数
  50. function changeCountdownTheme(themeName) {
  51.     const content = document.getElementById('countdown-main-content');
  52.     if (content) {
  53.         content.className = 'countdown-content theme-' + themeName;
  54.         localStorage.setItem('countdown-theme', themeName);
  55.         // 切换后自动关闭菜单
  56.         const menu = document.getElementById('countdown-menu');
  57.         if (menu) menu.classList.remove('show');
  58.     }
  59. }

  60. // 5. 点击外部区域自动关闭菜单
  61. document.addEventListener('click', function (e) {
  62.     const menu = document.getElementById('countdown-menu');
  63.     const settingsBtn = document.querySelector('.countdown-settings');
  64.     if (menu && menu.classList.contains('show')) {
  65.         if (!menu.contains(e.target) && !settingsBtn.contains(e.target)) {
  66.             menu.classList.remove('show');
  67.         }
  68.     }
  69. });

  70. // 6. 核心:兼容 Pjax 逻辑
  71. // 首次进入页面执行
  72. initCountdown();

  73. // 监听 Pjax 完成事件,确保跳转页面后侧边栏功能依然有效
  74. document.addEventListener('pjax:complete', function () {
  75.     initCountdown();
  76. });
复制代码
第四步:修改配置文件 _config.anzhiyu.yml,在你的主题配置文件最底部添加以下配置:注意缩进
  1. # 倒计时挂件配置开始
  2. aside_countdown: # 注意:这里建议用 aside_countdown 对应你 Pug 里的变量名
  3.   enable: true
  4.   event_date: '2026-02-17'
  5.   event_name: '春节'
  6.   default_theme: 'traditional'
  7.   themes_list:
  8.     traditional: "传统红火"
  9.     modern: "华丽金秋"
  10.     ink: "水墨丹青"
  11.     blue: "科技之蓝"
  12.     green: "生机盎然"
  13.   # 倒计时挂件配置结束
复制代码

给Hexo的Anzhiyu主题侧边栏添加一个春节倒计时

给Hexo的Anzhiyu主题侧边栏添加一个春节倒计时

第五步:挂载到侧边栏-你需要告诉主题在哪里渲染这个组件,在30行左右添加以下代码,具体的看自己主题和缩进,我是在这个文件挂载的(themes\anzhiyu\layout\includes\widget\index.pug)
  1.     !=partial('includes/widget/aside_countdown', {}, {cache: true})
复制代码

以上的所有步骤都操作完成以后执行Hexo 三大步骤既可!
  1. hexo clean
  2. hexo g
  3. hexo s
复制代码
大功告成!  完结撒花

全部评论2

沙发 昨天 18:37 | 查看全部
hexo好玩吗?我第一次接触还是看了 张红Heo 的博客
生命在于折腾,牛马点缀生活。
回复

举报

kingkare楼主vip vip-year
板凳 昨天 18:44 | 查看全部
七夏 发表于 2026-2-4 18:37
hexo好玩吗?我第一次接触还是看了 张红Heo 的博客

还行吧 就是我个人感觉麻烦 只要修改任何东西就必须重新推送 我懒 不过最近闲了就是在折腾hexo的anzhiyu主题 各种魔改
回复

举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

hot.热文换一批
最新热评 加载中...
牛马论坛(niumabbs.com),一个专注于分享日常新鲜事、职场工作点滴、摸鱼乐趣与各类生活感悟的交流平台。

    关注我们

  • 加入Q群
  • 微信客服
  • QQ客服
Copyright © 2026 NIUMABBS 版权所有 All Rights Reserved. 劰载中...
关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表