✨ 我是流萤白沙的「文章捕手」,擅长在文字的星海中打捞精华。每当新的篇章诞生,我就会像整理贝壳一样,将思想的闪光点串成珍珠项链~

本文介绍了如何在博客中实现轻量级的看板娘功能,使用了名为“Sakana”的JavaScript库,旨在替代资源占用较大的live2D。文章详细描述了插件的创建过程,包括在博客根目录中添加必要的JavaScript和样式文件,以及如何配置角色和样式。通过简单的代码示例,用户可以快速上手,灵活调整角色、缩放比例和其他参数,增强博客的互动性和趣味性。此项目适用于多种主题,具有较高的实用价值和可定制性。

# 前言

二次元风格博客怎么能没有自己的看板娘,但是又嫌弃 live2D 占用太多资源怎么办。

逛 github 的时候发现了这个立牌,非常适合宝宝体质,仿佛为我量身打造,于是果断搞过来。

# 实现

# 创建插件

  1. 博客根目录 scripts 里添加 sakana.js
sakana.js
hexo.extend.filter.register('theme_inject', function(injects) {
    injects.footer.file('sakana', 'views/sakana.pug', {}, {cache: true});
    injects.style.push('views/sakana.styl');
});
  1. 博客根目录 views 里添加 sakana.pug
sakana.pug
.sakana-box
  script(src="https://cdn.jsdmirror.com/npm/sakana")
  script.
    Sakana.init({
      el:         '.sakana-box',     // 启动元素 node 或 选择器
      scale:      .5,                // 缩放倍数
      character:  'chisato',         // 锦木千束
      canSwitchCharacter: true,      // 允许换角色
    });
  1. 博客根目录 views 里添加 sakana.styl
sakana.styl
html .sakana-box {
  position: fixed;
  left: 0;
  bottom: 0;
  transform-origin: 0 100%; 
}

适用主题 shokax,其他主题把下面代码扔进主题 layout 目录里的 footer.pug 里应该也行,使用其他模板引擎的需要自己改改。

footer.pug:

footer.pug
div(class="sakana-box" style='position:fixed;bottom:10px;right:10px;transform-origin: 100% 100%;')
  script.
    function initSakanaTest() {
      Sakana.init({
        el:         '.sakana-box',     // 启动元素 node 或 选择器
        scale:      .5,                // 缩放倍数
        character:  'chisato',         // 锦木千束
        canSwitchCharacter: true,      // 允许换角色
      })
      Sakana.setMute(false);
    }
  script(onload = 'initSakanaTest()' src="https://cdn.jsdmirror.com/npm/sakana")

# 可选配置

// 启动
const sakana = Sakana.init({
  // 选项:默认值
  el:         '.sakana-box',     // 启动元素 node 或 选择器
  character:  'takina',          // 启动角色 'chisato','takina' 
  inertia:    0.01,              // 惯性
  decay:      0.99,              // 衰减
  r:          60,                // 启动角度
  y:          10,                // 启动高度
  scale:      1,                 // 缩放倍数
  translateY: 0,                 // 位移高度
  canSwitchCharacter: false,     // 允许换角色
  onSwitchCharacter(character){  // 切换角色回调
    console.log(`${character} dayo~`);
  },
});

OK,结束~