<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Live2D on kkkk24 的博客</title>
    <link>https://web.943827561.xyz/tags/live2d/</link>
    <description>Recent content in Live2D on kkkk24 的博客</description>
    <generator>Hugo -- 0.155.2</generator>
    <language>zh-cn</language>
    <lastBuildDate>Tue, 03 Feb 2026 01:29:00 +0800</lastBuildDate>
    <atom:link href="https://web.943827561.xyz/tags/live2d/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>给博客加个 Live2D 看板娘</title>
      <link>https://web.943827561.xyz/posts/add-live2d-to-hexo-blog/</link>
      <pubDate>Tue, 03 Feb 2026 01:29:00 +0800</pubDate>
      <guid>https://web.943827561.xyz/posts/add-live2d-to-hexo-blog/</guid>
      <description>给 Hexo 博客加个会动的二次元小人，没啥实际用处，就是看着舒服</description>
      <content:encoded><![CDATA[<p>之前逛别人博客的时候，经常看到左下角有个会动的小人，眼睛还会跟着鼠标跑，感觉挺有意思的。研究了一下发现这玩意叫 Live2D，于是决定给自己的 Hexo 博客也整一个。</p>
<p>折腾了一晚上，踩了不少坑，这里记录一下实现过程。</p>
<h2 id="效果">效果</h2>
<p>加完之后，博客左下角会多一个二次元小人，能：</p>
<ul>
<li>眼睛跟着鼠标动（有点魔性）</li>
<li>随机显示一言</li>
<li>换装、换模型</li>
<li>截图保存</li>
<li>还能玩个打砖块小游戏</li>
</ul>
<p>说实话没啥实际用处，但看着就是舒服 😂</p>
<h2 id="最简单的方式">最简单的方式</h2>
<p>如果只是想快速体验，一行代码就够了。</p>
<p>在主题的 <code>layout/layout.ejs</code> 里加上：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&#34;https://fastly.jsdelivr.net/npm/live2d-widgets@1.0.0/dist/autoload.js&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span></code></pre></div><p>放在 <code>&lt;/body&gt;</code> 之前就行。刷新页面，看板娘应该就出来了。</p>
<p>不过这种方式没法自定义，想要更多控制就得用下面的方法。</p>
<h2 id="完整配置版">完整配置版</h2>
<h3 id="第一步创建组件">第一步：创建组件</h3>
<p>在主题目录的 <code>layout/_partial/</code> 下面新建一个 <code>live2d.ejs</code>：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="o">&lt;%</span><span class="c1"># 看板娘组件 %&gt;</span>
</span></span><span class="line"><span class="cl"><span class="o">&lt;%</span> <span class="k">if</span> <span class="p">(</span><span class="n">theme</span><span class="o">.</span><span class="n">live2d</span> <span class="o">&amp;&amp;</span> <span class="n">theme</span><span class="o">.</span><span class="n">live2d</span><span class="o">.</span><span class="n">enable</span><span class="p">)</span> <span class="p">{</span> <span class="o">%&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="o">&lt;%</span>
</span></span><span class="line"><span class="cl">    <span class="o">//</span> <span class="err">读取配置，给个默认值兜底</span>
</span></span><span class="line"><span class="cl">    <span class="k">const</span> <span class="n">cdnPath</span> <span class="o">=</span> <span class="p">(</span><span class="n">theme</span><span class="o">.</span><span class="n">live2d</span><span class="o">.</span><span class="n">cdn</span> <span class="o">&amp;&amp;</span> <span class="n">theme</span><span class="o">.</span><span class="n">live2d</span><span class="o">.</span><span class="n">cdn</span><span class="o">.</span><span class="n">url</span><span class="p">)</span> 
</span></span><span class="line"><span class="cl">      <span class="err">?</span> <span class="n">theme</span><span class="o">.</span><span class="n">live2d</span><span class="o">.</span><span class="n">cdn</span><span class="o">.</span><span class="n">url</span> 
</span></span><span class="line"><span class="cl">      <span class="p">:</span> <span class="s1">&#39;https://fastly.jsdelivr.net/npm/live2d-widgets@1.0.0/dist/&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">const</span> <span class="n">modelId</span> <span class="o">=</span> <span class="p">(</span><span class="n">theme</span><span class="o">.</span><span class="n">live2d</span><span class="o">.</span><span class="n">model</span> <span class="o">&amp;&amp;</span> <span class="n">theme</span><span class="o">.</span><span class="n">live2d</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">id</span> <span class="o">!==</span> <span class="n">undefined</span><span class="p">)</span> 
</span></span><span class="line"><span class="cl">      <span class="err">?</span> <span class="n">theme</span><span class="o">.</span><span class="n">live2d</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">id</span> 
</span></span><span class="line"><span class="cl">      <span class="p">:</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">const</span> <span class="n">modelCdnPath</span> <span class="o">=</span> <span class="p">(</span><span class="n">theme</span><span class="o">.</span><span class="n">live2d</span><span class="o">.</span><span class="n">model</span> <span class="o">&amp;&amp;</span> <span class="n">theme</span><span class="o">.</span><span class="n">live2d</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">cdnPath</span><span class="p">)</span> 
</span></span><span class="line"><span class="cl">      <span class="err">?</span> <span class="n">theme</span><span class="o">.</span><span class="n">live2d</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">cdnPath</span> 
</span></span><span class="line"><span class="cl">      <span class="p">:</span> <span class="s1">&#39;https://fastly.jsdelivr.net/gh/fghrsh/live2d_api/&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">const</span> <span class="n">toolItems</span> <span class="o">=</span> <span class="p">(</span><span class="n">theme</span><span class="o">.</span><span class="n">live2d</span><span class="o">.</span><span class="n">tools</span> <span class="o">&amp;&amp;</span> <span class="n">theme</span><span class="o">.</span><span class="n">live2d</span><span class="o">.</span><span class="n">tools</span><span class="o">.</span><span class="n">items</span><span class="p">)</span> 
</span></span><span class="line"><span class="cl">      <span class="err">?</span> <span class="n">theme</span><span class="o">.</span><span class="n">live2d</span><span class="o">.</span><span class="n">tools</span><span class="o">.</span><span class="n">items</span> 
</span></span><span class="line"><span class="cl">      <span class="p">:</span> <span class="p">[</span><span class="s1">&#39;hitokoto&#39;</span><span class="p">,</span> <span class="s1">&#39;asteroids&#39;</span><span class="p">,</span> <span class="s1">&#39;switch-model&#39;</span><span class="p">,</span> <span class="s1">&#39;switch-texture&#39;</span><span class="p">,</span> <span class="s1">&#39;photo&#39;</span><span class="p">,</span> <span class="s1">&#39;info&#39;</span><span class="p">,</span> <span class="s1">&#39;quit&#39;</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="k">const</span> <span class="n">drag</span> <span class="o">=</span> <span class="n">theme</span><span class="o">.</span><span class="n">live2d</span><span class="o">.</span><span class="n">drag</span> <span class="o">!==</span> <span class="n">undefined</span> <span class="err">?</span> <span class="n">theme</span><span class="o">.</span><span class="n">live2d</span><span class="o">.</span><span class="n">drag</span> <span class="p">:</span> <span class="bp">false</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">const</span> <span class="n">logLevel</span> <span class="o">=</span> <span class="n">theme</span><span class="o">.</span><span class="n">live2d</span><span class="o">.</span><span class="n">logLevel</span> <span class="o">||</span> <span class="s1">&#39;warn&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="o">%&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="o">&lt;</span><span class="n">script</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="k">const</span> <span class="n">live2d_path</span> <span class="o">=</span> <span class="s1">&#39;&lt;%= cdnPath %&gt;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="o">//</span> <span class="err">动态加载资源</span>
</span></span><span class="line"><span class="cl">    <span class="n">function</span> <span class="n">loadExternalResource</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">type</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="k">return</span> <span class="n">new</span> <span class="n">Promise</span><span class="p">((</span><span class="n">resolve</span><span class="p">,</span> <span class="n">reject</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="n">let</span> <span class="n">tag</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="n">type</span> <span class="o">===</span> <span class="s1">&#39;css&#39;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">tag</span> <span class="o">=</span> <span class="n">document</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s1">&#39;link&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">          <span class="n">tag</span><span class="o">.</span><span class="n">rel</span> <span class="o">=</span> <span class="s1">&#39;stylesheet&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">tag</span><span class="o">.</span><span class="n">href</span> <span class="o">=</span> <span class="n">url</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">type</span> <span class="o">===</span> <span class="s1">&#39;js&#39;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">tag</span> <span class="o">=</span> <span class="n">document</span><span class="o">.</span><span class="n">createElement</span><span class="p">(</span><span class="s1">&#39;script&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">          <span class="n">tag</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="s1">&#39;module&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">tag</span><span class="o">.</span><span class="n">src</span> <span class="o">=</span> <span class="n">url</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="n">tag</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">tag</span><span class="o">.</span><span class="n">onload</span> <span class="o">=</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="n">resolve</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">          <span class="n">tag</span><span class="o">.</span><span class="n">onerror</span> <span class="o">=</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="n">reject</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">          <span class="n">document</span><span class="o">.</span><span class="n">head</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">tag</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">      <span class="p">});</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="n">async</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="o">//</span> <span class="err">手机上就别加载了，太占地方</span>
</span></span><span class="line"><span class="cl">      <span class="k">if</span> <span class="p">(</span><span class="n">screen</span><span class="o">.</span><span class="n">width</span> <span class="o">&lt;</span> <span class="mi">768</span><span class="p">)</span> <span class="k">return</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      
</span></span><span class="line"><span class="cl">      <span class="o">//</span> <span class="err">处理图片跨域（这个坑踩了好久）</span>
</span></span><span class="line"><span class="cl">      <span class="k">const</span> <span class="n">OriginalImage</span> <span class="o">=</span> <span class="n">window</span><span class="o">.</span><span class="n">Image</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="n">window</span><span class="o">.</span><span class="n">Image</span> <span class="o">=</span> <span class="n">function</span><span class="p">(</span><span class="o">...</span><span class="n">args</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="k">const</span> <span class="n">img</span> <span class="o">=</span> <span class="n">new</span> <span class="n">OriginalImage</span><span class="p">(</span><span class="o">...</span><span class="n">args</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">        <span class="n">img</span><span class="o">.</span><span class="n">crossOrigin</span> <span class="o">=</span> <span class="s2">&#34;anonymous&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">img</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="p">};</span>
</span></span><span class="line"><span class="cl">      <span class="n">window</span><span class="o">.</span><span class="n">Image</span><span class="o">.</span><span class="n">prototype</span> <span class="o">=</span> <span class="n">OriginalImage</span><span class="o">.</span><span class="n">prototype</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      
</span></span><span class="line"><span class="cl">      <span class="o">//</span> <span class="err">加载资源</span>
</span></span><span class="line"><span class="cl">      <span class="n">await</span> <span class="n">Promise</span><span class="o">.</span><span class="n">all</span><span class="p">([</span>
</span></span><span class="line"><span class="cl">        <span class="n">loadExternalResource</span><span class="p">(</span><span class="n">live2d_path</span> <span class="o">+</span> <span class="s1">&#39;waifu.css&#39;</span><span class="p">,</span> <span class="s1">&#39;css&#39;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">        <span class="n">loadExternalResource</span><span class="p">(</span><span class="n">live2d_path</span> <span class="o">+</span> <span class="s1">&#39;waifu-tips.js&#39;</span><span class="p">,</span> <span class="s1">&#39;js&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">]);</span>
</span></span><span class="line"><span class="cl">      
</span></span><span class="line"><span class="cl">      <span class="o">//</span> <span class="err">初始化</span>
</span></span><span class="line"><span class="cl">      <span class="n">initWidget</span><span class="p">({</span>
</span></span><span class="line"><span class="cl">        <span class="n">waifuPath</span><span class="p">:</span> <span class="n">live2d_path</span> <span class="o">+</span> <span class="s1">&#39;waifu-tips.json&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">cdnPath</span><span class="p">:</span> <span class="s1">&#39;&lt;%= modelCdnPath %&gt;&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">cubism2Path</span><span class="p">:</span> <span class="n">live2d_path</span> <span class="o">+</span> <span class="s1">&#39;live2d.min.js&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">cubism5Path</span><span class="p">:</span> <span class="s1">&#39;https://cubism.live2d.com/sdk-web/cubismcore/live2dcubismcore.min.js&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">modelId</span><span class="p">:</span> <span class="o">&lt;%=</span> <span class="n">modelId</span> <span class="o">%&gt;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">tools</span><span class="p">:</span> <span class="o">&lt;%-</span> <span class="n">JSON</span><span class="o">.</span><span class="n">stringify</span><span class="p">(</span><span class="n">toolItems</span><span class="p">)</span> <span class="o">%&gt;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">drag</span><span class="p">:</span> <span class="o">&lt;%=</span> <span class="n">drag</span> <span class="o">%&gt;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">logLevel</span><span class="p">:</span> <span class="s1">&#39;&lt;%= logLevel %&gt;&#39;</span>
</span></span><span class="line"><span class="cl">      <span class="p">});</span>
</span></span><span class="line"><span class="cl">    <span class="p">})();</span>
</span></span><span class="line"><span class="cl">  <span class="o">&lt;/</span><span class="n">script</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="o">&lt;%</span> <span class="p">}</span> <span class="o">%&gt;</span>
</span></span></code></pre></div><h3 id="第二步引入组件">第二步：引入组件</h3>
<p>在 <code>layout/layout.ejs</code> 里引入（放在 <code>&lt;/body&gt;</code> 前面）：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">&lt;%- partial(&#39;_partial/live2d&#39;) %&gt;
</span></span></code></pre></div><h3 id="第三步配置主题">第三步：配置主题</h3>
<p>在主题的 <code>_config.yml</code> 里添加：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># Live2D 看板娘</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">live2d</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">enable</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">model</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="m">0</span><span class="w">                    </span><span class="c"># 默认模型</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">cdnPath</span><span class="p">:</span><span class="w"> </span><span class="l">https://fastly.jsdelivr.net/gh/fghrsh/live2d_api/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">tools</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">items</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">hitokoto            </span><span class="w"> </span><span class="c"># 一言</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">asteroids           </span><span class="w"> </span><span class="c"># 小游戏</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">switch-model        </span><span class="w"> </span><span class="c"># 切换模型</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">switch-texture      </span><span class="w"> </span><span class="c"># 切换皮肤</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">photo               </span><span class="w"> </span><span class="c"># 拍照</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">info                </span><span class="w"> </span><span class="c"># 关于</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">quit                </span><span class="w"> </span><span class="c"># 关闭</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">drag</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">logLevel</span><span class="p">:</span><span class="w"> </span><span class="l">warn</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">cdn</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">url</span><span class="p">:</span><span class="w"> </span><span class="l">https://fastly.jsdelivr.net/npm/live2d-widgets@1.0.0/dist/</span><span class="w">
</span></span></span></code></pre></div><h2 id="踩过的坑">踩过的坑</h2>
<h3 id="1-看板娘变形">1. 看板娘变形</h3>
<p>一开始在 CSS 里给容器设了宽高，结果模型比例全乱了。后来发现要让它自己加载 <code>waifu.css</code>，不要手动设置尺寸。</p>
<h3 id="2-图片跨域">2. 图片跨域</h3>
<p>控制台一堆跨域错误，截图功能也用不了。解决方法是在加载前给 Image 设置 <code>crossOrigin</code>：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">OriginalImage</span> <span class="o">=</span> <span class="nb">window</span><span class="p">.</span><span class="nx">Image</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="nb">window</span><span class="p">.</span><span class="nx">Image</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(...</span><span class="nx">args</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">img</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">OriginalImage</span><span class="p">(...</span><span class="nx">args</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="nx">img</span><span class="p">.</span><span class="nx">crossOrigin</span> <span class="o">=</span> <span class="s2">&#34;anonymous&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="nx">img</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">};</span>
</span></span></code></pre></div><h3 id="3-手机上太占地方">3. 手机上太占地方</h3>
<p>加个判断，屏幕小就不加载：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nx">screen</span><span class="p">.</span><span class="nx">width</span> <span class="o">&lt;</span> <span class="mi">768</span><span class="p">)</span> <span class="k">return</span><span class="p">;</span>
</span></span></code></pre></div><h3 id="4-pjax-导致重复加载">4. PJAX 导致重复加载</h3>
<p>把看板娘的代码放到 PJAX 刷新区域外面就好了。</p>
<h2 id="想用自己的模型">想用自己的模型？</h2>
<p>默认用的是 <a href="https://github.com/fghrsh/live2d_api">fghrsh 的模型 API</a>，里面模型挺多的。</p>
<p>如果想用自己的模型，可以 fork 那个仓库，把模型放进去，然后改一下 <code>cdnPath</code> 指向你自己的地址。</p>
<h2 id="相关链接">相关链接</h2>
<ul>
<li><a href="https://github.com/stevenjoezhang/live2d-widget">live2d-widget 项目地址</a></li>
<li><a href="https://github.com/fghrsh/live2d_api">模型资源 live2d_api</a></li>
<li><a href="https://github.com/zenghongtu/live2d-model-assets">更多模型资源</a></li>
</ul>
<hr>
<p>就这些。虽然只是个小玩意，但折腾的过程还是挺有意思的。</p>
<p>有问题可以留言 👋</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
