<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>SanXiaoXing</title>
  
  
  <link href="https://happy.sanxiaoxing.cn/atom.xml" rel="self"/>
  
  <link href="https://happy.sanxiaoxing.cn/"/>
  <updated>2026-06-09T14:11:29.528Z</updated>
  <id>https://happy.sanxiaoxing.cn/</id>
  
  <author>
    <name>SanXiaoXing</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>关于基金投资后的一些感悟</title>
    <link href="https://happy.sanxiaoxing.cn/posts/1b18684f.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/1b18684f.html</id>
    <published>2026-06-09T21:06:00.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>说起来也挺有意思的，2026 年这一年，我因为基金投资这件事，心态上发生了不少变化。这些变化不只是跟钱有关，它像是一条隐秘的线，悄悄牵动了我工作和生活的方方面面。</p><p>我开始认真学理财，不是为了暴富，更多是想让自己在陌生的城市出差时，有点事做，有点奔头。出差久了，在外地也交了些朋友，聊起来发现大家多多少少都在理财。方式各不相同，有人玩股票，有人买债券，有人定投指数。但说到底，大家都在做同一件事——想办法让手里的钱动起来，哪怕只多赚一瓶水的钱。</p><blockquote><p>[! warning]</p><p>本文章不做任何理财建议，只做本人基金投资感悟分享，理财风险请个人承担 ！ ！ ！</p></blockquote><h1 id="投资心态"><a href="#投资心态" class="headerlink" title="投资心态"></a>投资心态</h1><p>回头看我这一路的心态变化，大致可以分成四个阶段：<strong>赚钱的惊喜 → 惊喜后的恐慌 → 贪心后的沮丧易怒 → 到现在的平静接受</strong>。</p><p>这四个阶段，回过头来看，其实不只是投资的历程，也是一个人慢慢被生活教育的过程。</p><h2 id="赚钱的惊喜——纯粹的快乐总是短暂的"><a href="#赚钱的惊喜——纯粹的快乐总是短暂的" class="headerlink" title="赚钱的惊喜——纯粹的快乐总是短暂的"></a>赚钱的惊喜——纯粹的快乐总是短暂的</h2><p>最开始接触基金，买的是长期债券。利息比余额宝高那么一点点，但也没高到哪里去。我当时就拿两顿饭钱投进去玩，纯粹是试试水。</p><p>那时候心态特别好，真的。每个月多了一瓶水的钱，我就挺开心的。因为压根没指望它发财，所以也不焦虑。每天该吃吃该喝喝，考虑的最多的问题就是中午吃什么。</p><p>然后一个月后，我发现自己赚的钱，比余额宝一整年的还要多。</p><p>那一刻，我膨胀了。我觉得自己是”投资天才”。</p><p>这种纯粹的快乐，现在想来特别珍贵。因为后面我再也没有过这种感觉。人就是这样，一旦尝到了甜头，就很难再回到那种简单的满足里去了。</p><h2 id="惊喜后的恐慌——从乐园到战场"><a href="#惊喜后的恐慌——从乐园到战场" class="headerlink" title="惊喜后的恐慌——从乐园到战场"></a>惊喜后的恐慌——从乐园到战场</h2><p>赚到钱之后，我想把钱提出来。结果发现，我买的基金有锁定期，不到六个月取不出来。</p><p>当时行情正好，我看着账户里的数字一天天往上走，心里美滋滋的。但没过多久，行情开始往下走了。那时候我还安慰自己：没事，只是回调。</p><p>我发现市面上大部分基金都在涨，就跟着买了个科技基金。买什么涨什么，倒手一卖就赚钱。我心想，这不就是捡钱吗？</p><p>然后就梭哈了。我把所有资金全部转到一个基金里。</p><p>那段时间，我每天都能赚一个早饭钱。听起来不错对吧？但问题来了——我开始想，如果今天赔了，那我的早饭钱是不是就没了？我会不会亏？</p><p>你看，我的关注点已经变了。最初我关注的是”今天中午吃什么”，后来我关注的是”今天有没有早饭钱”。盈利的那部分钱，我早就默认是自己的了，没有把它剥离出来，没有意识到那只是账面上的浮盈。</p><p>这个阶段让我明白一件事：<strong>当你开始害怕失去的时候，其实你已经失去了某种自由。</strong></p><h2 id="贪心后的沮丧易怒——生活给你一巴掌"><a href="#贪心后的沮丧易怒——生活给你一巴掌" class="headerlink" title="贪心后的沮丧易怒——生活给你一巴掌"></a>贪心后的沮丧易怒——生活给你一巴掌</h2><p>任何事情只要是贪，必输。</p><p>这句话说出来像鸡汤，但真正吃过亏的人才知道，它有多沉。</p><p>玩基金跟赌博心理上是很像的。你觉得还能涨，市场就给你一个大跌。你觉得应该跌了吧，它又涨给你看。等到你真的以为不会跌了，加仓进去，它就开始一路狂泻。</p><p>我当时就是一味的追高，舍不得抛。结果一次大跌，几乎把我所有的利润全部抹平了。</p><p>我也确实做到了”早饭不吃了”——因为真的没利息了。哈哈，现在回想起来，觉得自己好傻。</p><p>但那段时间，我的情绪确实受到了很大影响。变得易怒，变得沮丧，变得动不动就怀疑自己。工作上正好也有压力，两件事夹在一起，就像左右夹击。后来我才意识到，其实那段时间的糟糕情绪，表面上看是因为亏了钱，实际上是<strong>我把自己的价值感和账户余额绑在了一起</strong>。</p><p>这是一个很危险的绑定。因为你赚的时候，你会觉得自己无所不能；你亏的时候，你会觉得自己一无是处。而市场的特点是——它永远不会只涨不跌。</p><h2 id="心态上的稳定——与不确定性共存"><a href="#心态上的稳定——与不确定性共存" class="headerlink" title="心态上的稳定——与不确定性共存"></a>心态上的稳定——与不确定性共存</h2><p>现在回头看，从最开始的小白，到现在超越 93% 的全国财友，算不上什么了不起的成就。但我确实觉得自己找到了一种比较舒服的状态。</p><p>说起来，最大的变化并不是我学会了什么投资技巧，而是我终于意识到：<strong>稳定不来自于市场，而来自于自己的内心。</strong></p><p>不会因为赚钱就夸张地高兴，也不会因为亏钱就伤心难过。因为任何事物都有涨有降，就像海浪一样。</p><p>有涨潮，就有退潮。</p><p>涨潮的时候，海浪猛烈地拍打海岸，看起来很吓人。但这个时候其实考验的不是你能捞到多少鱼，而是你能不能站住脚跟、守住本心。</p><p>退潮的时候，海浪退去了，沙滩露出来，这时候你反而可以去挖到一些宝藏。</p><p>这个道理放在生活里也是一样的。顺境的时候不要飘，逆境的时候不要慌。你越是把手里的沙子攥紧，沙子流得越快。你越是坦然地张开手掌，反而能留住更多。</p><h1 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h1><p>投资到最后，修的其实不是财，是心。</p><p>我们这一生会遇到很多不确定性——工作的变动、关系的起伏、市场的波动。你没办法控制潮水什么时候来、什么时候走，你能控制的，是自己站在岸上的姿态。</p><p><strong>投资真正的意义，不是让你的钱变多，而是让你学会和不确定性共处。</strong></p><p>共处，不是对抗。和解，才是答案。</p><blockquote><p>[! success]<br>想到了一个博主说的话：<strong>年轻的时候通过投资挣到的大钱不是你真正得到的，这需要你后面来补偿的，年轻人少些浮躁，沉下心来。</strong></p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h1&gt;&lt;p&gt;说起来也挺有意思的，2026 年这一年，我因为基金投资这件事，心态上发生了不少变化。这些变化不只是跟钱有关，它像是一条隐秘的线，悄悄牵动了我</summary>
      
    
    
    
    <category term="blog" scheme="https://happy.sanxiaoxing.cn/categories/blog/"/>
    
    
    <category term="blog" scheme="https://happy.sanxiaoxing.cn/tags/blog/"/>
    
  </entry>
  
  <entry>
    <title>给 Astro 博客加上点赞文章功能</title>
    <link href="https://happy.sanxiaoxing.cn/posts/30e39654.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/30e39654.html</id>
    <published>2026-06-07T22:48:00.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>在博客评论区已经接入了 Twikoo 评论系统的基础上，我一直觉得缺少一个轻量的”反应”能力——在文章末尾加几个 emoji 按钮，读者可以随手点个 👍，其他人也能看到。</p><p>需求很简单：</p><ul><li>每篇文章下方显示几个 emoji 反应按钮</li><li>读者点击后高亮，计数 +1</li><li><strong>所有人都能看到当前计数</strong></li><li>不需要登录，零摩擦</li><li>纯静态站点，不引入 serverless 函数</li></ul><p>听起来很直接，但真正落地时涉及了组件设计、数据持久化、防刷、SSG/CSR 融合、以及一连串部署环境差异的坑。这篇文章就完整记录整个过程。</p><hr><h1 id="第一步：选择技术栈"><a href="#第一步：选择技术栈" class="headerlink" title="第一步：选择技术栈"></a>第一步：选择技术栈</h1><p>项目现状是 <strong>Astro + React + Tailwind CSS</strong>，输出模式为纯静态 <strong>SSG</strong>。要支持”所有人可见”的计数，最关键的问题只有一个 —— <strong>数据存在哪里</strong>？</p><h2 id="选项对比"><a href="#选项对比" class="headerlink" title="选项对比"></a>选项对比</h2><div class="table-container"><table><thead><tr><th>方案</th><th>优点</th><th>缺点</th></tr></thead><tbody><tr><td>A. 复用 Twikoo 评论</td><td>零新依赖，几乎不需新代码</td><td>数据模型错位，污染评论流，聚合困难</td></tr><tr><td>B. Supabase / Firebase</td><td>托管 PostgreSQL，SDK 成熟，免费档够用</td><td>多一个外部服务依赖</td></tr><tr><td>C. 自建 Serverless API</td><td>完全可控</td><td>要从静态站切 hybrid 模式，部署复杂度翻倍</td></tr><tr><td>D. 静态 JSON 文件</td><td>极致简单</td><td>每次反应都要 build，完全不现实</td></tr></tbody></table></div><p>最终选择了 <strong>B（Supabase）</strong>，理由很简单：</p><ol><li>关系型数据模型天然适合”文章 × emoji 计数”这种场景</li><li>Supabase JS client 只有几 KB，可以直接在 React 组件里用</li><li>RLS 策略可以在不写后端代码的前提下做安全校验</li><li>免费档够个人博客跑很久</li></ol><h2 id="问：要不要让用户登录？"><a href="#问：要不要让用户登录？" class="headerlink" title="问：要不要让用户登录？"></a>问：要不要让用户登录？</h2><p>当然最简单的是用 Supabase Auth，走 GitHub 登录。但真实场景是：<strong>浏览博客的人大概率不会为了点个 👍 去点登录</strong>。直接匿名方案才能保证转化率。</p><p>最终的防刷体系是：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">localStorage UUID（身份）→ 数据库 UNIQUE(post_slug, visitor_id) 约束 → RLS 策略校验</span><br></pre></td></tr></table></figure><p><strong>不依赖服务端</strong> —— 所有身份管理在前端完成，Supabase 的 RLS 兜底防止伪造。</p><hr><h1 id="第二步：架构设计"><a href="#第二步：架构设计" class="headerlink" title="第二步：架构设计"></a>第二步：架构设计</h1><h2 id="数据模型"><a href="#数据模型" class="headerlink" title="数据模型"></a>数据模型</h2><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">create</span> <span class="keyword">table</span> public.reactions (</span><br><span class="line">  id uuid <span class="keyword">primary</span> key <span class="keyword">default</span> gen_random_uuid(),</span><br><span class="line">  post_slug text <span class="keyword">not</span> <span class="keyword">null</span>,</span><br><span class="line">  emoji text <span class="keyword">not</span> <span class="keyword">null</span>,</span><br><span class="line">  visitor_id text <span class="keyword">not</span> <span class="keyword">null</span>,</span><br><span class="line">  created_at timestamptz <span class="keyword">not</span> <span class="keyword">null</span> <span class="keyword">default</span> now(),</span><br><span class="line">  updated_at timestamptz <span class="keyword">not</span> <span class="keyword">null</span> <span class="keyword">default</span> now(),</span><br><span class="line">  <span class="keyword">unique</span> (post_slug, visitor_id)</span><br><span class="line">);</span><br></pre></td></tr></table></figure><p>核心约束 <code>UNIQUE(post_slug, visitor_id)</code> —— 每篇文章每个访客只有一行数据。点击不同 emoji 时通过 <code>UPDATE</code> 更新 <code>emoji</code> 字段（不是 Insert + Delete，也不是多行）。</p><h2 id="读路径：SSG-与-CSR-的混合"><a href="#读路径：SSG-与-CSR-的混合" class="headerlink" title="读路径：SSG 与 CSR 的混合"></a>读路径：SSG 与 CSR 的混合</h2><p>Astro 是纯静态构建，所以采用了 <strong>混合策略</strong>：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">构建时（Node.js 环境）:</span><br><span class="line">  → fetchBuildTimeCounts(slug)   ← 用原生 fetch 调 Supabase REST API</span><br><span class="line">  → 把当前计数烤进 HTML</span><br><span class="line"></span><br><span class="line">客户端（浏览器环境）:</span><br><span class="line">  → 组件挂载时再次 fetch</span><br><span class="line">  → 用最新数据覆盖构建时的快照</span><br><span class="line">  → 同时查询 &quot;我当前选了哪个 emoji&quot; 并高亮</span><br></pre></td></tr></table></figure><p>这样搜索引擎能看到数字，用户看到的是实时数据，各取所需。</p><h2 id="写路径：乐观更新-失败通知"><a href="#写路径：乐观更新-失败通知" class="headerlink" title="写路径：乐观更新 + 失败通知"></a>写路径：乐观更新 + 失败通知</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">用户点击 emoji</span><br><span class="line">  → 立刻更新 UI（选中高亮，计数 ±1）</span><br><span class="line">  → 异步调用 supabase.upsert / delete</span><br><span class="line">  → 成功 → 静默</span><br><span class="line">  → 失败 → toast 报错 + 回滚 UI</span><br></pre></td></tr></table></figure><p>Toast 组件用了 <code>sonner</code>，shadcn 生态标配，和 Tailwind 风格统一。</p><h2 id="组件结构"><a href="#组件结构" class="headerlink" title="组件结构"></a>组件结构</h2><p>最后的组件拆分为两个：</p><ul><li><code>reaction-chip.tsx</code> —— 核心组件，包含 <code>MessageWithReactions</code>（外部容器）和 <code>ReactionChip</code>（浮动 emoji 选择面板）两个导出</li><li><code>sonner.tsx</code> —— 标准 Toaster 包装，挂载在全局 Layout</li></ul><hr><h1 id="第三步：具体实现"><a href="#第三步：具体实现" class="headerlink" title="第三步：具体实现"></a>第三步：具体实现</h1><h2 id="访客身份管理"><a href="#访客身份管理" class="headerlink" title="访客身份管理"></a>访客身份管理</h2><p>在 <code>src/lib/reactions.ts</code> 中实现：</p><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> <span class="title function_">getOrCreateVisitorId</span>(<span class="params"></span>): <span class="built_in">string</span> | <span class="literal">null</span> &#123;</span><br><span class="line">  <span class="keyword">if</span> (<span class="keyword">typeof</span> <span class="variable language_">window</span> === <span class="string">&#x27;undefined&#x27;</span>) <span class="keyword">return</span> <span class="literal">null</span></span><br><span class="line"></span><br><span class="line">  <span class="comment">// 尝试读取已有的 UUID</span></span><br><span class="line">  <span class="keyword">try</span> &#123;</span><br><span class="line">    <span class="keyword">const</span> existing = <span class="variable language_">window</span>.<span class="property">localStorage</span>.<span class="title function_">getItem</span>(<span class="variable constant_">VISITOR_ID_KEY</span>)</span><br><span class="line">    <span class="keyword">if</span> (existing) <span class="keyword">return</span> existing</span><br><span class="line">  &#125; <span class="keyword">catch</span> &#123; <span class="comment">/* private mode */</span> &#125;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// 没有则生成一个新的</span></span><br><span class="line">  <span class="keyword">const</span> id = crypto.<span class="title function_">randomUUID</span>()</span><br><span class="line">  <span class="keyword">try</span> &#123;</span><br><span class="line">    <span class="variable language_">window</span>.<span class="property">localStorage</span>.<span class="title function_">setItem</span>(<span class="variable constant_">VISITOR_ID_KEY</span>, id)</span><br><span class="line">  &#125; <span class="keyword">catch</span> &#123; <span class="comment">/* 写不进去也不影响本次会话 */</span> &#125;</span><br><span class="line">  <span class="keyword">return</span> id</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>为什么不哈希？因为纯粹前端做加盐哈希没有意义 —— 盐写在前端 bundle 里就等于公开。直接用 cookie/localStorage 的值作为身份标识，数据库 UNIQUE 约束才是真正的防刷防线。</p><h2 id="RLS-策略"><a href="#RLS-策略" class="headerlink" title="RLS 策略"></a>RLS 策略</h2><p>Supabase 的 Row Level Security 是零服务端方案的安全基石：</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">-- 任何人都能读</span></span><br><span class="line"><span class="keyword">create</span> policy &quot;reactions_read_all&quot;</span><br><span class="line">  <span class="keyword">on</span> public.reactions <span class="keyword">for</span> <span class="keyword">select</span></span><br><span class="line">  <span class="keyword">to</span> anon, authenticated</span><br><span class="line">  <span class="keyword">using</span> (<span class="literal">true</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">-- 写入时必须声称自己的 visitor_id</span></span><br><span class="line"><span class="comment">-- 前端通过 X-Visitor-Id header 传入</span></span><br><span class="line"><span class="keyword">create</span> policy &quot;reactions_write_self&quot;</span><br><span class="line">  <span class="keyword">on</span> public.reactions <span class="keyword">for</span> <span class="keyword">insert</span></span><br><span class="line">  <span class="keyword">to</span> anon, authenticated</span><br><span class="line">  <span class="keyword">with</span> <span class="keyword">check</span> (</span><br><span class="line">    visitor_id <span class="operator">=</span> current_setting(<span class="string">&#x27;request.headers&#x27;</span>, <span class="literal">true</span>)::json<span class="operator">-</span><span class="operator">&gt;&gt;</span><span class="string">&#x27;x-visitor-id&#x27;</span></span><br><span class="line">  );</span><br></pre></td></tr></table></figure><p>前端请求时自动携带 <code>X-Visitor-Id</code> header：</p><figure class="highlight ts"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> supabase = <span class="title function_">createClient</span>(<span class="variable constant_">SUPABASE_URL</span>, <span class="variable constant_">SUPABASE_ANON_KEY</span>, &#123;</span><br><span class="line">  <span class="attr">global</span>: &#123;</span><br><span class="line">    <span class="attr">headers</span>: &#123; <span class="string">&#x27;x-visitor-id&#x27;</span>: visitorId &#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><h2 id="Supabase-helper-分装"><a href="#Supabase-helper-分装" class="headerlink" title="Supabase helper 分装"></a>Supabase helper 分装</h2><p>在 <code>src/lib/reactions.ts</code> 中封装了三个场景的查询函数：</p><div class="table-container"><table><thead><tr><th>函数</th><th>使用场景</th><th>技术栈</th></tr></thead><tbody><tr><td><code>fetchBuildTimeCounts</code></td><td>Astro 构建时（Node.js）</td><td>fetch + REST API</td></tr><tr><td><code>fetchLiveCounts</code></td><td>浏览器组件挂载</td><td>@supabase/supabase-js</td></tr><tr><td><code>fetchMySelection</code></td><td>浏览器查询当前访客的选择</td><td>@supabase/supabase-js</td></tr></tbody></table></div><hr><h1 id="最终架构全景"><a href="#最终架构全景" class="headerlink" title="最终架构全景"></a>最终架构全景</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">┌─ 构建时（Node.js）─────────────────────────────┐</span><br><span class="line">│  BlogPost.astro frontmatter                     │</span><br><span class="line">│    → fetchBuildTimeCounts(slug)                 │</span><br><span class="line">│    → 返回 &#123; &quot;👍&quot;: 3, &quot;❤️&quot;: 1 &#125;                │</span><br><span class="line">│    → 序列化到 HTML props                        │</span><br><span class="line">└────────────────────────────────────────────────┘</span><br><span class="line"></span><br><span class="line">┌─ 浏览器（React 组件）──────────────────────────┐</span><br><span class="line">│  useEffect:                                     │</span><br><span class="line">│    1. 读 localStorage UUID                      │</span><br><span class="line">│    2. fetchLiveCounts (实时覆盖构建快照)          │</span><br><span class="line">│    3. fetchMySelection (高亮选择)                │</span><br><span class="line">│                                                 │</span><br><span class="line">│  onClick:                                       │</span><br><span class="line">│    1. 乐观更新 UI                                │</span><br><span class="line">│    2. supabase.upsert / delete                  │</span><br><span class="line">│    3. 失败 → toast.error + 回滚                 │</span><br><span class="line">└────────────────────────────────────────────────┘</span><br><span class="line"></span><br><span class="line">┌─ Supabase ─────────────────────────────────────┐</span><br><span class="line">│  Table: reactions                               │</span><br><span class="line">│  RLS: SELECT 开放 / 写操作需校验 visitor_id       │</span><br><span class="line">│  UNIQUE(post_slug, visitor_id) 防刷             │</span><br><span class="line">└────────────────────────────────────────────────┘</span><br></pre></td></tr></table></figure><hr><h1 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h1><p>这个功能本身不复杂，但从需求到上线踩了三个平台/框架版本兼容的坑：</p><ol><li><strong>Vercel 环境差异</strong> —— Node 20 没有 WebSocket，<code>createClient</code> 在构建时直接崩溃</li><li><strong>Node 24 解析差异</strong> —— BOM 字符导致 <code>commitlint.config.js</code> 无法加载</li></ol><p>最终收获是 <strong>零服务端、纯静态</strong> 的反应系统，全部代码量不到 300 行，依赖于 <code>@supabase/supabase-js</code> + <code>sonner</code> 两个外部包。<code>pnpm-lock.yaml</code> 里锁定了所有依赖版本，确保本地和 Vercel 构建行为一致。</p><p>如果你也在自己的 Astro 博客上做类似的功能，可以从我的 <a href="https://github.com/SanXiaoXing/astro-shadcn-ui-template">GitHub 仓库</a> 的 <code>src/components/ui/reaction-chip.tsx</code> 开始，祝顺利。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h1&gt;&lt;p&gt;在博客评论区已经接入了 Twikoo 评论系统的基础上，我一直觉得缺少一个轻量的”反应”能力——在文章末尾加几个 emoji 按钮，读者可以</summary>
      
    
    
    
    <category term="Astro" scheme="https://happy.sanxiaoxing.cn/categories/Astro/"/>
    
    <category term="Supabase" scheme="https://happy.sanxiaoxing.cn/categories/Astro/Supabase/"/>
    
    <category term="React" scheme="https://happy.sanxiaoxing.cn/categories/Astro/Supabase/React/"/>
    
    <category term="Tailwind" scheme="https://happy.sanxiaoxing.cn/categories/Astro/Supabase/React/Tailwind/"/>
    
    <category term="博客" scheme="https://happy.sanxiaoxing.cn/categories/Astro/Supabase/React/Tailwind/%E5%8D%9A%E5%AE%A2/"/>
    
    
    <category term="博客" scheme="https://happy.sanxiaoxing.cn/tags/%E5%8D%9A%E5%AE%A2/"/>
    
    <category term="Astro" scheme="https://happy.sanxiaoxing.cn/tags/Astro/"/>
    
    <category term="Supabase" scheme="https://happy.sanxiaoxing.cn/tags/Supabase/"/>
    
    <category term="React" scheme="https://happy.sanxiaoxing.cn/tags/React/"/>
    
    <category term="Tailwind" scheme="https://happy.sanxiaoxing.cn/tags/Tailwind/"/>
    
  </entry>
  
  <entry>
    <title>使用 Obsidian 统一管理多个博客项目（Vault + 软链接方案）</title>
    <link href="https://happy.sanxiaoxing.cn/posts/b3335e30.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/b3335e30.html</id>
    <published>2026-03-15T22:48:00.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>在日常写博客的过程中，我逐渐维护了多个不同类型的博客项目。例如：</p><ul><li><p>一个基于 <strong>Astro</strong> 的个人博客</p></li><li><p>一个自动化生成内容的博客项目</p></li><li><p>以及一些日常记录的 Markdown 笔记</p></li></ul><p>这些内容分别分散在不同的项目目录中，例如：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">/Volumes/SanXiaoXing/Blog/Astro_profile/src/content/blog</span><br><span class="line">/Volumes/SanXiaoXing/Blog/blog_auto/source/_posts</span><br><span class="line">/Volumes/SanXiaoXing/Blog/Note</span><br></pre></td></tr></table></figure><p>虽然我使用 <strong>Obsidian</strong> 进行 Markdown 写作，但如果每个目录都单独作为一个 Vault 打开，不仅切换麻烦，也无法进行统一搜索和管理。</p><p>因此，需要一种方法：</p><ul><li><p>可以 <strong>统一查看所有 Markdown 文档</strong></p></li><li><p>又 <strong>不影响原有博客项目结构</strong></p></li><li><p>同时 <strong>修改内容可以直接同步到项目中</strong></p></li></ul><p>最终选择的方案是：</p><blockquote><p><strong>建立一个统一的 Obsidian Vault，并使用 macOS 的软链接（Symbolic Link）映射各个博客目录。</strong></p></blockquote><hr><h1 id="原理说明"><a href="#原理说明" class="headerlink" title="原理说明"></a>原理说明</h1><p>软链接（Symbolic Link）是一种文件系统机制，它允许在一个目录中创建一个“指向另一个目录”的链接。</p><p>在 Obsidian 中看起来像是普通文件夹，但实际上内容仍然在原始项目中。</p><p>因此可以实现：</p><ul><li><p>Obsidian 统一管理</p></li><li><p>博客项目结构保持不变</p></li><li><p>Git 提交不受影响</p></li></ul><hr><h1 id="目录规划"><a href="#目录规划" class="headerlink" title="目录规划"></a>目录规划</h1><p>首先创建一个统一的 Obsidian Vault，例如：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/Volumes/SanXiaoXing/Blog/ObsidianVault</span><br></pre></td></tr></table></figure><p>目标结构如下：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">ObsidianVault</span><br><span class="line">    astro_blog</span><br><span class="line">    hexo_blog</span><br><span class="line">    notes</span><br></pre></td></tr></table></figure><p>其中：</p><div class="table-container"><table><thead><tr><th>文件夹</th><th>实际指向</th></tr></thead><tbody><tr><td>astro_blog</td><td>Astro 博客文章目录</td></tr><tr><td>hexo_blog</td><td>Hexo 博客文章目录</td></tr><tr><td>notes</td><td>个人笔记</td></tr></tbody></table></div><hr><h1 id="创建软链接"><a href="#创建软链接" class="headerlink" title="创建软链接"></a>创建软链接</h1><p>在 macOS 终端中执行以下操作。</p><h2 id="进入-Vault-目录"><a href="#进入-Vault-目录" class="headerlink" title="进入 Vault 目录"></a>进入 Vault 目录</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cd /Volumes/SanXiaoXing/Blog/ObsidianVault</span><br></pre></td></tr></table></figure><h2 id="创建-Astro-博客映射"><a href="#创建-Astro-博客映射" class="headerlink" title="创建 Astro 博客映射"></a>创建 Astro 博客映射</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ln -s /Volumes/SanXiaoXing/Blog/Astro_profile/src/content/blog astro_blog</span><br></pre></td></tr></table></figure><h2 id="创建-Hexo-博客映射"><a href="#创建-Hexo-博客映射" class="headerlink" title="创建 Hexo 博客映射"></a>创建 Hexo 博客映射</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ln -s /Volumes/SanXiaoXing/Blog/blog_auto/source/_posts hexo_blog</span><br></pre></td></tr></table></figure><h2 id="创建笔记映射"><a href="#创建笔记映射" class="headerlink" title="创建笔记映射"></a>创建笔记映射</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ln -s /Volumes/SanXiaoXing/Blog/Note notes</span><br></pre></td></tr></table></figure><hr><h1 id="完成后的目录结构"><a href="#完成后的目录结构" class="headerlink" title="完成后的目录结构"></a>完成后的目录结构</h1><p>执行</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ls -l</span><br></pre></td></tr></table></figure><p>可以看到：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">astro_blog -&gt; /Volumes/SanXiaoXing/Blog/Astro_profile/src/content/blog</span><br><span class="line">hexo_blog -&gt; /Volumes/SanXiaoXing/Blog/blog_auto/source/_posts</span><br><span class="line">notes -&gt; /Volumes/SanXiaoXing/Blog/Note</span><br></pre></td></tr></table></figure><p>在 Obsidian 中显示为：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">ObsidianVault</span><br><span class="line">   astro_blog</span><br><span class="line">   hexo_blog</span><br><span class="line">   notes</span><br></pre></td></tr></table></figure><p>现在就可以：</p><ul><li><p>在一个 Vault 中管理所有博客</p></li><li><p>统一搜索所有文章</p></li><li><p>使用统一插件和模板</p></li><li><p>修改内容立即同步到项目</p></li></ul><hr><h1 id="推荐优化"><a href="#推荐优化" class="headerlink" title="推荐优化"></a>推荐优化</h1><p>由于博客项目通常包含大量开发文件，例如：</p><ul><li><p><code>node_modules</code></p></li><li><p><code>.git</code></p></li><li><p><code>dist</code></p></li><li><p><code>.astro</code></p></li></ul><p>这些文件对写作没有意义，但会影响 Obsidian 的扫描速度。</p><p>可以在 Obsidian 设置中排除这些目录：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Settings → Files &amp; Links → Excluded files</span><br></pre></td></tr></table></figure><p>添加：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">**/node_modules/**</span><br><span class="line">**/.git/**</span><br><span class="line">**/dist/**</span><br><span class="line">**/.astro/**</span><br></pre></td></tr></table></figure><p>这样 Vault 会更加流畅。</p><hr><h1 id="进阶玩法"><a href="#进阶玩法" class="headerlink" title="进阶玩法"></a>进阶玩法</h1><p>如果安装 <strong>Dataview 插件</strong>，还可以建立一个博客管理面板，例如显示最近修改的博客：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">TABLE file.mtime as 修改时间</span><br><span class="line">FROM &quot;astro_blog&quot; OR &quot;hexo_blog&quot;</span><br><span class="line">SORT file.mtime desc</span><br></pre></td></tr></table></figure><p>这样就可以在一个页面看到所有博客文章的更新情况。</p><hr><h1 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h1><p>通过 <strong>统一 Vault + 软链接</strong> 的方式，可以很好地解决多博客项目管理的问题：</p><p>优点：</p><ul><li><p>Markdown 写作环境统一</p></li><li><p>项目结构不被破坏</p></li><li><p>Git 工作流保持正常</p></li><li><p>支持跨博客全文搜索</p></li><li><p>维护成本极低</p></li></ul><p>对于同时维护多个博客项目的人来说，这是一个非常高效且优雅的解决方案。</p><hr><h1 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h1><blockquote><p>工具的价值，在于减少无意义的操作，让注意力重新回到创作本身。</p></blockquote><p>当写作环境足够顺手时，剩下的事情，就只是继续写下去。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h1&gt;&lt;p&gt;在日常写博客的过程中，我逐渐维护了多个不同类型的博客项目。例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;一个基于 &lt;strong&gt;Astro&lt;/s</summary>
      
    
    
    
    <category term="Obsidian" scheme="https://happy.sanxiaoxing.cn/categories/Obsidian/"/>
    
    <category term="Mac" scheme="https://happy.sanxiaoxing.cn/categories/Obsidian/Mac/"/>
    
    
    <category term="技术" scheme="https://happy.sanxiaoxing.cn/tags/%E6%8A%80%E6%9C%AF/"/>
    
    <category term="博客" scheme="https://happy.sanxiaoxing.cn/tags/%E5%8D%9A%E5%AE%A2/"/>
    
    <category term="blog" scheme="https://happy.sanxiaoxing.cn/tags/blog/"/>
    
  </entry>
  
  <entry>
    <title>Mac必装软件</title>
    <link href="https://happy.sanxiaoxing.cn/posts/ac36adc7.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/ac36adc7.html</id>
    <published>2025-04-21T09:48:09.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<h1 id="重要声明"><a href="#重要声明" class="headerlink" title="重要声明"></a>重要声明</h1><div class="tip bell"><p>此工具仅供个人学习使用，请在学习后24小时内删除。若有侵权，请联系我，我会及时删除。</p></div><h1 id="必装软件"><a href="#必装软件" class="headerlink" title="必装软件"></a>必装软件</h1><h2 id="Mac必装软件"><a href="#Mac必装软件" class="headerlink" title="Mac必装软件"></a>Mac必装软件</h2><div class="flink"><div class="flink-name">必装软件官网</div> <div class="flink-list"><div class="anzhiyu-flink-list">            <div class="flink-list-item">              <a href="https://kyome.io/runcat/index.html" title="RunCat" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://kyome.io/runcat/images/icon.png" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="RunCat" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">RunCat</div>                  <div class="flink-item-desc" title="一个查看 Mac 电脑的运行情况的工具">一个查看 Mac 电脑的运行情况的工具</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://obsidian.md/" title="Obsidian" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://th.bing.com/th/id/OSK.27300332122820dd62db208a2358de34?w=80&h=80&r=0&o=6&cb=B&pid=23.1" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Obsidian" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Obsidian</div>                  <div class="flink-item-desc" title="超强笔记软件">超强笔记软件</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://iterm2.com/" title="iTerm" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://th.bing.com/th/id/ODLS.94557fb0-84bc-414b-8c58-ae498045d0e4?w=32&h=32&r=0&o=6&pid=1.2" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="iTerm" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">iTerm</div>                  <div class="flink-item-desc" title="独属于 Mac 的终端">独属于 Mac 的终端</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://arc.net/" title="Arc" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://arc.net/_next/image?url=%2Fapp-icon-desktop.png&w=128&q=75" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Arc" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Arc</div>                  <div class="flink-item-desc" title="Mac 最佳的浏览器">Mac 最佳的浏览器</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://mos.caldis.me/" title="Mos" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://mos.caldis.me/_next/static/media/logo-64.775e8e78.png" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Mos" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Mos</div>                  <div class="flink-item-desc" title="让鼠标滚动更加顺滑">让鼠标滚动更加顺滑</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://www.raycast.com/" title="Raycast" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://th.bing.com/th/id/ODLS.2be0590a-a1b6-44a7-9fce-baa5cf27eeae?w=32&h=32&r=0&o=6&pid=1.2" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Raycast" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Raycast</div>                  <div class="flink-item-desc" title="Your shortcut to everything">Your shortcut to everything</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://www.sublimetext.com/" title="Sublime Text" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://www.sublimehq.com/images/sublime_text.png" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Sublime Text" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Sublime Text</div>                  <div class="flink-item-desc" title="简洁、强大的文本编辑器">简洁、强大的文本编辑器</div>                </div>              </a>            </div></div></div></div>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;重要声明&quot;&gt;&lt;a href=&quot;#重要声明&quot; class=&quot;headerlink&quot; title=&quot;重要声明&quot;&gt;&lt;/a&gt;重要声明&lt;/h1&gt;&lt;div class=&quot;tip bell&quot;&gt;&lt;p&gt;此工具仅供个人学习使用，请在学习后24小时内删除。若有侵权，请联系我，我会及时删</summary>
      
    
    
    
    <category term="Mac" scheme="https://happy.sanxiaoxing.cn/categories/Mac/"/>
    
    
    <category term="Mac" scheme="https://happy.sanxiaoxing.cn/tags/Mac/"/>
    
  </entry>
  
  <entry>
    <title>英文昵称更改</title>
    <link href="https://happy.sanxiaoxing.cn/posts/5715173d.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/5715173d.html</id>
    <published>2024-07-09T23:55:00.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<div class="note success no-icon flat"><h3 id="由于SanXiaoXing的英文昵称过于冗余以及不便于记忆，故想借助AI帮忙起一个更简洁、易记的英文昵称。"><a href="#由于SanXiaoXing的英文昵称过于冗余以及不便于记忆，故想借助AI帮忙起一个更简洁、易记的英文昵称。" class="headerlink" title="由于SanXiaoXing的英文昵称过于冗余以及不便于记忆，故想借助AI帮忙起一个更简洁、易记的英文昵称。"></a>由于SanXiaoXing的英文昵称过于冗余以及不便于记忆，故想借助AI帮忙起一个更简洁、易记的英文昵称。</h3></div><div class="timeline undefined"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>英文昵称选择</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>SamXenon</p></div></div><div class='timeline-item-content'><ul><li>采用“兴”的谐音“Xe”，结合元素周期表中的“Neon”（氖），创造出一个独特的英文昵称。</li></ul><div class="note info modern"><p>个人还是比较喜欢这个的，不管是从结构还是语义，都十分符合我的个人喜好。“氖”是一个稳定的元素，而且“Neon”是一个非常特殊的元素，是一种无色的稀有气体，把它放电时呈橙红。是我喜欢的类型。</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>SamXavier</p></div></div><div class='timeline-item-content'><ul><li>通过“兴”的谐音“X”结合常见的英文名“avier”，是一个在英语国家中常见的名字。</li></ul><div class="note info modern"><p>这个中规中矩，没有SanXiaoXing好听甚至好记。</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>SamSean</p></div></div><div class='timeline-item-content'><ul><li>如果您喜欢“兴”的音译，那么“Sean”是一个常见的英文名字，和“兴”发音相似。</li></ul><div class="note info modern"><p>这个非常好听，但是没有<code>sam</code>这个就会感觉少点什么。</p></div></div></div></div>]]></content>
    
    
    <summary type="html">简单英文昵称更改</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>快速提交 git 仓库内容</title>
    <link href="https://happy.sanxiaoxing.cn/posts/c62233d7.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/c62233d7.html</id>
    <published>2024-06-24T22:57:00.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<h1 id="思考"><a href="#思考" class="headerlink" title="思考"></a>思考</h1><p>随着我刷LeetCode题目的增多，我会记录下刷题过程、时间复杂度和内存消耗，并将LeetCode的截图裁切后上传到图床。</p><p>然而，有时我只记得上传博客内容，却忘记了上传截图。为了快速且清晰地提交到Git仓库，我需要一种更高效的方法来管理这些提交。</p><blockquote><p>此文章内容仅使用了免费的Github + JsDelivr图床方案，没有使用阿里云的OSS收费的方法。</p></blockquote><h1 id="实现快速提交功能"><a href="#实现快速提交功能" class="headerlink" title="实现快速提交功能"></a>实现快速提交功能</h1><h2 id="需求分析"><a href="#需求分析" class="headerlink" title="需求分析"></a>需求分析</h2><p>实现快速提交功能，使提交信息包含当前的时间（精确到分钟），并符合提交规范的内容要求。</p><h2 id="实现步骤"><a href="#实现步骤" class="headerlink" title="实现步骤"></a>实现步骤</h2><h3 id="写入Bash脚本"><a href="#写入Bash脚本" class="headerlink" title="写入Bash脚本"></a>写入Bash脚本</h3><p>将脚本内容保存到一个文件当中，如<code>quick_commit.sh</code></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 获取当前时间，格式为 YYYY-MM-DD HH:MM</span></span><br><span class="line">current_time=$(<span class="built_in">date</span> +<span class="string">&quot;%Y-%m-%d %H:%M&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置提交信息</span></span><br><span class="line">commit_message=<span class="string">&quot;add(blog): <span class="variable">$&#123;current_time&#125;</span>&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加所有更改到暂存区</span></span><br><span class="line">git add .</span><br><span class="line"></span><br><span class="line"><span class="comment"># 提交更改并使用格式化的提交信息</span></span><br><span class="line">git commit -m <span class="string">&quot;<span class="variable">$&#123;commit_message&#125;</span>&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 推送更改到远程仓库</span></span><br><span class="line">git push</span><br></pre></td></tr></table></figure><h3 id="使用方法"><a href="#使用方法" class="headerlink" title="使用方法"></a>使用方法</h3><ol><li><p>在 <code>git bash</code> 中给脚本添加执行权限</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">chmod</span> +x quick_commit.sh</span><br></pre></td></tr></table></figure></li><li><p>在需要提交的 Git 仓库中运行这个脚本来快速提交</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./quick_commit.sh</span><br></pre></td></tr></table></figure></li></ol><p>执行完脚本后就可以看到<code>GitHub</code>仓库中已经成功上传内容，并且commit提交的内容为获取的时间。</p><h3 id="提交内容展示"><a href="#提交内容展示" class="headerlink" title="提交内容展示"></a>提交内容展示</h3><p><img src="https://cdn.jsdelivr.net/gh/SanXiaoXing/Image@main/blog/SanXiaoXing_2024-06-24_23-25-03.png" alt="result"></p><h1 id="ISSUE"><a href="#ISSUE" class="headerlink" title="ISSUE"></a>ISSUE</h1><blockquote><p>在此过程中难免会遇到问题，那也是一个成长的过程嘛！</p></blockquote><h2 id="文件格式问题"><a href="#文件格式问题" class="headerlink" title="文件格式问题"></a>文件格式问题</h2><p>当我成功使用<code>git bash</code> 提交上去之后，我下意识的使用<code>zsh</code>去提交我的提交我的代码及图片内容。但是遇到了文件格式的问题。</p><blockquote><p><code>zsh: ./quick_commit.sh: bad interpreter: /bin/bash^M: no such file or directory</code></p></blockquote><ul><li>在Unix/Linux系统中，行结束符是LF（<code>\n</code>）</li><li>在Windows系统中，行结束符是CRLF（<code>\r\n</code>）</li></ul><p>当你在Windows系统上编辑脚本并在Unix/Linux系统上运行时，脚本文件可能包含Windows格式的行结束符，从而导致“bad interpreter”错误。</p><h3 id="解决方法"><a href="#解决方法" class="headerlink" title="解决方法"></a>解决方法</h3><h5 id="在VSCode中："><a href="#在VSCode中：" class="headerlink" title="在VSCode中："></a>在VSCode中：</h5><ol><li>打开 <code>quick_commit.sh</code> 文件。</li><li>右下角可以看到 <code>CRLF</code> 或 <code>LF</code>。</li><li>点击 <code>CRLF</code>，然后选择 <code>LF</code>。</li></ol><h5 id="在Sublime-Text中："><a href="#在Sublime-Text中：" class="headerlink" title="在Sublime Text中："></a>在Sublime Text中：</h5><ol><li>打开 <code>quick_commit.sh</code> 文件。</li><li>点击菜单栏的 <code>View -&gt; Line Endings</code>。</li><li>选择 <code>Unix</code>.</li></ol><h5 id="在Notepad-中（Windows）："><a href="#在Notepad-中（Windows）：" class="headerlink" title="在Notepad++中（Windows）："></a>在Notepad++中（Windows）：</h5><ol><li>打开 <code>quick_commit.sh</code> 文件。</li><li>点击菜单栏的 <code>Edit -&gt; EOL Conversion</code>。</li><li>选择 <code>Unix (LF)</code>。</li></ol><p>转换完后，保存文件并再次尝试运行脚本。</p>]]></content>
    
    
    <summary type="html">每日偷懒大法</summary>
    
    
    
    
    <category term="git" scheme="https://happy.sanxiaoxing.cn/tags/git/"/>
    
  </entry>
  
  <entry>
    <title>慢刷Leetcode算法题</title>
    <link href="https://happy.sanxiaoxing.cn/posts/33a8c27d.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/33a8c27d.html</id>
    <published>2024-06-21T22:05:00.000Z</published>
    <updated>2026-06-09T14:11:29.527Z</updated>
    
    <content type="html"><![CDATA[<h1 id="2024-06-24"><a href="#2024-06-24" class="headerlink" title="2024-06-24"></a>2024-06-24</h1><h2 id="Ideas"><a href="#Ideas" class="headerlink" title="Ideas"></a>Ideas</h2><ul><li><strong>mergeTrees方法</strong>:<ul><li>如果 <code>root1</code> 或 <code>root2</code> 为 <code>null</code>，直接返回另一棵树。</li><li>否则，先将 <code>root1</code> 和 <code>root2</code> 对应节点的值相加，并将结果存储在 <code>root1</code> 中。</li><li>递归地合并左子树和右子树。</li></ul></li></ul><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * Definition for a binary tree node.</span></span><br><span class="line"><span class="comment"> * public class TreeNode &#123;</span></span><br><span class="line"><span class="comment"> *     int val;</span></span><br><span class="line"><span class="comment"> *     TreeNode left;</span></span><br><span class="line"><span class="comment"> *     TreeNode right;</span></span><br><span class="line"><span class="comment"> *     TreeNode() &#123;&#125;</span></span><br><span class="line"><span class="comment"> *     TreeNode(int val) &#123; this.val = val; &#125;</span></span><br><span class="line"><span class="comment"> *     TreeNode(int val, TreeNode left, TreeNode right) &#123;</span></span><br><span class="line"><span class="comment"> *         this.val = val;</span></span><br><span class="line"><span class="comment"> *         this.left = left;</span></span><br><span class="line"><span class="comment"> *         this.right = right;</span></span><br><span class="line"><span class="comment"> *     &#125;</span></span><br><span class="line"><span class="comment"> * &#125;</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line">    <span class="keyword">public</span> TreeNode <span class="title function_">mergeTrees</span><span class="params">(TreeNode root1, TreeNode root2)</span> &#123;</span><br><span class="line">        <span class="comment">// 如果root1为空，则直接返回root2，表示第一棵树已经被完全合并到第二棵树中</span></span><br><span class="line">        <span class="keyword">if</span> (root1 == <span class="literal">null</span>) &#123;</span><br><span class="line">            <span class="keyword">return</span> root2;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="comment">// 如果root2为空，则直接返回root1，表示第二棵树已经被完全合并到第一棵树中</span></span><br><span class="line">        <span class="keyword">if</span> (root2 == <span class="literal">null</span>) &#123;</span><br><span class="line">            <span class="keyword">return</span> root1;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="comment">// 创建一个新的节点，其值为root1和root2的值之和，然后递归合并左右子树</span></span><br><span class="line">        <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">TreeNode</span>( root1.val + root2.val ,</span><br><span class="line">                mergeTrees(root1.left,root2.left),</span><br><span class="line">                mergeTrees(root1.right,root2.right));</span><br><span class="line"></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><img src="https://cdn.jsdelivr.net/gh/SanXiaoXing/Image@main/blog/SanXiaoXing_2024-06-24_22-21-44.png" alt="result"></p><h2 id="503-下一个更大元素-II"><a href="#503-下一个更大元素-II" class="headerlink" title="503. 下一个更大元素 II"></a><a href="https://leetcode.cn/problems/next-greater-element-ii/">503. 下一个更大元素 II</a></h2><h3 id="Ideas-1"><a href="#Ideas-1" class="headerlink" title="Ideas"></a>Ideas</h3><ol><li><strong>初始化</strong>：<ul><li>创建一个 <code>result</code> 数组，初始值全部设为 <code>-1</code>，表示如果某个元素没有找到下一个更大元素，则默认值为 <code>-1</code>。</li><li>创建一个栈 <code>stack</code> 用于存储元素的索引。</li></ul></li><li><strong>遍历数组</strong>：<ul><li>使用 <code>for</code> 循环遍历 <code>2 * n</code> 次，利用 <code>i % n</code> 模拟循环数组。</li><li>每次从 <code>nums</code> 数组中取出当前元素 <code>num</code>。</li></ul></li><li><strong>更新结果数组</strong>：<ul><li>使用 <code>while</code> 循环，当栈不为空且当前元素 <code>num</code> 大于栈顶元素对应的元素时，更新结果数组中栈顶元素对应的下一个更大元素为当前元素，并弹出栈顶。</li></ul></li><li><strong>压入栈</strong>：<ul><li>如果当前索引 <code>i</code> 小于数组长度 <code>n</code>，则将当前索引压入栈中。</li></ul></li></ol><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line">    <span class="keyword">public</span> <span class="type">int</span>[] nextGreaterElements(<span class="type">int</span>[] nums) &#123;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 数组长度</span></span><br><span class="line">        <span class="type">int</span> <span class="variable">n</span> <span class="operator">=</span> nums.length;</span><br><span class="line">        <span class="comment">// 结果数组，初始化为-1，表示没有下一个更大元素</span></span><br><span class="line">        <span class="type">int</span>[] result = <span class="keyword">new</span> <span class="title class_">int</span>[n];</span><br><span class="line">        Arrays.fill(result, -<span class="number">1</span>);</span><br><span class="line">        <span class="comment">// 使用栈来辅助寻找下一个更大元素</span></span><br><span class="line">        Stack&lt;Integer&gt; stack = <span class="keyword">new</span> <span class="title class_">Stack</span>&lt;&gt;();</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 遍历数组两次，以处理环形数组的特性</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> <span class="variable">i</span> <span class="operator">=</span> <span class="number">0</span>; i &lt; <span class="number">2</span> * n; i++) &#123;</span><br><span class="line">            <span class="comment">// 当前遍历到的元素</span></span><br><span class="line">            <span class="type">int</span> <span class="variable">num</span> <span class="operator">=</span> nums[i % n];</span><br><span class="line">            <span class="comment">// 如果栈不为空且栈顶元素小于当前元素，则栈顶元素的下一个更大元素为当前元素</span></span><br><span class="line">            <span class="keyword">while</span> (!stack.isEmpty() &amp;&amp; nums[stack.peek()] &lt; num) &#123;</span><br><span class="line">                result[stack.pop()] = num;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="comment">// 如果当前遍历位置小于原数组长度，则将位置入栈，用于后续寻找下一个更大元素</span></span><br><span class="line">            <span class="keyword">if</span> (i &lt; n) &#123;</span><br><span class="line">                stack.push(i);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 返回结果数组</span></span><br><span class="line">        <span class="keyword">return</span> result;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><img src="https://cdn.jsdelivr.net/gh/SanXiaoXing/Image@main/blog/SanXiaoXing_2024-06-24_22-08-49.png" alt="result"></p><h1 id="2024-06-23"><a href="#2024-06-23" class="headerlink" title="2024-06-23"></a>2024-06-23</h1><h2 id="456-132-模式"><a href="#456-132-模式" class="headerlink" title="456. 132 模式"></a><a href="https://leetcode.cn/problems/132-pattern/">456. 132 模式</a></h2><h3 id="Ideas-2"><a href="#Ideas-2" class="headerlink" title="Ideas"></a>Ideas</h3><ol><li><p>初始化一个空栈和一个 <code>third</code> 变量为 <code>Integer.MIN_VALUE</code>。</p></li><li><p>从后往前遍历数组：</p><ul><li>如果 <code>nums[i] &lt; third</code>，说明存在 <code>132</code> 模式的子序列，返回 <code>true</code>。</li><li>如果 <code>nums[i] &gt; stack.peek()</code>，不断弹出栈顶元素并更新 <code>third</code>，直到栈顶元素不再小于当前元素。</li><li>将当前元素压入栈。</li></ul></li><li><p>如果遍历完数组后没有找到符合条件的子序列，返回 <code>false</code>。</p></li></ol><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line">    <span class="keyword">public</span> <span class="type">boolean</span> <span class="title function_">find132pattern</span><span class="params">(<span class="type">int</span>[] nums)</span> &#123;</span><br><span class="line">        <span class="keyword">if</span> (nums == <span class="literal">null</span> || nums.length &lt; <span class="number">3</span>) &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        Stack&lt;Integer&gt; stack = <span class="keyword">new</span> <span class="title class_">Stack</span>&lt;&gt;();</span><br><span class="line">        <span class="type">int</span> <span class="variable">third</span> <span class="operator">=</span> Integer.MIN_VALUE;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 从后往前遍历数组</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> <span class="variable">i</span> <span class="operator">=</span> nums.length - <span class="number">1</span>; i &gt;= <span class="number">0</span>; i--) &#123;</span><br><span class="line">            <span class="keyword">if</span> (nums[i] &lt; third) &#123;</span><br><span class="line">                <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="comment">// 维护单调递减栈</span></span><br><span class="line">            <span class="keyword">while</span> (!stack.isEmpty() &amp;&amp; nums[i] &gt; stack.peek()) &#123;</span><br><span class="line">                third = stack.pop();</span><br><span class="line">            &#125;</span><br><span class="line">            stack.push(nums[i]);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><img src="https://cdn.jsdelivr.net/gh/SanXiaoXing/Image@main/blog/SanXiaoXing_2024-06-23_19-49-39.png" alt="result"></p><blockquote><ul><li><strong>时间复杂度</strong>: O(n)。每个元素最多被压入和弹出栈一次，因此总时间复杂度是线性的。</li><li><strong>空间复杂度</strong>: O(n)。在最坏情况下（严格递增的序列），栈需要存储所有的元素。</li></ul></blockquote><h2 id="520-检测大写字母"><a href="#520-检测大写字母" class="headerlink" title="520. 检测大写字母"></a><a href="https://leetcode.cn/problems/detect-capital/">520. 检测大写字母</a></h2><h3 id="Ideas-3"><a href="#Ideas-3" class="headerlink" title="Ideas"></a>Ideas</h3><ol><li><p>首先检查单词是否为空或只有一个字符，如果是，直接返回 <code>true</code>。</p></li><li><p>使用 <code>equals</code> 方法检查整个单词是否全部大写或全部小写。</p></li><li><p>使用 <code>Character.isUpperCase</code> 方法检查首字母是否大写，然后使用 <code>substring</code> 和 <code>equals</code> 方法检查剩余部分是否全部小写。</p></li><li><p>如果都不符合，返回 <code>false</code>。</p></li></ol><figure class="highlight java"><figcaption><span>title</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line">    <span class="keyword">public</span> <span class="type">boolean</span> <span class="title function_">detectCapitalUse</span><span class="params">(String word)</span> &#123;</span><br><span class="line">        <span class="comment">// 如果单词为空或只有一个字符，直接返回 true</span></span><br><span class="line">        <span class="keyword">if</span> (word == <span class="literal">null</span> || word.length() &lt;= <span class="number">1</span>) &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 检查是否全部大写</span></span><br><span class="line">        <span class="keyword">if</span> (word.equals(word.toUpperCase())) &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 检查是否全部小写</span></span><br><span class="line">        <span class="keyword">if</span> (word.equals(word.toLowerCase())) &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 检查是否只有首字母大写</span></span><br><span class="line">        <span class="keyword">if</span> (Character.isUpperCase(word.charAt(<span class="number">0</span>)) &amp;&amp; </span><br><span class="line">            word.substring(<span class="number">1</span>).equals(word.substring(<span class="number">1</span>).toLowerCase())) &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 如果都不符合，返回 false</span></span><br><span class="line">        <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><blockquote><ul><li><strong>时间复杂度</strong>: O(n)，其中 n 是字符串的长度。</li><li><strong>空间复杂度</strong>: O(n)，主要来自于字符串操作 <code>toUpperCase()</code> 和 <code>toLowerCase()</code></li></ul></blockquote><p><img src="https://cdn.jsdelivr.net/gh/SanXiaoXing/Image@main/blog/SanXiaoXing_2024-06-23_18-34-55.png" alt="result"></p><h2 id="519-随机翻转矩阵"><a href="#519-随机翻转矩阵" class="headerlink" title="519. 随机翻转矩阵"></a><a href="https://leetcode.cn/problems/random-flip-matrix/">519. 随机翻转矩阵</a></h2><h3 id="Ideas-4"><a href="#Ideas-4" class="headerlink" title="Ideas"></a>Ideas</h3><h4 id="1-初始化和数据表示"><a href="#1-初始化和数据表示" class="headerlink" title="1: 初始化和数据表示"></a>1: 初始化和数据表示</h4><ul><li>使用一个字典 <code>map</code> 记录已经翻转的坐标（避免使用额外的二维数组）。</li><li>使用一个变量 <code>total</code> 记录剩余可翻转的位置数量。</li></ul><h4 id="2-执行-flip-操作"><a href="#2-执行-flip-操作" class="headerlink" title="2: 执行 flip 操作"></a>2: 执行 <code>flip</code> 操作</h4><ul><li>使用随机数生成器在剩余可翻转的位置中选取一个随机下标 <code>x</code>。</li><li>判断下标<code>x</code>是否已经被翻转过：<ul><li>如果已被翻转，使用映射字典找到当前 <code>x</code> 实际对应的位置。</li></ul></li><li>更新映射字典，将当前 <code>x</code> 位置映射到末尾（减少多次随机选择重复位置）。</li><li>返回二维矩阵中的对应坐标 <code>[i, j]</code>。</li></ul><h4 id="3-重置操作"><a href="#3-重置操作" class="headerlink" title="3: 重置操作"></a>3: 重置操作</h4><ul><li>清空映射字典，并将 <code>total</code> 重置为 <code>m * n</code>。</li></ul><figure class="highlight java"><figcaption><span>title</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">private</span> <span class="type">int</span> m, n, total;</span><br><span class="line">    <span class="keyword">private</span> Map&lt;Integer, Integer&gt; map;</span><br><span class="line">    <span class="keyword">private</span> Random rand;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">public</span> <span class="title function_">Solution</span><span class="params">(<span class="type">int</span> m, <span class="type">int</span> n)</span> &#123;</span><br><span class="line">        <span class="built_in">this</span>.m = m;</span><br><span class="line">        <span class="built_in">this</span>.n = n;</span><br><span class="line">        <span class="built_in">this</span>.total = m * n;</span><br><span class="line">        <span class="built_in">this</span>.map = <span class="keyword">new</span> <span class="title class_">HashMap</span>&lt;&gt;();</span><br><span class="line">        <span class="built_in">this</span>.rand = <span class="keyword">new</span> <span class="title class_">Random</span>();</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">public</span> <span class="type">int</span>[] flip() &#123;</span><br><span class="line"></span><br><span class="line">        <span class="type">int</span> <span class="variable">x</span> <span class="operator">=</span> rand.nextInt(total);</span><br><span class="line">        total--;</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 查找 x 是否已经映射</span></span><br><span class="line">        <span class="type">int</span> <span class="variable">idx</span> <span class="operator">=</span> map.getOrDefault(x, x);</span><br><span class="line">        <span class="comment">// 将 x 映射到总计数末尾</span></span><br><span class="line">        map.put(x, map.getOrDefault(total, total));</span><br><span class="line"></span><br><span class="line">        <span class="comment">// 计算出二维矩阵的坐标</span></span><br><span class="line">        <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">int</span>[]&#123;idx / n, idx % n&#125;;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">reset</span><span class="params">()</span> &#123;</span><br><span class="line">        map.clear();</span><br><span class="line">        total = m * n;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * Your Solution object will be instantiated and called as such:</span></span><br><span class="line"><span class="comment"> * Solution obj = new Solution(m, n);</span></span><br><span class="line"><span class="comment"> * int[] param_1 = obj.flip();</span></span><br><span class="line"><span class="comment"> * obj.reset();</span></span><br><span class="line"><span class="comment"> */</span></span><br></pre></td></tr></table></figure><p><img src="https://cdn.jsdelivr.net/gh/SanXiaoXing/Image@main/blog/SanXiaoXing_2024-06-23_18-56-16.png" alt="result"></p><h1 id="2024-06-21"><a href="#2024-06-21" class="headerlink" title="2024-06-21"></a>2024-06-21</h1><h2 id="LCP-61-气温变化趋势"><a href="#LCP-61-气温变化趋势" class="headerlink" title="LCP 61. 气温变化趋势"></a><a href="https://leetcode.cn/problems/6CE719/">LCP 61. 气温变化趋势</a></h2><h3 id="Ideas-5"><a href="#Ideas-5" class="headerlink" title="Ideas"></a>Ideas</h3><ul><li><strong>计算气温变化趋势</strong>：对于每个地区，计算每一天与下一天的气温变化趋势。我们可以用一个数组来存储这些变化趋势。</li></ul><ul><li><strong>比较两个地区的气温变化趋势</strong>：遍历两个变化趋势数组，找到连续相同的最大天数。</li></ul><figure class="highlight java"><figcaption><span>title</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"></span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * 计算两个地区气温变化趋势相同的最大连续天数</span></span><br><span class="line"><span class="comment">     *</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> temperatureA 地区A的气温数组</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> temperatureB 地区B的气温数组</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@return</span> 两地气温变化趋势相同的最大连续天数</span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="keyword">public</span> <span class="type">int</span> <span class="title function_">temperatureTrend</span><span class="params">(<span class="type">int</span>[] temperatureA, <span class="type">int</span>[] temperatureB)</span> &#123;</span><br><span class="line">        <span class="type">int</span> <span class="variable">maxLength</span> <span class="operator">=</span> <span class="number">0</span>;     <span class="comment">// 最大连续天数</span></span><br><span class="line">        <span class="type">int</span> <span class="variable">currentLength</span> <span class="operator">=</span> <span class="number">0</span>; <span class="comment">// 当前连续天数</span></span><br><span class="line"></span><br><span class="line">        <span class="comment">// 遍历两个温度数组</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> <span class="variable">i</span> <span class="operator">=</span> <span class="number">0</span>; i &lt; temperatureA.length - <span class="number">1</span>; i++) &#123;</span><br><span class="line">            <span class="comment">// 计算第i天和第i+1天之间的气温变化趋势</span></span><br><span class="line">            <span class="type">int</span> <span class="variable">trendA</span> <span class="operator">=</span> getTrends(temperatureA[i], temperatureA[i + <span class="number">1</span>]);</span><br><span class="line">            <span class="type">int</span> <span class="variable">trendB</span> <span class="operator">=</span> getTrends(temperatureB[i], temperatureB[i + <span class="number">1</span>]);</span><br><span class="line"></span><br><span class="line">            <span class="comment">// 如果两个地区的气温变化趋势相同</span></span><br><span class="line">            <span class="keyword">if</span> (trendA == trendB) &#123;</span><br><span class="line">                currentLength++; <span class="comment">// 当前连续天数加1</span></span><br><span class="line">                maxLength = Math.max(maxLength, currentLength); <span class="comment">// 更新最大连续天数</span></span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                currentLength = <span class="number">0</span>; <span class="comment">// 重置当前连续天数</span></span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">return</span> maxLength; <span class="comment">// 返回最大连续天数</span></span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">/**</span></span><br><span class="line"><span class="comment">     * 计算两个温度之间的变化趋势</span></span><br><span class="line"><span class="comment">     *</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> A 第一天的气温</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@param</span> B 第二天的气温</span></span><br><span class="line"><span class="comment">     * <span class="doctag">@return</span> 变化趋势：0表示平稳，-1表示下降，1表示上升</span></span><br><span class="line"><span class="comment">     */</span></span><br><span class="line">    <span class="keyword">private</span> <span class="type">int</span> <span class="title function_">getTrends</span><span class="params">(<span class="type">int</span> A, <span class="type">int</span> B)</span> &#123;</span><br><span class="line">        <span class="keyword">if</span> (A == B) &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="number">0</span>; <span class="comment">// 平稳趋势</span></span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> A &lt; B ? -<span class="number">1</span> : <span class="number">1</span>; <span class="comment">// 上升趋势或下降趋势</span></span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">main</span><span class="params">(String[] args)</span> &#123;</span><br><span class="line">        <span class="type">Solution</span> <span class="variable">solution</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">Solution</span>();</span><br><span class="line">        <span class="type">int</span>[] temperatureA = &#123;<span class="number">21</span>, <span class="number">18</span>, <span class="number">18</span>, <span class="number">18</span>, <span class="number">31</span>&#125;; <span class="comment">// 地区A的气温数组</span></span><br><span class="line">        <span class="type">int</span>[] temperatureB = &#123;<span class="number">34</span>, <span class="number">32</span>, <span class="number">16</span>, <span class="number">16</span>, <span class="number">17</span>&#125;; <span class="comment">// 地区B的气温数组</span></span><br><span class="line"></span><br><span class="line">        <span class="comment">// 输出两地气温变化趋势相同的最大连续天数</span></span><br><span class="line">        System.out.println(solution.temperatureTrend(temperatureA, temperatureB));  <span class="comment">// 输出：2</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><img src="https://cdn.jsdelivr.net/gh/SanXiaoXing/Image@main/blog/SanXiaoXing_2024-06-21.png" alt="result"></p><h1 id="思考"><a href="#思考" class="headerlink" title="思考"></a>思考</h1><blockquote><p>随着不断深入学习，发现算法才是代码的唯一解，或者说是他的最优解。从而我开始逐步的进行力扣的刷题之路。</p></blockquote><p>随着公司压力的逐渐增大，我所承担的任务在难度和复杂度上都明显高于同组其他任务。然而，我并未获得应有的<code>激励</code>和<code>奖励</code>，这让我开始思考这份工作的付出与收益是否值得，于是我开始有了以快速提升自己从而得到更高的回报的内容。</p>]]></content>
    
    
    <summary type="html">每日刷力扣</summary>
    
    
    
    <category term="Leetcode" scheme="https://happy.sanxiaoxing.cn/categories/Leetcode/"/>
    
    
    <category term="Leetcode" scheme="https://happy.sanxiaoxing.cn/tags/Leetcode/"/>
    
  </entry>
  
  <entry>
    <title>Windows 安装美化的Oh-my-zsh超美终端</title>
    <link href="https://happy.sanxiaoxing.cn/posts/7011a3b2.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/7011a3b2.html</id>
    <published>2024-03-19T00:12:45.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<div class="note info flat"><p>由于新设备的到来，不可避免重新安装系统环境，由此就有了重装oh-my-zsh这个超级美化终端</p></div><div class="note danger disabled"><p>本人使用的是Win11 自带的终端，需要提前下载wsl ,管理员运行powershell执行<code>wsl install</code>下载</p><p>之后选择小企鹅的Ubuntu</p></div><div class="timeline undefined"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>安装zsh</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>clone oh-my-zsh</p></div></div><div class='timeline-item-content'><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh</span><br></pre></td></tr></table></figure></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>复制 .zshrc</p></div></div><div class='timeline-item-content'><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cp</span> ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc</span><br></pre></td></tr></table></figure></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>更改默认 Shell</p></div></div><div class='timeline-item-content'><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看正在使用的主题</span></span><br><span class="line"><span class="built_in">echo</span> <span class="comment">#SHELL</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看shell类型</span></span><br><span class="line"><span class="built_in">cat</span> /etc/shells</span><br><span class="line"></span><br><span class="line"><span class="comment"># 更改shell为zsh</span></span><br><span class="line">chsh -s /bin/zsh</span><br></pre></td></tr></table></figure></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>更换主题配置</p></div></div><div class='timeline-item-content'><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看oh-my-zsh自带主题</span></span><br><span class="line"><span class="built_in">cd</span> ~/.oh-my-zsh/themes &amp;&amp; <span class="built_in">ls</span></span><br><span class="line"></span><br><span class="line">vim ~/.zshrc</span><br><span class="line"></span><br><span class="line"><span class="comment"># 更改内容</span></span><br><span class="line">ZSH_THEME=<span class="string">&quot;cloud&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 更新配置</span></span><br><span class="line"><span class="built_in">source</span> ~/.zshrc</span><br></pre></td></tr></table></figure><ul><li>注意保存内容</li></ul></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>增加插件</p></div></div><div class='timeline-item-content'><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 进入插件部分</span></span><br><span class="line"><span class="built_in">cd</span> ~/.oh-my-zsh/custom/plugins/</span><br><span class="line"></span><br><span class="line"><span class="comment"># 克隆插件仓库</span></span><br><span class="line">git <span class="built_in">clone</span> https://github.com/zsh-users/zsh-syntax-highlighting.git  <span class="comment">#高亮仓库</span></span><br><span class="line">git <span class="built_in">clone</span> https://github.com/zsh-users/zsh-autosuggestions  <span class="comment">#代码提示仓库</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 更改内容</span></span><br><span class="line">vim ~/.zshrc</span><br><span class="line"></span><br><span class="line"><span class="comment"># 更改内容</span></span><br><span class="line">plugins=(</span><br><span class="line">git</span><br><span class="line">zsh-syntax-highlighting</span><br><span class="line">zsh-autosuggestions</span><br><span class="line">)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 更新配置</span></span><br><span class="line"><span class="built_in">source</span> ~/.zshrc</span><br></pre></td></tr></table></figure><p>最终展示</p><p><img src="https://cdn.jsdelivr.net/gh/SanXiaoXing/Image/Photo/SanXiaoXing_2024-03-19_00-38-09.png" alt="SanXiaoXing"></p></div></div></div>]]></content>
    
    
      
      
    <summary type="html">&lt;div class=&quot;note info flat&quot;&gt;&lt;p&gt;由于新设备的到来，不可避免重新安装系统环境，由此就有了重装oh-my-zsh这个超级美化终端&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;note danger disabled&quot;&gt;&lt;p&gt;本人使用的是Win11 自带</summary>
      
    
    
    
    <category term="Windows" scheme="https://happy.sanxiaoxing.cn/categories/Windows/"/>
    
    
    <category term="Windows" scheme="https://happy.sanxiaoxing.cn/tags/Windows/"/>
    
  </entry>
  
  <entry>
    <title>局域网git创建本地仓库</title>
    <link href="https://happy.sanxiaoxing.cn/posts/c0981437.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/c0981437.html</id>
    <published>2024-03-01T20:37:02.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<div class="note success no-icon flat"><h3 id="仅供个人使用，仅限于局域网内的win电脑"><a href="#仅供个人使用，仅限于局域网内的win电脑" class="headerlink" title="仅供个人使用，仅限于局域网内的win电脑"></a>仅供个人使用，仅限于局域网内的win电脑</h3></div><div class="timeline undefined"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>配置公开版本库</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>配置服务端</p></div></div><div class='timeline-item-content'><ul><li>在服务器端的win电脑上床架一个文件夹（这里使用<strong>TestGit</strong>进行示例）</li><li>设置文件夹为共享文件夹</li></ul><p><img src="https://cdn.jsdelivr.net/gh/SanXiaoXing/Image/Photo/SanXiaoXing_2024-03-02_18-12-49.png" alt="share_file"></p><ul><li>将文件夹共享用户为<strong>Everyone</strong></li></ul><p><img src="https://cdn.jsdelivr.net/gh/SanXiaoXing/Image/Photo/SanXiaoXing_2024-03-02_18-13-12.png" alt="share_everyone"></p><ul><li><p>设置好后会有“网络路径”，留存备用</p></li><li><p>在此文件夹内创建一个裸仓库，只需使用命令<code>git init --bare filename</code> 此<code>filename</code>为需要设置的仓库名字</p></li></ul></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>配置客户端</p></div></div><div class='timeline-item-content'><ul><li><strong>映射网络驱动器：</strong>客户端右键我的电脑–&gt;映射网络驱动器，将服务器端的步骤3中的网络路径进行添加至选择框中</li><li><img src="https://cdn.jsdelivr.net/gh/SanXiaoXing/Image/Photo/Snipaste_2024-03-02_18-21-25.png" alt="network"></li><li>创建客户端的仓库，初始化，使用git全套<code>git init</code>, <code>git remote</code>, <code>git add .</code></li><li>此时的<code>git remote add origin y:\\TestGit</code> 仓库直接执行即可</li></ul></div></div></div>]]></content>
    
    
      
      
    <summary type="html">&lt;div class=&quot;note success no-icon flat&quot;&gt;&lt;h3 id=&quot;仅供个人使用，仅限于局域网内的win电脑&quot;&gt;&lt;a href=&quot;#仅供个人使用，仅限于局域网内的win电脑&quot; class=&quot;headerlink&quot; title=&quot;仅供个人使用，仅限于局域网</summary>
      
    
    
    
    <category term="git" scheme="https://happy.sanxiaoxing.cn/categories/git/"/>
    
    
    <category term="git" scheme="https://happy.sanxiaoxing.cn/tags/git/"/>
    
  </entry>
  
  <entry>
    <title>我的图床方案</title>
    <link href="https://happy.sanxiaoxing.cn/posts/e8b64c0.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/e8b64c0.html</id>
    <published>2023-12-29T21:22:54.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<div class="note red icon-padding flat"><i class="note-icon fas fa-photo-film"></i><p>这里简单介绍一下我自己的图床方案，此方案免费但加载可能会比较慢</p><p>我使用的是<code>picGo</code> + <code>Github</code> + <code>jsdeliver</code> 的方案，目前是加载比较慢，但是能接受</p></div><h1 id="图床准备"><a href="#图床准备" class="headerlink" title="图床准备"></a>图床准备</h1><div class="timeline orange"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>图床准备</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>Github创建公共空仓库</p></div></div><div class='timeline-item-content'><p>创建一个<code>公共</code> 的一个仓库，一定是<code>公共</code>的仓库。</p></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>准备一个Github的token</p></div></div><div class='timeline-item-content'><p>点击<code>github</code> 头像，点击 <code>setting</code> -&gt; <code>Developer settings</code> 在左侧最下面。</p><p>然后点击 <code>Tokens(classic)</code>  -&gt; <code>Generate new token</code>，如图</p><p><img src="https://cdn.jsdelivr.net/gh/SanXiaoXing/Image/github_token.png" alt="github_token"></p><p>填写<code>Node</code> 并勾选<code>repo</code> 多选框，直接生成即可，注意保存和保护token</p></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>下载picGo</p></div></div><div class='timeline-item-content'><p>点击 <a href="https://picgo.github.io/PicGo-Doc/zh/guide/#picgo-is-here">下载<code>picGo</code>软件</a></p><p>配置Github设置，仓库名，分支以及其他</p></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>配置Github图床自定义域名</p></div></div><div class='timeline-item-content'><p>将图床的自定义域名更改为这个</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://cdn.jsdelivr.net/gh/&quot;user&quot;/&quot;repo&quot;@main</span><br></pre></td></tr></table></figure><p>其中的<code>user</code>换成 GitHub 的用户名；</p><p><code>repo</code>  换成设定 Github 的仓库名。（里面的引号不要，有几个大可爱加的有引号）</p></div></div></div><a class="button no-text-decoration" href='https://github.com/Molunerfinn/PicGo/releases' title='下载picGo'><i class='anzhiyufont anzhiyu-icon-bolt'></i>下载picGo</a>]]></content>
    
    
      
      
    <summary type="html">&lt;div class=&quot;note red icon-padding flat&quot;&gt;&lt;i class=&quot;note-icon fas fa-photo-film&quot;&gt;&lt;/i&gt;&lt;p&gt;这里简单介绍一下我自己的图床方案，此方案免费但加载可能会比较慢&lt;/p&gt;
&lt;p&gt;我使用的是&lt;code&gt;picG</summary>
      
    
    
    
    <category term="hexo" scheme="https://happy.sanxiaoxing.cn/categories/hexo/"/>
    
    
    <category term="hexo" scheme="https://happy.sanxiaoxing.cn/tags/hexo/"/>
    
  </entry>
  
  <entry>
    <title>圣诞节快乐</title>
    <link href="https://happy.sanxiaoxing.cn/posts/372ff7a.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/372ff7a.html</id>
    <published>2023-12-25T22:58:29.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<div align="center" class="aspect-ratio">  <iframe    src="https://player.bilibili.com/player.html?aid=835090903&&page=1&as_wide=1&high_quality=1&danmaku=0"    scrolling="no"    border="0"    frameborder="no"    framespacing="0"    high_quality="1"    danmaku="1"    allowfullscreen="true"  ></iframe></div>]]></content>
    
    
      
      
    <summary type="html">&lt;div align=&quot;center&quot; class=&quot;aspect-ratio&quot;&gt;
  &lt;iframe
    src=&quot;https://player.bilibili.com/player.html?aid=835090903&amp;&amp;page=1&amp;as_wide=1&amp;high_qu</summary>
      
    
    
    
    <category term="节日快乐" scheme="https://happy.sanxiaoxing.cn/categories/%E8%8A%82%E6%97%A5%E5%BF%AB%E4%B9%90/"/>
    
    
    <category term="节日快乐" scheme="https://happy.sanxiaoxing.cn/tags/%E8%8A%82%E6%97%A5%E5%BF%AB%E4%B9%90/"/>
    
  </entry>
  
  <entry>
    <title>修改anzhiyu配置</title>
    <link href="https://happy.sanxiaoxing.cn/posts/a6a24535.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/a6a24535.html</id>
    <published>2023-12-18T16:48:51.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<h1 id="发现问题"><a href="#发现问题" class="headerlink" title="发现问题"></a>发现问题</h1><div class="timeline undefined"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>发现问题</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>群里有人询问问题</p></div></div><div class='timeline-item-content'><p>发现群里有人问<code>转载</code>和<code>原创</code>怎么改，我想这个不是很简单嘛，我就稍微修改了一下</p></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>发现修改问题</p></div></div><div class='timeline-item-content'><p>修改完之后，我发现标题的<code>转载</code>确实更改了，但是下面的协议转发那边人名也改了</p></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>解决思路</p></div></div><div class='timeline-item-content'><p>找到代码，只进行<code>转载</code>判断，不进行作者的判断</p></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>步骤一</p></div></div><div class='timeline-item-content'><p>修改<code>[Blog]\themes\anzhiyu\layout\includes\header\post-info.pug</code><br>修改文件里面的5-8行，我这里直接进行注释，在下面进行修改</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">- let comments = theme.comments</span><br><span class="line">#post-info</span><br><span class="line">  #post-firstinfo</span><br><span class="line">    .meta-firstline</span><br><span class="line">      //- if (page.copyright_author &amp;&amp; page.copyright_author !== config.author)</span><br><span class="line">      //-   a.post-meta-original 转载</span><br><span class="line">      //- else </span><br><span class="line">      //-   a.post-meta-original 原创</span><br><span class="line">      if (page.copyright == true)</span><br><span class="line">        a.post-meta-original 转载</span><br><span class="line">      else </span><br><span class="line">        a.post-meta-original 原创</span><br><span class="line">      if (theme.post_meta.post.categories &amp;&amp; page.categories &amp;&amp; page.categories.data.length &gt; 0)</span><br><span class="line">        span.post-meta-categories</span><br><span class="line">          if (theme.post_meta.post.date_type)</span><br><span class="line">            span.post-meta-separator</span><br></pre></td></tr></table></figure></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>步骤二</p></div></div><div class='timeline-item-content'><p>修改<code>[Blog]\themes\anzhiyu\layout\includes\post\post-copyright.pug</code><br>修改文件里面的18行，我这里直接进行注释，在下面进行修改</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">if (page.copyright == true)   // 修改这一行,误导性操作，后面的注释不能加，复制注释前的文字即可</span><br><span class="line">  a.post-copyright__reprint(title=&quot;该文章为转载文章，注意版权协议&quot; href=url_for(url)) 转载</span><br><span class="line">else</span><br><span class="line">  a.post-copyright__original(title=&quot;该文章为原创文章，注意版权协议&quot; href=url_for(url)) 原创</span><br><span class="line">a.post-copyright-title</span><br><span class="line">  span(onclick=`rm.copyPageUrl(&#x27;$&#123;theme.post_copyright.decode ? decodeURI(url) : url&#125;&#x27;)`)=pageTitle</span><br></pre></td></tr></table></figure></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>修改完成之后</p></div></div><div class='timeline-item-content'><p>改完之后，下面的名字不会进行改变了，而且也变成了<code>转载</code><br>还是需要在文章的title里面进行添加<code>copyright: true</code>以及其他配置<br>完整的内容如下：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: 标题</span><br><span class="line">date: 2023-12-18 16:48:51</span><br><span class="line">tags:</span><br><span class="line"><span class="bullet">    -</span> hexo</span><br><span class="line"><span class="bullet">    -</span> anzhiyu</span><br><span class="line">categories:</span><br><span class="line"><span class="bullet">    -</span> hexo</span><br><span class="line"><span class="bullet">    -</span> anzhiyu</span><br><span class="line">comments: true</span><br><span class="line">cover: https://cdn.jsdelivr.net/gh/SanXiaoXing/Image@main/uwp3766955.jpeg</span><br><span class="line">copyright: true</span><br><span class="line">copyright<span class="emphasis">_author_</span>href: https://blog.anheyu.com/</span><br><span class="line"><span class="section">copyright<span class="emphasis">_url: https://blog.anheyu.com/posts/d50a.html</span></span></span><br><span class="line"><span class="emphasis"><span class="section">---</span></span></span><br></pre></td></tr></table></figure></div></div></div>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;发现问题&quot;&gt;&lt;a href=&quot;#发现问题&quot; class=&quot;headerlink&quot; title=&quot;发现问题&quot;&gt;&lt;/a&gt;发现问题&lt;/h1&gt;&lt;div class=&quot;timeline undefined&quot;&gt;&lt;div class=&#39;timeline-item headlin</summary>
      
    
    
    
    <category term="hexo" scheme="https://happy.sanxiaoxing.cn/categories/hexo/"/>
    
    <category term="anzhiyu" scheme="https://happy.sanxiaoxing.cn/categories/hexo/anzhiyu/"/>
    
    
    <category term="hexo" scheme="https://happy.sanxiaoxing.cn/tags/hexo/"/>
    
    <category term="anzhiyu" scheme="https://happy.sanxiaoxing.cn/tags/anzhiyu/"/>
    
  </entry>
  
  <entry>
    <title>安知鱼主题标签 Tag Plugins</title>
    <link href="https://happy.sanxiaoxing.cn/posts/de7f0b92.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/de7f0b92.html</id>
    <published>2023-12-18T15:55:44.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<div class="note blue anzhiyufont anzhiyu-icon-bullhorn simple"><p><code>AnZhiYu主题</code>中大部分标签移植于<a href="https://akilar.top/">店长</a>的<a href="https://www.npmjs.com/package/hexo-butterfly-tag-plugins-plus">hexo-butterfly-tag-plugins-plus</a>，转载请注明来自<a href="https://blog.anheyu.com/posts/d50a.html">安知鱼</a></p></div><h2 id="段落文本-p"><a href="#段落文本-p" class="headerlink" title="段落文本 p"></a>段落文本 p</h2><div class="tabs" id="p"><ul class="nav-tabs"><button type="button" class="tab " data-href="p-1">标签语法</button><button type="button" class="tab " data-href="p-2">配置参数</button><button type="button" class="tab  active" data-href="p-3">样式预览</button><button type="button" class="tab " data-href="p-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="p-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% p 样式参数(参数以空格划分), 文本内容 %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="p-2"><ol><li>字体: logo, code</li><li>颜色: <span class='p red'>red</span>,<span class='p yellow'>yellow</span>,<span class='p green'>green</span>,<span class='p cyan'>cyan</span>,<span class='p blue'>blue</span>,<span class='p gray'>gray</span></li><li>大小: small, h4, h3, h2, h1, large, huge, ultra</li><li>对齐方向: left, center, right</li></ol></div><div class="tab-item-content active" id="p-3"><ul><li>彩色文字<br>在一段话中方便插入各种颜色的标签，包括：<p class='p red'>红色</p>、<p class='p yellow'>黄色</p>、<p class='p green'>绿色</p>、<p class='p cyan'>青色</p>、<p class='p blue'>蓝色</p>、<p class='p gray'>灰色</p>。</li><li>超大号文字<br>文档「开始」页面中的标题部分就是超大号文字。<p class='p center logo large'>Volantis</p><p class='p center small'>A Wonderful Theme for Hexo</p></li></ul></div><div class="tab-item-content" id="p-4"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">-</span> 彩色文字</span><br><span class="line">  在一段话中方便插入各种颜色的标签，包括：&#123;% p red, 红色 %&#125;、&#123;% p yellow, 黄色 %&#125;、&#123;% p green, 绿色 %&#125;、&#123;% p cyan, 青色 %&#125;、&#123;% p blue, 蓝色 %&#125;、&#123;% p gray, 灰色 %&#125;。</span><br><span class="line"><span class="bullet">-</span> 超大号文字</span><br><span class="line">  文档「开始」页面中的标题部分就是超大号文字。</span><br><span class="line">  &#123;% p center logo large, Volantis %&#125;</span><br><span class="line">  &#123;% p center small, A Wonderful Theme for Hexo %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="行内文本-span"><a href="#行内文本-span" class="headerlink" title="行内文本 span"></a>行内文本 span</h2><div class="tabs" id="span"><ul class="nav-tabs"><button type="button" class="tab " data-href="span-1">标签语法</button><button type="button" class="tab " data-href="span-2">配置参数</button><button type="button" class="tab  active" data-href="span-3">样式预览</button><button type="button" class="tab " data-href="span-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="span-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% span 样式参数(参数以空格划分), 文本内容 %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="span-2"><ol><li>字体: logo, code</li><li>颜色: <span class='p red'>red</span>,<span class='p yellow'>yellow</span>,<span class='p green'>green</span>,<span class='p cyan'>cyan</span>,<span class='p blue'>blue</span>,<span class='p gray'>gray</span></li><li>大小: small, h4, h3, h2, h1, large, huge, ultra</li><li>对齐方向: left, center, right</li></ol></div><div class="tab-item-content active" id="span-3"><ul><li>彩色文字<br>在一段话中方便插入各种颜色的标签，包括：<span class='p red'>红色</span>、<span class='p yellow'>黄色</span>、<span class='p green'>绿色</span>、<span class='p cyan'>青色</span>、<span class='p blue'>蓝色</span>、<span class='p gray'>灰色</span>。</li><li>超大号文字<br>文档「开始」页面中的标题部分就是超大号文字。<br><span class='p center logo large'>Volantis</span><br><span class='p center small'>A Wonderful Theme for Hexo</span></li></ul></div><div class="tab-item-content" id="span-4"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">-</span> 彩色文字</span><br><span class="line">  在一段话中方便插入各种颜色的标签，包括：&#123;% span red, 红色 %&#125;、&#123;% span yellow, 黄色 %&#125;、&#123;% span green, 绿色 %&#125;、&#123;% span cyan, 青色 %&#125;、&#123;% span blue, 蓝色 %&#125;、&#123;% span gray, 灰色 %&#125;。</span><br><span class="line"><span class="bullet">-</span> 超大号文字</span><br><span class="line">  文档「开始」页面中的标题部分就是超大号文字。</span><br><span class="line">  &#123;% span center logo large, Volantis %&#125;</span><br><span class="line">  &#123;% span center small, A Wonderful Theme for Hexo %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="行内文本样式-text"><a href="#行内文本样式-text" class="headerlink" title="行内文本样式 text"></a>行内文本样式 text</h2><div class="tabs" id="text"><ul class="nav-tabs"><button type="button" class="tab " data-href="text-1">标签语法</button><button type="button" class="tab  active" data-href="text-2">样式预览</button><button type="button" class="tab " data-href="text-3">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="text-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">&#123;% u 文本内容 %&#125;</span><br><span class="line">&#123;% emp 文本内容 %&#125;</span><br><span class="line">&#123;% wavy 文本内容 %&#125;</span><br><span class="line">&#123;% del 文本内容 %&#125;</span><br><span class="line">&#123;% kbd 文本内容 %&#125;</span><br><span class="line">&#123;% psw 文本内容 %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content active" id="text-2"><ol><li>带 <u>下划线</u> 的文本</li><li>带 <emp>着重号</emp> 的文本</li><li>带 <wavy>波浪线</wavy> 的文本</li><li>带 <del>删除线</del> 的文本</li><li>键盘样式的文本 <kbd>command</kbd> + <kbd>D</kbd></li><li>密码样式的文本：<psw>这里没有验证码</psw></li></ol></div><div class="tab-item-content" id="text-3"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">1.</span> 带 &#123;% u 下划线 %&#125; 的文本</span><br><span class="line"><span class="bullet">2.</span> 带 &#123;% emp 着重号 %&#125; 的文本</span><br><span class="line"><span class="bullet">3.</span> 带 &#123;% wavy 波浪线 %&#125; 的文本</span><br><span class="line"><span class="bullet">4.</span> 带 &#123;% del 删除线 %&#125; 的文本</span><br><span class="line"><span class="bullet">5.</span> 键盘样式的文本 &#123;% kbd command %&#125; + &#123;% kbd D %&#125;</span><br><span class="line"><span class="bullet">6.</span> 密码样式的文本：&#123;% psw 这里没有验证码 %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="分栏-tab"><a href="#分栏-tab" class="headerlink" title="分栏 tab"></a>分栏 tab</h2><div class="note blue anzhiyufont anzhiyu-icon-bullhorn simple"><p>分栏支持内置阿里图标，如果开启了 <code>fontawesome</code>可以使用 fontawesome 的图标，否则只能使用默内置阿里图标</p></div><div class="tabs" id="folding"><ul class="nav-tabs"><button type="button" class="tab " data-href="folding-1">标签语法</button><button type="button" class="tab " data-href="folding-2">配置参数</button><button type="button" class="tab  active" data-href="folding-3">样式预览</button><button type="button" class="tab " data-href="folding-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="folding-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">&#123;% tabs Unique name, [index] %&#125;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab [Tab caption] [@icon] --&gt;</span><br><span class="line"></span><br><span class="line">Any content (support inline tags too).</span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtabs %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="folding-2"><ol><li>Unique name :<ul><li>选项卡块标签的唯一名称，不带逗号。</li><li>将在#id 中用作每个标签及其索引号的前缀。</li><li>如果名称中包含空格，则对于生成#id，所有空格将由破折号代替。</li><li>仅当前帖子/页面的 URL 必须是唯一的！</li></ul></li><li>[index]:<ul><li>活动选项卡的索引号。</li><li>如果未指定，将选择第一个标签（1）。</li><li>如果 index 为-1，则不会选择任何选项卡。</li><li>可选参数。</li></ul></li><li>[Tab caption]:<ul><li>当前选项卡的标题。</li><li>如果未指定标题，则带有制表符索引后缀的唯一名称将用作制表符的标题。</li><li>如果未指定标题，但指定了图标，则标题将为空。</li><li>可选参数。</li></ul></li><li>[@icon]: - FontAwesome 图标名称（全名，看起来像“ fas fa-font”） - 可以指定带空格或不带空格； - 例如’Tab caption @icon’ 和 ‘Tab caption@icon’. - 可选参数。</li></ol></div><div class="tab-item-content active" id="folding-3"><div class="note primary flat"><p>Demo 1 - 预设选择第一个【默认】</p></div><div class="tabs" id="test1"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="test1-1">test1 1</button><button type="button" class="tab " data-href="test1-2">test1 2</button><button type="button" class="tab " data-href="test1-3">test1 3</button></ul><div class="tab-contents"><div class="tab-item-content active" id="test1-1"><p><strong>This is Tab 1.</strong></p></div><div class="tab-item-content" id="test1-2"><p><strong>This is Tab 2.</strong></p></div><div class="tab-item-content" id="test1-3"><p><strong>This is Tab 3.</strong></p></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><div class="note primary flat"><p>Demo 2 - 预设选择 tabs</p></div><div class="tabs" id="test2"><ul class="nav-tabs"><button type="button" class="tab " data-href="test2-1">test2 1</button><button type="button" class="tab " data-href="test2-2">test2 2</button><button type="button" class="tab  active" data-href="test2-3">test2 3</button></ul><div class="tab-contents"><div class="tab-item-content" id="test2-1"><p><strong>This is Tab 1.</strong></p></div><div class="tab-item-content" id="test2-2"><p><strong>This is Tab 2.</strong></p></div><div class="tab-item-content active" id="test2-3"><p><strong>This is Tab 3.</strong></p></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><div class="note primary flat"><p>Demo 3 - 没有预设值</p></div><div class="tabs" id="test3"><ul class="nav-tabs no-default"><button type="button" class="tab " data-href="test3-1">test3 1</button><button type="button" class="tab " data-href="test3-2">test3 2</button><button type="button" class="tab " data-href="test3-3">test3 3</button></ul><div class="tab-contents"><div class="tab-item-content" id="test3-1"><p><strong>This is Tab 1.</strong></p></div><div class="tab-item-content" id="test3-2"><p><strong>This is Tab 2.</strong></p></div><div class="tab-item-content" id="test3-3"><p><strong>This is Tab 3.</strong></p></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><div class="note primary flat"><p>Demo 4 - 自定义 Tab 名 + 只有 icon + icon 和 Tab 名</p></div><div class="tabs" id="test4"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="test4-1">第一个Tab</button><button type="button" class="tab " data-href="test4-2"><i class="anzhiyufont anzhiyu-icon-oranges" style="text-align: center;"></i></button><button type="button" class="tab " data-href="test4-3"><i class="anzhiyufont anzhiyu-icon-oranges"></i>炸弹</button></ul><div class="tab-contents"><div class="tab-item-content active" id="test4-1"><p><strong>tab 名字为第一个 Tab</strong></p></div><div class="tab-item-content" id="test4-2"><p><strong>只有图标 没有 Tab 名字</strong></p></div><div class="tab-item-content" id="test4-3"><p><strong>名字+icon</strong></p></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div></div><div class="tab-item-content" id="folding-4"><p><div class="note primary flat"><p>Demo 1 - 预设选择第一个【默认】</p></div><br><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">&#123;% tabs test1 %&#125;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 1.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 2.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 3.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtabs %&#125;</span><br></pre></td></tr></table></figure></p><p><div class="note primary flat"><p>Demo 2 - 预设选择 tabs</p></div><br><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">&#123;% tabs test2, 3 %&#125;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 1.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 2.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 3.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtabs %&#125;</span><br></pre></td></tr></table></figure></p><p><div class="note primary flat"><p>Demo 3 - 没有预设值</p></div><br><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">&#123;% tabs test3, -1 %&#125;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 1.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 2.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**This is Tab 3.**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtabs %&#125;</span><br></pre></td></tr></table></figure></p><p><div class="note primary flat"><p>Demo 4 - 自定义 Tab 名 + 只有 icon + icon 和 Tab 名</p></div><br><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">&#123;% tabs test4 %&#125;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab 第一个Tab --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**tab 名字为第一个 Tab**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab @fab fa-apple-pay --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**只有图标 没有 Tab 名字**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- tab 炸弹@fas fa-bomb --&gt;</span><br><span class="line"></span><br><span class="line"><span class="strong">**名字+icon**</span></span><br><span class="line"></span><br><span class="line">&lt;!-- endtab --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtabs %&#125;</span><br></pre></td></tr></table></figure></p></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="按钮-btns"><a href="#按钮-btns" class="headerlink" title="按钮 btns"></a>按钮 btns</h2><div class="tabs" id="btns"><ul class="nav-tabs"><button type="button" class="tab " data-href="btns-1">标签语法</button><button type="button" class="tab " data-href="btns-2">参数配置</button><button type="button" class="tab  active" data-href="btns-3">样式预览</button><button type="button" class="tab " data-href="btns-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="btns-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#123;% btns 样式参数 %&#125;</span><br><span class="line">&#123;% cell 标题, 链接, 图片或者图标 %&#125;</span><br><span class="line">&#123;% cell 标题, 链接, 图片或者图标 %&#125;</span><br><span class="line">&#123;% endbtns %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="btns-2"><ol><li>圆角样式：rounded, circle</li><li>增加文字样式：可以在容器内增加 <code>&lt;b&gt;标题&lt;/b&gt;</code>和<code>&lt;p&gt;描述文字&lt;/p&gt;</code></li><li>布局方式：<br>默认为自动宽度，适合视野内只有一两个的情况。</li></ol><div class="table-container"><table><thead><tr><th style="text-align:left">参数</th><th style="text-align:left">含义</th></tr></thead><tbody><tr><td style="text-align:left">wide</td><td style="text-align:left">宽一点的按钮</td></tr><tr><td style="text-align:left">fill</td><td style="text-align:left">填充布局，自动铺满至少一行，多了会换行</td></tr><tr><td style="text-align:left">center</td><td style="text-align:left">居中，按钮之间是固定间距</td></tr><tr><td style="text-align:left">around</td><td style="text-align:left">居中分散</td></tr><tr><td style="text-align:left">grid2</td><td style="text-align:left">等宽最多 2 列，屏幕变窄会适当减少列数</td></tr><tr><td style="text-align:left">grid3</td><td style="text-align:left">等宽最多 3 列，屏幕变窄会适当减少列数</td></tr><tr><td style="text-align:left">grid4</td><td style="text-align:left">等宽最多 4 列，屏幕变窄会适当减少列数</td></tr><tr><td style="text-align:left">grid5</td><td style="text-align:left">等宽最多 5 列，屏幕变窄会适当减少列数</td></tr></tbody></table></div></div><div class="tab-item-content active" id="btns-3"><ol><li>如果需要显示类似「团队成员」之类的一组含有头像的链接：</li></ol><div class="btns circle grid5">            <a class="button no-text-decoration" href='https://xaoxuu.com' title='xaoxuu'><img src='https://bu.dusays.com/2023/06/01/64787e6a5816d.png'>xaoxuu</a><a class="button no-text-decoration" href='https://xaoxuu.com' title='xaoxuu'><img src='https://bu.dusays.com/2023/06/01/64787e6a5816d.png'>xaoxuu</a><a class="button no-text-decoration" href='https://xaoxuu.com' title='xaoxuu'><img src='https://bu.dusays.com/2023/06/01/64787e6a5816d.png'>xaoxuu</a><a class="button no-text-decoration" href='https://xaoxuu.com' title='xaoxuu'><img src='https://bu.dusays.com/2023/06/01/64787e6a5816d.png'>xaoxuu</a><a class="button no-text-decoration" href='https://xaoxuu.com' title='xaoxuu'><img src='https://bu.dusays.com/2023/06/01/64787e6a5816d.png'>xaoxuu</a>          </div><ol><li>或者含有图标的按钮：</li></ol><div class="btns rounded grid5">            <a class="button no-text-decoration" href='/' title='下载源码'><i class='anzhiyufont anzhiyu-icon-bolt'></i>下载源码</a><a class="button no-text-decoration" href='/' title='查看文档'><i class='anzhiyufont anzhiyu-icon-book'></i>查看文档</a>          </div><ol><li>圆形图标 + 标题 + 描述 + 图片 + 网格 5 列 + 居中</li></ol><div class="btns circle center grid5">            <a href='https://apps.apple.com/cn/app/heart-mate-pro-hrm-utility/id1463348922?ls=1' class="no-text-decoration"><i class='anzhiyufont anzhiyu-icon-heartbeat'></i><b>心率管家</b><p class='p red'>专业版</p><img src='https://cdn1.tianli0.top/gh/xaoxuu/cdn-assets/qrcode/heartmate_pro.png'></a><a href='https://apps.apple.com/cn/app/heart-mate-lite-hrm-utility/id1475747930?ls=1' class="no-text-decoration"><i class='anzhiyufont anzhiyu-icon-heartbeat'></i><b>心率管家</b><p class='p green'>免费版</p><img src='https://cdn1.tianli0.top/gh/xaoxuu/cdn-assets/qrcode/heartmate_lite.png'></a>          </div></div><div class="tab-item-content" id="btns-4"><ol><li>如果需要显示类似「团队成员」之类的一组含有头像的链接：</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% btns circle grid5 %&#125;</span><br><span class="line">&#123;% cell xaoxuu, https://xaoxuu.com, https://bu.dusays.com/2023/06/01/64787e6a5816d.png %&#125;</span><br><span class="line">&#123;% cell xaoxuu, https://xaoxuu.com, https://bu.dusays.com/2023/06/01/64787e6a5816d.png %&#125;</span><br><span class="line">&#123;% cell xaoxuu, https://xaoxuu.com, https://bu.dusays.com/2023/06/01/64787e6a5816d.png %&#125;</span><br><span class="line">&#123;% cell xaoxuu, https://xaoxuu.com, https://bu.dusays.com/2023/06/01/64787e6a5816d.png %&#125;</span><br><span class="line">&#123;% cell xaoxuu, https://xaoxuu.com, https://bu.dusays.com/2023/06/01/64787e6a5816d.png %&#125;</span><br><span class="line">&#123;% endbtns %&#125;</span><br></pre></td></tr></table></figure><ol><li>或者含有图标的按钮：</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#123;% btns rounded grid5 %&#125;</span><br><span class="line">&#123;% cell 下载源码, /, anzhiyufont anzhiyu-icon-bolt %&#125;</span><br><span class="line">&#123;% cell 查看文档, /, anzhiyufont anzhiyu-icon-book %&#125;</span><br><span class="line">&#123;% endbtns %&#125;</span><br></pre></td></tr></table></figure><ol><li>圆形图标 + 标题 + 描述 + 图片 + 网格 5 列 + 居中</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">&#123;% btns circle center grid5 %&#125;</span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">&#x27;https://apps.apple.com/cn/app/heart-mate-pro-hrm-utility/id1463348922?ls=1&#x27;</span> <span class="attr">class</span>=<span class="string">&quot;no-text-decoration&quot;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">i</span> <span class="attr">class</span>=<span class="string">&#x27;anzhiyufont anzhiyu-icon-heartbeat&#x27;</span>&gt;</span></span><span class="language-xml"><span class="tag">&lt;/<span class="name">i</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">b</span>&gt;</span></span>心率管家<span class="language-xml"><span class="tag">&lt;/<span class="name">b</span>&gt;</span></span></span><br><span class="line">&#123;% p red, 专业版 %&#125;</span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">img</span> <span class="attr">src</span>=<span class="string">&#x27;https://bu.dusays.com/2023/06/01/64787e2a1347c.png&#x27;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">a</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">&#x27;https://apps.apple.com/cn/app/heart-mate-lite-hrm-utility/id1475747930?ls=1&#x27;</span> <span class="attr">class</span>=<span class="string">&quot;no-text-decoration&quot;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">i</span> <span class="attr">class</span>=<span class="string">&#x27;anzhiyufont anzhiyu-icon-heartbeat&#x27;</span>&gt;</span></span><span class="language-xml"><span class="tag">&lt;/<span class="name">i</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">b</span>&gt;</span></span>心率管家<span class="language-xml"><span class="tag">&lt;/<span class="name">b</span>&gt;</span></span></span><br><span class="line">&#123;% p green, 免费版 %&#125;</span><br><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">img</span> <span class="attr">src</span>=<span class="string">&#x27;https://bu.dusays.com/2023/06/01/64787e515e261.png&#x27;</span>&gt;</span></span></span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">a</span>&gt;</span></span></span><br><span class="line">&#123;% endbtns %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="按钮-btn"><a href="#按钮-btn" class="headerlink" title="按钮 btn"></a>按钮 btn</h2><div class="tabs" id="btn"><ul class="nav-tabs"><button type="button" class="tab " data-href="btn-1">标签语法</button><button type="button" class="tab " data-href="btn-2">参数配置</button><button type="button" class="tab  active" data-href="btn-3">样式预览</button><button type="button" class="tab " data-href="btn-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="btn-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">&#123;% btn [url],[text],[icon],[color] [style] [layout] [position] [size] %&#125;</span><br><span class="line"></span><br><span class="line">[url] : 链接</span><br><span class="line">[text] : 按钮文字</span><br><span class="line">[icon] : [可选] 图标</span><br><span class="line">[color] : [可选] 按钮背景顔色(默认 style 时）</span><br><span class="line">按钮字体和边框顔色(outline 时)</span><br><span class="line">default/blue/pink/red/purple/orange/green</span><br><span class="line">[style] : [可选] 按钮样式 默认实心</span><br><span class="line">outline/留空</span><br><span class="line">[layout] : [可选] 按钮佈局 默认为 line</span><br><span class="line">block/留空</span><br><span class="line">[position] : [可选] 按钮位置 前提是设置了 layout 为 block 默认为左边</span><br><span class="line">center/right/留空</span><br><span class="line">[size] : [可选] 按钮大小</span><br><span class="line">larger/留空</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="btn-2"><div class="table-container"><table><thead><tr><th style="text-align:left">参数</th><th style="text-align:left">含义</th></tr></thead><tbody><tr><td style="text-align:left">url</td><td style="text-align:left">链接</td></tr><tr><td style="text-align:left">text</td><td style="text-align:left">按钮文字</td></tr><tr><td style="text-align:left">icon</td><td style="text-align:left">[可选] 图标，如果开启了 <code>fontawesome</code>可以使用 fontawesome 的图标，否则只能使用默内置图标</td></tr><tr><td style="text-align:left">color</td><td style="text-align:left">[可选] 按钮背景顔色(默认 style 时）按钮字体和边框顔色(outline 时)default/blue/pink/red/purple/orange/green</td></tr><tr><td style="text-align:left">style</td><td style="text-align:left">[可选] 按钮样式 默认实心数，outline/留空</td></tr><tr><td style="text-align:left">layout</td><td style="text-align:left">[可选] 按钮佈局 默认为 line block/留空</td></tr><tr><td style="text-align:left">position</td><td style="text-align:left">[可选] 按钮位置 前提是设置了 layout 为 block 默认为左边 center/right/留空数</td></tr><tr><td style="text-align:left">size</td><td style="text-align:left">[可选] 按钮大小 larger/留空</td></tr></tbody></table></div></div><div class="tab-item-content active" id="btn-3"><ol><li>一组按钮</li></ol><p>This is my website, click the button <a class="btn-anzhiyu " href="https://anheyu.com/"   title="AnZhiYu"><span>AnZhiYu</span></a><br>This is my website, click the button <a class="btn-anzhiyu " href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><br>This is my website, click the button <a class="btn-anzhiyu outline" href="https://anheyu.com/"   title="AnZhiYu"><span>AnZhiYu</span></a><br>This is my website, click the button <a class="btn-anzhiyu outline" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><br>This is my website, click the button <a class="btn-anzhiyu larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a></p><ol><li>调整位置/大小</li></ol><p><a class="btn-anzhiyu block" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><br><a class="btn-anzhiyu block center larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><br><a class="btn-anzhiyu block right outline larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a></p><ol><li>more than one button in center</li></ol><p><span><br><a class="btn-anzhiyu larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span>&lt;/a&gt;<br><a class="btn-anzhiyu blue larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><br><a class="btn-anzhiyu pink larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><br><a class="btn-anzhiyu red larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><br><a class="btn-anzhiyu purple larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><br><a class="btn-anzhiyu orange larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><br><a class="btn-anzhiyu green larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><br>&lt;/span&gt;</p><ol><li>居中按钮</li></ol><div class="btn-center"><a class="btn-anzhiyu outline larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu outline blue larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu outline pink larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu outline red larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu outline purple larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu outline orange larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a><a class="btn-anzhiyu outline green larger" href="https://anheyu.com/"   title="AnZhiYu"><i class="anzhiyufont anzhiyu-icon-circle-arrow-right"></i><span>AnZhiYu</span></a></div></div><div class="tab-item-content" id="btn-4"><ol><li>一组按钮</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">This is my website, click the button &#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu %&#125;</span><br><span class="line">This is my website, click the button &#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right %&#125;</span><br><span class="line">This is my website, click the button &#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,,outline %&#125;</span><br><span class="line">This is my website, click the button &#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,outline %&#125;</span><br><span class="line">This is my website, click the button &#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,larger %&#125;</span><br></pre></td></tr></table></figure><ol><li>调整位置/大小</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,block %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,block center larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,block right outline larger %&#125;</span><br></pre></td></tr></table></figure><ol><li>more than one button in center</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">span</span>&gt;</span></span></span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,blue larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,pink larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,red larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,purple larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,orange larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,green larger %&#125;</span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">span</span>&gt;</span></span></span><br></pre></td></tr></table></figure><ol><li>居中按钮</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;btn-center&quot;</span>&gt;</span></span></span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,outline larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,outline blue larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,outline pink larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,outline red larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,outline purple larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,outline orange larger %&#125;</span><br><span class="line">&#123;% btn &#x27;https://anheyu.com/&#x27;,AnZhiYu,anzhiyufont anzhiyu-icon-circle-arrow-right,outline green larger %&#125;</span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span></span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="网站卡片-sites"><a href="#网站卡片-sites" class="headerlink" title="网站卡片 sites"></a>网站卡片 sites</h2><div class="tabs" id="site"><ul class="nav-tabs"><button type="button" class="tab " data-href="site-1">标签语法</button><button type="button" class="tab  active" data-href="site-2">样式预览</button><button type="button" class="tab " data-href="site-3">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="site-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#123;% sitegroup %&#125;</span><br><span class="line">&#123;% site 标题, url=链接, screenshot=截图链接, avatar=头像链接（可选）, description=描述（可选） %&#125;</span><br><span class="line">&#123;% site 标题, url=链接, screenshot=截图链接, avatar=头像链接（可选）, description=描述（可选） %&#125;</span><br><span class="line">&#123;% endsitegroup %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content active" id="site-2"><div class="site-card-group"><a class="site-card" href="https://xaoxuu.com" data-title=简约风格><div class="wrapper cover"><img class="cover fadeIn" src="https://bu.dusays.com/2023/06/01/6478965ce6557.webp"/></div><div class="info"><img class="flink-avatar" src="https://cdn1.tianli0.top/gh/xaoxuu/cdn-assets/avatar/avatar.png"/><span class="site-title">xaoxuu</span></div></a><a class="site-card" href="https://colsrch.top" data-title=这是一段关于这个网站的描述文字><div class="wrapper cover"><img class="cover fadeIn" src="https://i.loli.net/2020/08/22/dFRWXm52OVu8qfK.png"/></div><div class="info"><img class="flink-avatar" src="https://cdn1.tianli0.top/gh/Colsrch/images/Colsrch/avatar.jpg"/><span class="site-title">Colsrch</span></div></a><a class="site-card" href="https://linhk1606.github.io" data-title=这是一段关于这个网站的描述文字><div class="wrapper cover"><img class="cover fadeIn" src="https://bu.dusays.com/2023/06/01/6478963584621.png"/></div><div class="info"><img class="flink-avatar" src="https://bu.dusays.com/2023/06/01/6478968743368.png"/><span class="site-title">Linhk1606</span></div></a></div></div><div class="tab-item-content" id="site-3"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">&#123;% sitegroup %&#125;</span><br><span class="line">&#123;% site xaoxuu, url=https://xaoxuu.com, screenshot=https://bu.dusays.com/2023/06/01/6478965ce6557.webp, avatar=https://cdn1.tianli0.top/gh/xaoxuu/cdn-assets/avatar/avatar.png, description=简约风格 %&#125;</span><br><span class="line">&#123;% site Colsrch, url=https://colsrch.top, screenshot=https://i.loli.net/2020/08/22/dFRWXm52OVu8qfK.png, avatar=https://cdn1.tianli0.top/gh/Colsrch/images/Colsrch/avatar.jpg, description=这是一段关于这个网站的描述文字 %&#125;</span><br><span class="line">&#123;% site Linhk1606, url=https://linhk1606.github.io, screenshot=https://bu.dusays.com/2023/06/01/6478963584621.png, avatar=https://bu.dusays.com/2023/06/01/6478968743368.png, description=这是一段关于这个网站的描述文字 %&#125;</span><br><span class="line">&#123;% endsitegroup %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="单张图片-image"><a href="#单张图片-image" class="headerlink" title="单张图片 image"></a>单张图片 image</h2><div class="tabs" id="image"><ul class="nav-tabs"><button type="button" class="tab " data-href="image-1">标签语法</button><button type="button" class="tab " data-href="image-2">参数配置</button><button type="button" class="tab  active" data-href="image-3">样式预览</button><button type="button" class="tab " data-href="image-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="image-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% image 链接, width=宽度（可选）, height=高度（可选）, alt=描述（可选）, bg=占位颜色（可选） %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="image-2"><ol><li>图片宽度高度：width=300px, height=32px</li><li>图片描述：alt=图片描述（butterfly 需要在主题配置文件中开启图片描述）</li><li>占位背景色：bg=#f2f2f2</li></ol></div><div class="tab-item-content active" id="image-3"><ol><li>添加描述：</li></ol><div class="img-wrap"><div class="img-bg"><img class="img" src="https://bu.dusays.com/2023/06/01/6478937d7de6f.webp" alt="每天下课回宿舍的路，没有什么故事。"/></div><span class="image-caption">每天下课回宿舍的路，没有什么故事。</span></div><ol><li>指定宽度：</li></ol><div class="img-wrap"><div class="img-bg"><img class="img" src="https://bu.dusays.com/2023/06/01/6478937d7de6f.webp" style="width:400px;"/></div></div><ol><li>指定宽度并添加描述：</li></ol><div class="img-wrap"><div class="img-bg"><img class="img" src="https://bu.dusays.com/2023/06/01/6478937d7de6f.webp" alt="每天下课回宿舍的路，没有什么故事。" style="width:400px;"/></div><span class="image-caption">每天下课回宿舍的路，没有什么故事。</span></div><ol><li>设置占位背景色：</li></ol><div class="img-wrap"><div class="img-bg" style="background:#1D0C04"><img class="img" src="https://bu.dusays.com/2023/06/01/6478937d7de6f.webp" alt="优化不同宽度浏览的观感" style="width:400px;"/></div><span class="image-caption">优化不同宽度浏览的观感</span></div></div><div class="tab-item-content" id="image-4"><ol><li>添加描述：</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% image https://bu.dusays.com/2023/06/01/6478937d7de6f.webp, alt=每天下课回宿舍的路，没有什么故事。 %&#125;</span><br></pre></td></tr></table></figure><ol><li>指定宽度：</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% image https://bu.dusays.com/2023/06/01/6478937d7de6f.webp, width=400px %&#125;</span><br></pre></td></tr></table></figure><ol><li>指定宽度并添加描述：</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% image https://bu.dusays.com/2023/06/01/6478937d7de6f.webp, width=400px, alt=每天下课回宿舍的路，没有什么故事。 %&#125;</span><br></pre></td></tr></table></figure><ol><li>设置占位背景色：</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% image https://bu.dusays.com/2023/06/01/6478937d7de6f.webp, width=400px, bg=#1D0C04, alt=优化不同宽度浏览的观感 %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="inlineImg-行内图片"><a href="#inlineImg-行内图片" class="headerlink" title="inlineImg 行内图片"></a>inlineImg 行内图片</h2><div class="tabs" id="inlineimg"><ul class="nav-tabs"><button type="button" class="tab " data-href="inlineimg-1">标签语法</button><button type="button" class="tab " data-href="inlineimg-2">参数配置</button><button type="button" class="tab  active" data-href="inlineimg-3">样式预览</button><button type="button" class="tab " data-href="inlineimg-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="inlineimg-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#123;% inlineImg [src] [height] %&#125;</span><br><span class="line"></span><br><span class="line">[src] : 图片链接</span><br><span class="line">[height] ： 图片高度限制【可选】</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="inlineimg-2"><div class="table-container"><table><thead><tr><th style="text-align:left">参数</th><th style="text-align:left">含义</th></tr></thead><tbody><tr><td style="text-align:left">src</td><td style="text-align:left">图片链接</td></tr><tr><td style="text-align:left">height</td><td style="text-align:left">图片高度限制【可选】</td></tr></tbody></table></div></div><div class="tab-item-content active" id="inlineimg-3"><p>你看我长得漂亮不</p><p><img src="https://bu.dusays.com/2023/06/01/64787ded2ca1c.webp" alt=""></p><p>我觉得很漂亮 <img class="inline-img" src="https://bu.dusays.com/2023/06/01/64787da5251b3.png" style="height:150px"/></p></div><div class="tab-item-content" id="inlineimg-4"><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">你看我长得漂亮不</span><br><span class="line"></span><br><span class="line">![](https://i.loli.net/2021/03/19/2P6ivUGsdaEXSFI.png)</span><br><span class="line"></span><br><span class="line">我觉得很漂亮 &#123;% inlineImg https://i.loli.net/2021/03/19/5M4jUB3ynq7ePgw.png 150px %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="行内图片-inlineimage"><a href="#行内图片-inlineimage" class="headerlink" title="行内图片 inlineimage"></a>行内图片 inlineimage</h2><div class="tabs" id="inlineimage"><ul class="nav-tabs"><button type="button" class="tab " data-href="inlineimage-1">标签语法</button><button type="button" class="tab " data-href="inlineimage-2">参数配置</button><button type="button" class="tab  active" data-href="inlineimage-3">样式预览</button><button type="button" class="tab " data-href="inlineimage-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="inlineimage-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% inlineimage 图片链接, height=高度（可选） %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="inlineimage-2"><ol><li>高度：height=20px</li></ol></div><div class="tab-item-content active" id="inlineimage-3"><p>这是 <img no-lazy class="inline" src="https://bu.dusays.com/2023/06/01/647895232e5d5.webp" style="height:1.5em"/> 一段话。</p><p>这又是 <img no-lazy class="inline" src="https://bu.dusays.com/2022/05/19/6285328a83ca7.gif" style="height:40px;"/> 一段话。</p></div><div class="tab-item-content" id="inlineimage-4"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">这是 &#123;% inlineimage https://bu.dusays.com/2023/06/01/647895232e5d5.webp %&#125; 一段话。</span><br><span class="line"></span><br><span class="line">这又是 &#123;% inlineimage https://bu.dusays.com/2022/05/19/6285328a83ca7.gif, height=40px %&#125; 一段话。</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="label-标签"><a href="#label-标签" class="headerlink" title="label 标签"></a>label 标签</h2><div class="tabs" id="label"><ul class="nav-tabs"><button type="button" class="tab " data-href="label-1">标签语法</button><button type="button" class="tab " data-href="label-2">参数配置</button><button type="button" class="tab  active" data-href="label-3">样式预览</button><button type="button" class="tab " data-href="label-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="label-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% label text color %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="label-2"><div class="table-container"><table><thead><tr><th style="text-align:left">参数</th><th style="text-align:left">含义</th></tr></thead><tbody><tr><td style="text-align:left">text</td><td style="text-align:left">文字</td></tr><tr><td style="text-align:left">color</td><td style="text-align:left">【可选】背景颜色，默认为 default，default/blue/pink/red/purple/orange/green</td></tr></tbody></table></div></div><div class="tab-item-content active" id="label-3"><p>臣亮言：<mark class="hl-label default">先帝</mark> 创业未半，而<mark class="hl-label blue">中道崩殂</mark> 。今天下三分，<mark class="hl-label pink">益州疲敝</mark> ，此诚<mark class="hl-label red">危急存亡之秋</mark> 也！然侍衞之臣，不懈于内；<mark class="hl-label purple">忠志之士</mark> ，忘身于外者，盖追先帝之殊遇，欲报之于陛下也。诚宜开张圣听，以光先帝遗德，恢弘志士之气；不宜妄自菲薄，引喻失义，以塞忠谏之路也。<br>宫中、府中，俱为一体；陟罚臧否，不宜异同。若有<mark class="hl-label orange">作奸</mark> 、<mark class="hl-label green">犯科</mark> ，及为忠善者，宜付有司，论其刑赏，以昭陛下平明之治；不宜偏私，使内外异法也。</p></div><div class="tab-item-content" id="label-4"><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">臣亮言：&#123;% label 先帝 %&#125;创业未半，而&#123;% label 中道崩殂 blue %&#125;。今天下三分，&#123;% label 益州疲敝 pink %&#125;，此诚&#123;% label 危急存亡之秋 red %&#125;也！然侍衞之臣，不懈于内；&#123;% label 忠志之士 purple %&#125;，忘身于外者，盖追先帝之殊遇，欲报之于陛下也。诚宜开张圣听，以光先帝遗德，恢弘志士之气；不宜妄自菲薄，引喻失义，以塞忠谏之路也。</span><br><span class="line">宫中、府中，俱为一体；陟罚臧否，不宜异同。若有&#123;% label 作奸 orange %&#125;、&#123;% label 犯科 green %&#125;，及为忠善者，宜付有司，论其刑赏，以昭陛下平明之治；不宜偏私，使内外异法也。</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="timeline"><a href="#timeline" class="headerlink" title="timeline"></a>timeline</h2><div class="tabs" id="timeline"><ul class="nav-tabs"><button type="button" class="tab " data-href="timeline-1">标签语法</button><button type="button" class="tab " data-href="timeline-2">参数配置</button><button type="button" class="tab  active" data-href="timeline-3">样式预览</button><button type="button" class="tab " data-href="timeline-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="timeline-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">&#123;% timeline title,color %&#125;</span><br><span class="line"></span><br><span class="line">&lt;!-- timeline title --&gt;</span><br><span class="line"></span><br><span class="line">xxxxx</span><br><span class="line"></span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line">&lt;!-- timeline title --&gt;</span><br><span class="line"></span><br><span class="line">xxxxx</span><br><span class="line"></span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtimeline %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="timeline-2"><div class="table-container"><table><thead><tr><th style="text-align:left">参数</th><th style="text-align:left">含义</th></tr></thead><tbody><tr><td style="text-align:left">title</td><td style="text-align:left">标题/时间线</td></tr><tr><td style="text-align:left">color</td><td style="text-align:left">timeline 颜色，default(留空) / blue / pink / red / purple / orange / green</td></tr></tbody></table></div></div><div class="tab-item-content active" id="timeline-3"><ol><li><p>默认颜色</p><div class="timeline undefined"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>2022</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>01-02</p></div></div><div class='timeline-item-content'><p>这是测试页面</p></div></div></div></li><li><p>blue</p><div class="timeline blue"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>2022</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>01-02</p></div></div><div class='timeline-item-content'><p>这是测试页面</p></div></div></div></li><li><p>pink</p><div class="timeline pink"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>2022</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>01-02</p></div></div><div class='timeline-item-content'><p>这是测试页面</p></div></div></div></li><li><p>red</p><div class="timeline red"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>2022</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>01-02</p></div></div><div class='timeline-item-content'><p>这是测试页面</p></div></div></div></li><li><p>purple</p><div class="timeline purple"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>2022</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>01-02</p></div></div><div class='timeline-item-content'><p>这是测试页面</p></div></div></div></li><li><p>orange</p><div class="timeline orange"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>2022</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>01-02</p></div></div><div class='timeline-item-content'><p>这是测试页面</p></div></div></div></li><li><p>green</p><div class="timeline green"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>2022</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>01-02</p></div></div><div class='timeline-item-content'><p>这是测试页面</p></div></div></div></li></ol></div><div class="tab-item-content" id="timeline-4"><ol><li>默认颜色</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% timeline 2022 %&#125;</span><br><span class="line">&lt;!-- timeline 01-02 --&gt;</span><br><span class="line"></span><br><span class="line">这是测试页面</span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtimeline %&#125;</span><br></pre></td></tr></table></figure><ol><li>blue</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% timeline 2022,blue %&#125;</span><br><span class="line">&lt;!-- timeline 01-02 --&gt;</span><br><span class="line"></span><br><span class="line">这是测试页面</span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtimeline %&#125;</span><br></pre></td></tr></table></figure><ol><li>pink</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% timeline 2022,pink %&#125;</span><br><span class="line">&lt;!-- timeline 01-02 --&gt;</span><br><span class="line"></span><br><span class="line">这是测试页面</span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtimeline %&#125;</span><br></pre></td></tr></table></figure><ol><li>red</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% timeline 2022,red %&#125;</span><br><span class="line">&lt;!-- timeline 01-02 --&gt;</span><br><span class="line"></span><br><span class="line">这是测试页面</span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtimeline %&#125;</span><br></pre></td></tr></table></figure><ol><li>purple</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% timeline 2022,purple %&#125;</span><br><span class="line">&lt;!-- timeline 01-02 --&gt;</span><br><span class="line"></span><br><span class="line">这是测试页面</span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtimeline %&#125;</span><br></pre></td></tr></table></figure><ol><li>orange</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% timeline 2022,orange %&#125;</span><br><span class="line">&lt;!-- timeline 01-02 --&gt;</span><br><span class="line"></span><br><span class="line">这是测试页面</span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtimeline %&#125;</span><br></pre></td></tr></table></figure><ol><li>green</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% timeline 2022,green %&#125;</span><br><span class="line">&lt;!-- timeline 01-02 --&gt;</span><br><span class="line"></span><br><span class="line">这是测试页面</span><br><span class="line">&lt;!-- endtimeline --&gt;</span><br><span class="line"></span><br><span class="line">&#123;% endtimeline %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="flink-友链标签"><a href="#flink-友链标签" class="headerlink" title="flink 友链标签"></a>flink 友链标签</h2><div class="note blue anzhiyufont anzhiyu-icon-bullhorn simple"><p>可在任何界面插入类似<code>友情链接</code>列表效果，内容格式与友情链接界面一样，支持 <code>yml 格式</code>,注意<code>yml数据</code>具有格式要求，请注意格式对齐，防止被编辑器格式化导致格式错误从而报错。</p></div><div class="tabs" id="btn"><ul class="nav-tabs"><button type="button" class="tab " data-href="btn-1">标签语法</button><button type="button" class="tab " data-href="btn-2">参数配置</button><button type="button" class="tab  active" data-href="btn-3">样式预览</button><button type="button" class="tab " data-href="btn-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="btn-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&#123;% flink %&#125;</span><br><span class="line">xxxxxx</span><br><span class="line">&#123;% endflink %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="btn-2"><div class="table-container"><table><thead><tr><th style="text-align:left">参数</th><th style="text-align:left">含义</th></tr></thead><tbody><tr><td style="text-align:left">class_name</td><td style="text-align:left">h2标题</td></tr><tr><td style="text-align:left">flink_style</td><td style="text-align:left">【可选】友链样式，默认为 flexcard，flexcard/anzhiyu</td></tr><tr><td style="text-align:left">link_list</td><td style="text-align:left">【可选】友链样式，默认为 flexcard，flexcard/anzhiyu</td></tr></tbody></table></div></div><div class="tab-item-content active" id="btn-3"><div class="flink"><div class="flink-name">推荐博客</div> <div class="flink-list"><div class="flexcard-flink-list">              <a href="https://anheyu.com/" title="安知鱼" target="_blank" class="flink-list-card cf-friends-link">                <div class="wrapper cover">                    <img class="no-lightbox cover fadeIn" src="https://npm.elemecdn.com/anzhiyu-blog@1.1.6/img/post/common/anheyu.com.jpg" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="安知鱼" />                </div>                <div class="info">                  <img class="no-lightbox cf-friends-avatar flink-avatar" src="https://img02.anheyu.com/adminuploads/1/2022/09/15/63232b7d91d22.jpg" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="安知鱼"/>                  <span class="flink-sitename cf-friends-name">安知鱼</span>                </div>              </a></div></div><div class="flink-name">网站</div><div class="flink-desc">值得推荐的网站</div> <div class="flink-list"><div class="anzhiyu-flink-list">            <div class="flink-list-item">              <a href="https://www.youtube.com/" title="Youtube" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://i.loli.net/2020/05/14/9ZkGg8v3azHJfM1.png" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Youtube" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Youtube</div>                  <div class="flink-item-desc" title="视频网站">视频网站</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://www.weibo.com/" title="Weibo" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://i.loli.net/2020/05/14/TLJBum386vcnI1P.png" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Weibo" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Weibo</div>                  <div class="flink-item-desc" title="中国最大社交分享平台">中国最大社交分享平台</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://twitter.com/" title="Twitter" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://i.loli.net/2020/05/14/5VyHPQqR6LWF39a.png" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Twitter" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Twitter</div>                  <div class="flink-item-desc" title="社交分享平台">社交分享平台</div>                </div>              </a>            </div></div></div></div></div><div class="tab-item-content" id="btn-4"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">&#123;% flink %&#125;</span><br><span class="line"><span class="bullet">-</span> class<span class="emphasis">_name: 推荐博客</span></span><br><span class="line"><span class="emphasis">  flink_</span>style: flexcard</span><br><span class="line">  link<span class="emphasis">_list:</span></span><br><span class="line"><span class="emphasis">    - name: 安知鱼</span></span><br><span class="line"><span class="emphasis">      link: https://anheyu.com/</span></span><br><span class="line"><span class="emphasis">      avatar: https://img02.anheyu.com/adminuploads/1/2022/09/15/63232b7d91d22.jpg</span></span><br><span class="line"><span class="emphasis">      descr: 生活明朗，万物可爱</span></span><br><span class="line"><span class="emphasis">      siteshot: https://npm.elemecdn.com/anzhiyu-blog@1.1.6/img/post/common/anheyu.com.jpg</span></span><br><span class="line"><span class="emphasis"></span></span><br><span class="line"><span class="emphasis">- class_</span>name: 网站</span><br><span class="line">  class<span class="emphasis">_desc: 值得推荐的网站</span></span><br><span class="line"><span class="emphasis">  flink_</span>style: anzhiyu</span><br><span class="line">  link<span class="emphasis">_list:</span></span><br><span class="line"><span class="emphasis">    - name: Youtube</span></span><br><span class="line"><span class="emphasis">      link: https://www.youtube.com/</span></span><br><span class="line"><span class="emphasis">      avatar: https://i.loli.net/2020/05/14/9ZkGg8v3azHJfM1.png</span></span><br><span class="line"><span class="emphasis">      descr: 视频网站</span></span><br><span class="line"><span class="emphasis">    - name: Weibo</span></span><br><span class="line"><span class="emphasis">      link: https://www.weibo.com/</span></span><br><span class="line"><span class="emphasis">      avatar: https://i.loli.net/2020/05/14/TLJBum386vcnI1P.png</span></span><br><span class="line"><span class="emphasis">      descr: 中国最大社交分享平台</span></span><br><span class="line"><span class="emphasis">    - name: Twitter</span></span><br><span class="line"><span class="emphasis">      link: https://twitter.com/</span></span><br><span class="line"><span class="emphasis">      avatar: https://i.loli.net/2020/05/14/5VyHPQqR6LWF39a.png</span></span><br><span class="line"><span class="emphasis">      descr: 社交分享平台</span></span><br><span class="line"><span class="emphasis">&#123;% endflink %&#125;</span></span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="mermaid-图"><a href="#mermaid-图" class="headerlink" title="mermaid 图"></a>mermaid 图</h2><div class="note blue anzhiyufont anzhiyu-icon-bullhorn simple"><p>使用<code>mermaid标签</code>可以绘制Flowchart（流程图）、Sequence diagram（时序图 ）、Class Diagram（类别图）、State Diagram（状态图）、Gantt（甘特图）和Pie Chart（圆形图），具体可以查看<a href="https://mermaid.js.org/#/">mermaid文档</a></p></div><p>修改 <code>主题配置文件</code></p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># mermaid</span></span><br><span class="line"><span class="comment"># see https://github.com/mermaid-js/mermaid</span></span><br><span class="line"><span class="attr">mermaid:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># built-in themes: default/forest/dark/neutral</span></span><br><span class="line">  <span class="attr">theme:</span></span><br><span class="line">    <span class="attr">light:</span> <span class="string">default</span></span><br><span class="line">    <span class="attr">dark:</span> <span class="string">dark</span></span><br></pre></td></tr></table></figure><div class="tabs" id="mermaid"><ul class="nav-tabs"><button type="button" class="tab " data-href="mermaid-1">标签语法</button><button type="button" class="tab  active" data-href="mermaid-2">样式预览</button><button type="button" class="tab " data-href="mermaid-3">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="mermaid-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&#123;% mermaid %&#125;</span><br><span class="line">内容</span><br><span class="line">&#123;% endmermaid %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content active" id="mermaid-2"><p><img src="https://bu.dusays.com/2023/06/01/647889d3a16f8.png" alt="mermaid"></p></div><div class="tab-item-content" id="mermaid-3"><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">&#123;% mermaid %&#125;</span><br><span class="line">pie</span><br><span class="line">    title Key elements in Product X</span><br><span class="line">    &quot;Calcium&quot; : 42.96</span><br><span class="line">    &quot;Potassium&quot; : 50.05</span><br><span class="line">    &quot;Magnesium&quot; : 10.01</span><br><span class="line">    &quot;Iron&quot; :  5</span><br><span class="line">&#123;% endmermaid %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="复选列表-checkbox"><a href="#复选列表-checkbox" class="headerlink" title="复选列表 checkbox"></a>复选列表 checkbox</h2><div class="tabs" id="checkbox"><ul class="nav-tabs"><button type="button" class="tab " data-href="checkbox-1">标签语法</button><button type="button" class="tab " data-href="checkbox-2">配置参数</button><button type="button" class="tab  active" data-href="checkbox-3">样式预览</button><button type="button" class="tab " data-href="checkbox-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="checkbox-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% checkbox 样式参数（可选）, 文本（支持简单md） %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="checkbox-2"><ol><li>样式: plus, minus, times</li><li>颜色: <span class='p red'>red</span>,<span class='p yellow'>yellow</span>,<span class='p green'>green</span>,<span class='p cyan'>cyan</span>,<span class='p blue'>blue</span>,<span class='p gray'>gray</span></li><li>选中状态: checked</li></ol></div><div class="tab-item-content active" id="checkbox-3"><div class='checkbox'><input type="checkbox" />            <p>纯文本测试</p>            </div>   <div class='checkbox checked'><input type="checkbox" checked="checked"/>            <p>支持简单的 <a href="https://guides.github.com/features/mastering-markdown/">markdown</a> 语法</p>            </div>   <div class='checkbox red'><input type="checkbox" />            <p>支持自定义颜色</p>            </div>   <div class='checkbox green checked'><input type="checkbox" checked="checked"/>            <p>绿色 + 默认选中</p>            </div>   <div class='checkbox yellow checked'><input type="checkbox" checked="checked"/>            <p>黄色 + 默认选中</p>            </div>   <div class='checkbox cyan checked'><input type="checkbox" checked="checked"/>            <p>青色 + 默认选中</p>            </div>   <div class='checkbox blue checked'><input type="checkbox" checked="checked"/>            <p>蓝色 + 默认选中</p>            </div>   <div class='checkbox plus green checked'><input type="checkbox" checked="checked"/>            <p>增加</p>            </div>   <div class='checkbox minus yellow checked'><input type="checkbox" checked="checked"/>            <p>减少</p>            </div>   <div class='checkbox times red checked'><input type="checkbox" checked="checked"/>            <p>叉</p>            </div></div><div class="tab-item-content" id="checkbox-4"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">&#123;% checkbox 纯文本测试 %&#125;</span><br><span class="line">&#123;% checkbox checked, 支持简单的 [<span class="string">markdown</span>](<span class="link">https://guides.github.com/features/mastering-markdown/</span>) 语法 %&#125;</span><br><span class="line">&#123;% checkbox red, 支持自定义颜色 %&#125;</span><br><span class="line">&#123;% checkbox green checked, 绿色 + 默认选中 %&#125;</span><br><span class="line">&#123;% checkbox yellow checked, 黄色 + 默认选中 %&#125;</span><br><span class="line">&#123;% checkbox cyan checked, 青色 + 默认选中 %&#125;</span><br><span class="line">&#123;% checkbox blue checked, 蓝色 + 默认选中 %&#125;</span><br><span class="line">&#123;% checkbox plus green checked, 增加 %&#125;</span><br><span class="line">&#123;% checkbox minus yellow checked, 减少 %&#125;</span><br><span class="line">&#123;% checkbox times red checked, 叉 %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="dogeplayer-多吉云播放器"><a href="#dogeplayer-多吉云播放器" class="headerlink" title="dogeplayer 多吉云播放器"></a>dogeplayer 多吉云播放器</h2><div class="note blue anzhiyufont anzhiyu-icon-bullhorn simple"><p>快捷引入<a href="https://console.dogecloud.com/vod/overview">多吉云视频</a></p></div><div class="tabs" id="label"><ul class="nav-tabs"><button type="button" class="tab " data-href="label-1">标签语法</button><button type="button" class="tab " data-href="label-2">参数配置</button><button type="button" class="tab  active" data-href="label-3">样式预览</button><button type="button" class="tab " data-href="label-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="label-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% dogeplayer 4945 ebb742fd1f0b5a7b %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="label-2"><p>获取<code>userId</code>与<code>vcode</code></p><p><img src="https://bu.dusays.com/2023/06/01/64788b5bad729.webp" alt=""></p><div class="table-container"><table><thead><tr><th style="text-align:left">参数</th><th style="text-align:left">含义</th></tr></thead><tbody><tr><td style="text-align:left">userId</td><td style="text-align:left">多吉云userId</td></tr><tr><td style="text-align:left">vcode</td><td style="text-align:left">视频vcode</td></tr></tbody></table></div></div><div class="tab-item-content active" id="label-3"><p><img src="https://bu.dusays.com/2023/06/01/64788c12883b8.webp" alt=""></p></div><div class="tab-item-content" id="label-4"><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% dogeplayer 4945 ebb742fd1f0b5a7b %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="折叠框-folding"><a href="#折叠框-folding" class="headerlink" title="折叠框 folding"></a>折叠框 folding</h2><div class="note blue anzhiyufont anzhiyu-icon-bullhorn disabled"><p>折叠框folding</p></div><div class="tabs" id="folding"><ul class="nav-tabs"><button type="button" class="tab " data-href="folding-1">标签语法</button><button type="button" class="tab " data-href="folding-2">配置参数</button><button type="button" class="tab  active" data-href="folding-3">样式预览</button><button type="button" class="tab " data-href="folding-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="folding-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&#123;% folding 参数（可选）, 标题 %&#125;</span><br><span class="line">![](<span class="link">https://bu.dusays.com/2023/06/01/64788d71c832d.webp</span>)</span><br><span class="line">&#123;% endfolding %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="folding-2"><ol><li>颜色：blue, cyan, green, yellow, red</li><li>状态：状态填写 open 代表默认打开。</li></ol></div><div class="tab-item-content active" id="folding-3"><details class="folding-tag" ><summary> 查看图片测试 </summary>              <div class='content'>              <p><img src="https://bu.dusays.com/2023/06/01/64788d71c832d.webp" alt=""></p>              </div>            </details><details class="folding-tag" cyan open><summary> 查看默认打开的折叠框 </summary>              <div class='content'>              <p>这是一个默认打开的折叠框。</p>              </div>            </details><details class="folding-tag" green><summary> 查看代码测试 </summary>              <div class='content'>              <figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">![](<span class="link">https://bu.dusays.com/2023/06/01/64788d71c832d.webp</span>)</span><br></pre></td></tr></table></figure>              </div>            </details><details class="folding-tag" yellow><summary> 查看列表测试 </summary>              <div class='content'>              <ul><li>haha</li><li>hehe</li></ul>              </div>            </details><details class="folding-tag" red><summary> 查看嵌套测试 </summary>              <div class='content'>              <details class="folding-tag" blue><summary> 查看嵌套测试2 </summary>              <div class='content'>              <details class="folding-tag" ><summary> 查看嵌套测试3 </summary>              <div class='content'>              <p>hahaha <span><img src='https://bu.dusays.com/2023/06/01/64788cd5a356b.png' style='height:24px'></span></p>              </div>            </details>              </div>            </details>              </div>            </details></div><div class="tab-item-content" id="folding-4"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line">&#123;% folding 查看图片测试 %&#125;</span><br><span class="line"></span><br><span class="line">![](<span class="link">https://bu.dusays.com/2023/06/01/64788d71c832d.webp</span>)</span><br><span class="line"></span><br><span class="line">&#123;% endfolding %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% folding cyan open, 查看默认打开的折叠框 %&#125;</span><br><span class="line"></span><br><span class="line">这是一个默认打开的折叠框。</span><br><span class="line"></span><br><span class="line">&#123;% endfolding %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% folding green, 查看代码测试 %&#125;</span><br><span class="line">假装这里有代码块（代码块没法嵌套代码块）</span><br><span class="line">&#123;% endfolding %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% folding yellow, 查看列表测试 %&#125;</span><br><span class="line"></span><br><span class="line"><span class="bullet">-</span> haha</span><br><span class="line"><span class="bullet">-</span> hehe</span><br><span class="line"></span><br><span class="line">&#123;% endfolding %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% folding red, 查看嵌套测试 %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% folding blue, 查看嵌套测试2 %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% folding 查看嵌套测试3 %&#125;</span><br><span class="line"></span><br><span class="line">hahaha <span class="language-xml"><span class="tag">&lt;<span class="name">span</span>&gt;</span></span><span class="language-xml"><span class="tag">&lt;<span class="name">img</span> <span class="attr">src</span>=<span class="string">&#x27;https://bu.dusays.com/2023/06/01/64788cd5a356b.png&#x27;</span> <span class="attr">style</span>=<span class="string">&#x27;height:24px&#x27;</span>&gt;</span></span><span class="language-xml"><span class="tag">&lt;/<span class="name">span</span>&gt;</span></span></span><br><span class="line"></span><br><span class="line">&#123;% endfolding %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% endfolding %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% endfolding %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="Gallery-相册图库"><a href="#Gallery-相册图库" class="headerlink" title="Gallery 相册图库"></a>Gallery 相册图库</h2><p>一个图库集合。</p><div class="tabs" id="gallery"><ul class="nav-tabs"><button type="button" class="tab " data-href="gallery-1">标签语法</button><button type="button" class="tab " data-href="gallery-2">参数配置</button><button type="button" class="tab  active" data-href="gallery-3">样式预览</button><button type="button" class="tab " data-href="gallery-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="gallery-1"><ol><li><p>gallerygroup 相册图库</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;gallery-group-main&quot;</span>&gt;</span></span></span><br><span class="line">&#123;% galleryGroup name description link img-url %&#125;</span><br><span class="line">&#123;% galleryGroup name description link img-url %&#125;</span><br><span class="line">&#123;% galleryGroup name description link img-url %&#125;</span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span></span><br></pre></td></tr></table></figure></li><li><p>gallery 相册</p></li></ol><div class="tabs" id="gallery相册"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="gallery相册-1">本地</button><button type="button" class="tab " data-href="gallery相册-2">远程</button></ul><div class="tab-contents"><div class="tab-item-content active" id="gallery相册-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">&#123;% gallery %&#125;</span><br><span class="line">markdown 图片格式</span><br><span class="line">&#123;% endgallery %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% gallery true,220,10 %&#125;</span><br><span class="line">markdown 图片格式</span><br><span class="line">&#123;% endgallery %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% gallery true,,10 %&#125;</span><br><span class="line">markdown 图片格式</span><br><span class="line">&#123;% endgallery %&#125;</span><br></pre></td></tr></table></figure><div class="table-container"><table><thead><tr><th>参数名</th><th>释义</th></tr></thead><tbody><tr><td>lazyload</td><td>【可选】点击按钮加载更多图片，填写 true/false。默认为 <code>false</code>。</td></tr><tr><td>rowHeight</td><td>【可选】图片显示的高度，如果需要一行显示更多的图片，可设置更小的数字。默认为 <code>220</code>。</td></tr><tr><td>limit</td><td>【可选】每次加载多少张照片。默认为 <code>10</code>。</td></tr></tbody></table></div></div><div class="tab-item-content" id="gallery相册-2"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">&#123;% gallery url,[link],[lazyload],[rowHeight],[limit] %&#125;</span><br><span class="line">&#123;% endgallery %&#125;</span><br></pre></td></tr></table></figure><div class="table-container"><table><thead><tr><th>参数名</th><th>释义</th></tr></thead><tbody><tr><td>url</td><td>【必须】 识别词</td></tr><tr><td>link</td><td>【必须】远程的 json 链接</td></tr><tr><td>lazyload</td><td>【可选】点击按钮加载更多图片，填写 true/false。默认为 <code>false</code>。</td></tr><tr><td>rowHeight</td><td>【可选】图片显示的高度，如果需要一行显示更多的图片，可设置更小的数字。默认为 <code>220</code>。</td></tr><tr><td>limit</td><td>【可选】每次加载多少张照片。默认为 <code>10</code>。</td></tr></tbody></table></div><blockquote><p>远程链接 Json 的例子</p></blockquote><p>有三个参数，<code>url</code>是必须存在的，<code>alt</code> 和 <code>title</code> 可有，也可没有。</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">[</span></span><br><span class="line">  <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://cdn1.tianli0.top/gh/jerryc127/CDN/img/IMG_0556.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;alt&quot;</span><span class="punctuation">:</span> <span class="string">&quot;IMG_0556.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;title&quot;</span><span class="punctuation">:</span> <span class="string">&quot;这是title&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://cdn1.tianli0.top/gh/jerryc127/CDN/img/IMG_0472.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;alt&quot;</span><span class="punctuation">:</span> <span class="string">&quot;IMG_0472.jpg&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://cdn1.tianli0.top/gh/jerryc127/CDN/img/IMG_0453.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;alt&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://cdn1.tianli0.top/gh/jerryc127/CDN/img/IMG_0931.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;alt&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">]</span></span><br></pre></td></tr></table></figure><blockquote><p>示例</p></blockquote><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">&#123;% gallery url,https://xxxx.com/sss.json %&#125;</span><br><span class="line">&#123;% endgallery %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% gallery url,https://xxxx.com/sss.json,true,220,10 %&#125;</span><br><span class="line">&#123;% endgallery %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% gallery url,https://xxxx.com/sss.json,true,,10 %&#125;</span><br><span class="line">&#123;% endgallery %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div></div><div class="tab-item-content" id="gallery-2"><p><ul></p><p><li><p>gallerygroup 相册图库</p></p><p><p>| 参数名      | 释义                 |<br>| :————— | :—————————- |<br>| name        | 图库名字             |<br>| description | 图库描述             |<br>| link        | 链接到对应相册的地址 |<br>| img-url     | 图库封面             |</p><br>&lt;/li&gt;<br>&lt;/ul&gt;</p><div class="note info flat"><p>思维拓展一下，相册图库的实质其实就是个快捷方式，可以自定义添加描述、封面、链接。那么我们未必要把它当做一个相册，完全可以作为一个链接卡片，链接到视频、QQ、友链都是不错的选择。</p></div><ul><li>gallery 相册<br>区别于旧版的 Gallery 相册,新的 Gallery 相册会自动根据图片长度进行排版，书写也更加方便，与 markdown 格式一样。可根据需要插入到相应的 md。无需再自己配置长宽。<strong>建议在粘贴时故意使用长短、大小、横竖不一的图片</strong>，会有更好的效果。（尺寸完全相同的图片只会平铺输出，效果很糟糕）</li></ul><div class="tabs" id="gallery相册参数"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="gallery相册参数-1">本地</button><button type="button" class="tab " data-href="gallery相册参数-2">远程</button></ul><div class="tab-contents"><div class="tab-item-content active" id="gallery相册参数-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">&#123;% gallery %&#125;</span><br><span class="line">markdown 图片格式</span><br><span class="line">&#123;% endgallery %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% gallery true,220,10 %&#125;</span><br><span class="line">markdown 图片格式</span><br><span class="line">&#123;% endgallery %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% gallery true,,10 %&#125;</span><br><span class="line">markdown 图片格式</span><br><span class="line">&#123;% endgallery %&#125;</span><br></pre></td></tr></table></figure><div class="table-container"><table><thead><tr><th>参数名</th><th>释义</th></tr></thead><tbody><tr><td>lazyload</td><td>【可选】点击按钮加载更多图片，填写 true/false。默认为 <code>false</code>。</td></tr><tr><td>rowHeight</td><td>【可选】图片显示的高度，如果需要一行显示更多的图片，可设置更小的数字。默认为 <code>220</code>。</td></tr><tr><td>limit</td><td>【可选】每次加载多少张照片。默认为 <code>10</code>。</td></tr></tbody></table></div></div><div class="tab-item-content" id="gallery相册参数-2"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">&#123;% gallery url,[link],[lazyload],[rowHeight],[limit] %&#125;</span><br><span class="line">&#123;% endgallery %&#125;</span><br></pre></td></tr></table></figure><div class="table-container"><table><thead><tr><th>参数名</th><th>释义</th></tr></thead><tbody><tr><td>url</td><td>【必须】 识别词</td></tr><tr><td>link</td><td>【必须】远程的 json 链接</td></tr><tr><td>lazyload</td><td>【可选】点击按钮加载更多图片，填写 true/false。默认为 <code>false</code>。</td></tr><tr><td>rowHeight</td><td>【可选】图片显示的高度，如果需要一行显示更多的图片，可设置更小的数字。默认为 <code>220</code>。</td></tr><tr><td>limit</td><td>【可选】每次加载多少张照片。默认为 <code>10</code>。</td></tr></tbody></table></div><blockquote><p>远程链接 Json 的例子</p></blockquote><p>有三个参数，<code>url</code>是必须存在的，<code>alt</code> 和 <code>title</code> 可有，也可没有。</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">[</span></span><br><span class="line">  <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://cdn1.tianli0.top/gh/jerryc127/CDN/img/IMG_0556.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;alt&quot;</span><span class="punctuation">:</span> <span class="string">&quot;IMG_0556.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;title&quot;</span><span class="punctuation">:</span> <span class="string">&quot;这是title&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://cdn1.tianli0.top/gh/jerryc127/CDN/img/IMG_0472.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;alt&quot;</span><span class="punctuation">:</span> <span class="string">&quot;IMG_0472.jpg&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://cdn1.tianli0.top/gh/jerryc127/CDN/img/IMG_0453.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;alt&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://cdn1.tianli0.top/gh/jerryc127/CDN/img/IMG_0931.jpg&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;alt&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">]</span></span><br></pre></td></tr></table></figure><blockquote><p>示例</p></blockquote><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">&#123;% gallery url,https://xxxx.com/sss.json %&#125;</span><br><span class="line">&#123;% endgallery %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% gallery url,https://xxxx.com/sss.json,true,220,10 %&#125;</span><br><span class="line">&#123;% endgallery %&#125;</span><br><span class="line"></span><br><span class="line">&#123;% gallery url,https://xxxx.com/sss.json,true,,10 %&#125;</span><br><span class="line">&#123;% endgallery %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div></div><div class="tab-item-content active" id="gallery-3"><p><ul></p><p><li>gallerygroup 相册图库</li><br>&lt;/ul&gt;</p><div class="gallery-group-main">  <figure class="gallery-group">  <img class="gallery-group-img no-lightbox" src='https://bu.dusays.com/2023/06/01/64788f24d05bd.webp' alt="Group Image Gallery">  <figcaption>  <div class="gallery-group-name">MC</div>  <p>在Rikkaの六花服务器里留下的足迹</p>  <a href='/wordScenery/'></a>  </figcaption>  </figure>  <figure class="gallery-group">  <img class="gallery-group-img no-lightbox" src='https://bu.dusays.com/2023/06/01/64788f456fc3d.webp' alt="Group Image Gallery">  <figcaption>  <div class="gallery-group-name">Gundam</div>  <p>哦咧哇gundam哒！</p>  <a href='/thousand/'></a>  </figcaption>  </figure>  <figure class="gallery-group">  <img class="gallery-group-img no-lightbox" src='https://bu.dusays.com/2023/06/01/64788f83e5fa1.webp' alt="Group Image Gallery">  <figcaption>  <div class="gallery-group-name">I-am-Akilar</div>  <p>某种意义上也算自拍吧</p>  <a href='/wallpaper/'></a>  </figcaption>  </figure></div><p><ul></p><p><li>gallery 相册</li><br>&lt;/ul&gt;</p><div class="gallery">  <div class="fj-gallery page_img_lazyload lazyload btn_album_detail_lazyload data" data-rowHeight="220" data-limit="2">    <span class="gallery-data">[{"url":"https://bu.dusays.com/2023/06/01/647896b15759c.jpg","alt":""},{"url":"https://bu.dusays.com/2023/06/01/647896cabde59.jpg","alt":""},{"url":"https://bu.dusays.com/2023/06/01/647896eb0f3ea.jpg","alt":""},{"url":"https://bu.dusays.com/2023/06/01/647896ed810b3.jpg","alt":""},{"url":"https://i.loli.net/2019/12/25/6nepIJ1xTgufatZ.jpg","alt":""},{"url":"https://i.loli.net/2019/12/25/E7Jvr4eIPwUNmzq.jpg","alt":""},{"url":"https://i.loli.net/2019/12/25/mh19anwBSWIkGlH.jpg","alt":""},{"url":"https://i.loli.net/2019/12/25/2tu9JC8ewpBFagv.jpg","alt":""}]</span>  </div><button class="gallery-load-more" style="opacity:0">  <span>加载更多</span>  <i class="anzhiyufont anzhiyu-icon-arrow-down"></i>  </button></div></div><div class="tab-item-content" id="gallery-4"><p><div class="note info flat"><p>对于很多同学提问的<code>gallerygroup</code>和<code>gallery</code>相册页的链接问题。这里说下我个人的使用习惯。<br>一般使用相册图库的话，可以在导航栏加一个 gallery 的 page(<strong>使用指令<code>hexo new page gallery</code>添加</strong>)，里面放相册图库作为封面。然后在<code>[Blogroot]/source/gallery/</code>下面建立相应的文件夹，例如若按照这里的示例，若欲使用<code>/gallery/MC/</code>路径访问 MC 相册，则需要新建<code>[Blogroot]/source/gallery/MC/index.md</code>，并在里面填入<code>gallery</code>相册内容。</p></p><p><p>注意 ⚠️：本站相册集为单独优化，可参考<a href="https://anheyu.com/posts/220c.html">配置相册页面</a>。</p><br>&lt;/div&gt;</p><ol><li><p>gallerygroup 相册图库</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="language-xml"><span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;gallery-group-main&quot;</span>&gt;</span></span></span><br><span class="line"> &#123;% galleryGroup MC 在Rikkaの六花服务器里留下的足迹 &#x27;/wordScenery/&#x27; https://bu.dusays.com/2023/06/01/64788f24d05bd.webp %&#125;</span><br><span class="line"> &#123;% galleryGroup Gundam 哦咧哇gundam哒！ &#x27;/thousand/&#x27; https://bu.dusays.com/2023/06/01/64788f456fc3d.webp %&#125;</span><br><span class="line"> &#123;% galleryGroup I-am-Akilar 某种意义上也算自拍吧 &#x27;/wallpaper/&#x27; https://bu.dusays.com/2023/06/01/64788f83e5fa1.webp %&#125;</span><br><span class="line"><span class="language-xml"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span></span><br></pre></td></tr></table></figure></li><li><p>gallery 相册</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">&#123;% gallery true,,2 %&#125;</span><br><span class="line">![](<span class="link">https://bu.dusays.com/2023/06/01/647896b15759c.jpg</span>)</span><br><span class="line">![](<span class="link">https://bu.dusays.com/2023/06/01/647896cabde59.jpg</span>)</span><br><span class="line">![](<span class="link">https://bu.dusays.com/2023/06/01/647896eb0f3ea.jpg</span>)</span><br><span class="line">![](<span class="link">https://bu.dusays.com/2023/06/01/647890012b1ec.webp</span>)</span><br><span class="line">![](<span class="link">https://i.loli.net/2019/12/25/6nepIJ1xTgufatZ.jpg</span>)</span><br><span class="line">![](<span class="link">https://i.loli.net/2019/12/25/E7Jvr4eIPwUNmzq.jpg</span>)</span><br><span class="line">![](<span class="link">https://i.loli.net/2019/12/25/mh19anwBSWIkGlH.jpg</span>)</span><br><span class="line">![](<span class="link">https://i.loli.net/2019/12/25/2tu9JC8ewpBFagv.jpg</span>)</span><br><span class="line">&#123;% endgallery %&#125;</span><br></pre></td></tr></table></figure></li></ol></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="tag-hide"><a href="#tag-hide" class="headerlink" title="tag-hide"></a>tag-hide</h2><div class="note blue anzhiyufont anzhiyu-icon-bullhorn flat"><p>如果你想把一些文字、内容隐藏起来，并提供按钮让用户点击显示。可以使用这个标签外挂。<br>请注意，tag-hide内的标签外挂content内都不建议有h1 - h6 等标题。因为Toc会把隐藏内容标题也显示出来，而且当滚动屏幕时，如果隐藏内容没有显示出来，会导致Toc的滚动出现异常。</p></div><div class="tabs" id="tag-hide"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="tag-hide-1">inline</button><button type="button" class="tab " data-href="tag-hide-2">Block</button><button type="button" class="tab " data-href="tag-hide-3">Toggle</button></ul><div class="tab-contents"><div class="tab-item-content active" id="tag-hide-1"><p><code>inline</code> 在文本里面添加按钮隐藏内容，只限文字</p><p>( content不能包含英文逗号，可用<code>&amp;sbquo;</code>)</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% hideInline content,display,bg,color %&#125;</span><br></pre></td></tr></table></figure><ul><li><p>content: 文本内容</p></li><li><p>display: 按钮显示的文字(可选)</p></li><li><p>bg: 按钮的背景颜色(可选)</p></li><li><p>color: 按钮文字的颜色(可选)</p></li></ul><blockquote><p>Demo<br><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">哪个英文字母最酷？ &#123;% hideInline 因为西装裤(C装酷),查看答案,#FF7242,#fff %&#125;</span><br><span class="line"></span><br><span class="line">门里站着一个人? &#123;% hideInline 闪 %&#125;</span><br></pre></td></tr></table></figure></p></blockquote><p>哪个英文字母最酷？ <span class="hide-inline"><button type="button" class="hide-button" style="background-color: #FF7242;color: #fff">查看答案  </button><span class="hide-content">因为西装裤(C装酷)</span>&lt;/span&gt;</p><p>门里站着一个人? <span class="hide-inline"><button type="button" class="hide-button" style="">Click  </button><span class="hide-content">闪</span>&lt;/span&gt;</p></div><div class="tab-item-content" id="tag-hide-2"><p><code>block</code>独立的block隐藏内容，可以隐藏很多内容，包括图片，代码块等等</p><p>( display 不能包含英文逗号，可用<code>&amp;sbquo;</code>)</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&#123;% hideBlock display,bg,color %&#125;</span><br><span class="line">content</span><br><span class="line">&#123;% endhideBlock %&#125;</span><br></pre></td></tr></table></figure><ul><li><p>content: 文本内容</p></li><li><p>display: 按钮显示的文字(可选)</p></li><li><p>bg: 按钮的背景颜色(可选)</p></li><li><p>color: 按钮文字的颜色(可选)</p></li></ul><blockquote><p>Demo</p></blockquote><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">查看答案</span><br><span class="line">&#123;% hideBlock 查看答案 %&#125;</span><br><span class="line">傻子，怎么可能有答案</span><br><span class="line">&#123;% endhideBlock %&#125;</span><br></pre></td></tr></table></figure><p>查看答案</p><div class="hide-block"><button type="button" class="hide-button" style="">查看答案    </button><div class="hide-content"><p>傻子，怎么可能有答案</p></div></div></div><div class="tab-item-content" id="tag-hide-3"><p>如果你需要展示的内容太多，可以把它隐藏在收缩框里，需要时再把它展开。</p><p>( display 不能包含英文逗号，可用<code>&amp;sbquo;</code>)</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&#123;% hideToggle display,bg,color %&#125;</span><br><span class="line">content</span><br><span class="line">&#123;% endhideToggle %&#125;</span><br></pre></td></tr></table></figure><blockquote><p>Demo</p></blockquote><details class="toggle" ><summary class="toggle-button" style="">AnZhiYu主题安装方法</summary><div class="toggle-content"><p>在你的博客根目录里</p><p>git clone -b master <a href="https://github.com/anzhiyu-c/hexo-theme-anzhiyu.git">https://github.com/anzhiyu-c/hexo-theme-anzhiyu.git</a> themes/anzhiyu</p><p>如果想要安装比较新的dev分支，可以</p><p>git clone -b dev <a href="https://github.com/anzhiyu-c/hexo-theme-anzhiyu.git">https://github.com/anzhiyu-c/hexo-theme-anzhiyu.git</a> themes/anzhiyu</p></div></details></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="链接卡片-link"><a href="#链接卡片-link" class="headerlink" title="链接卡片 link"></a>链接卡片 link</h2><div class="tabs" id="link"><ul class="nav-tabs"><button type="button" class="tab " data-href="link-1">标签语法</button><button type="button" class="tab  active" data-href="link-2">样式预览</button><button type="button" class="tab " data-href="link-3">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="link-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% link 标题, 站点描述, 链接, 图片链接（可选） %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content active" id="link-2"><div calss='anzhiyu-tag-link'><a class="tag-Link" target="_blank" href="https://github.com/owen0o0/getFavicon">    <div class="tag-link-tips">引用站外地址</div>    <div class="tag-link-bottom">        <div class="tag-link-left" style="">          <i class="anzhiyufont anzhiyu-icon-link" style=""></i>        </div>        <div class="tag-link-right">            <div class="tag-link-title">获取网站的Favicon图标并显示在你的网页上</div>            <div class="tag-link-sitename">owen0o0</div>        </div>        <i class="anzhiyufont anzhiyu-icon-angle-right"></i>    </div>    </a></div></div><div class="tab-item-content" id="link-3"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% link 获取网站的Favicon图标并显示在你的网页上,owen0o0,https://github.com/owen0o0/getFavicon %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="单选列表-radio"><a href="#单选列表-radio" class="headerlink" title="单选列表 radio"></a>单选列表 radio</h2><div class="tabs" id="radio"><ul class="nav-tabs"><button type="button" class="tab " data-href="radio-1">标签语法</button><button type="button" class="tab " data-href="radio-2">配置参数</button><button type="button" class="tab  active" data-href="radio-3">样式预览</button><button type="button" class="tab " data-href="radio-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="radio-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% radio 样式参数（可选）, 文本（支持简单md） %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="radio-2"><ol><li>颜色: <span class='p red'>red</span>,<span class='p yellow'>yellow</span>,<span class='p green'>green</span>,<span class='p cyan'>cyan</span>,<span class='p blue'>blue</span>,<span class='p gray'>gray</span></li><li>选中状态: checked</li></ol></div><div class="tab-item-content active" id="radio-3"><div class='checkbox'><input type="radio" />            <p>纯文本测试</p>            </div>   <div class='checkbox checked'><input type="radio" checked="checked"/>            <p>支持简单的 <a href="https://guides.github.com/features/mastering-markdown/">markdown</a> 语法</p>            </div>   <div class='checkbox red'><input type="radio" />            <p>支持自定义颜色</p>            </div>   <div class='checkbox green'><input type="radio" />            <p>绿色</p>            </div>   <div class='checkbox yellow'><input type="radio" />            <p>黄色</p>            </div>   <div class='checkbox cyan'><input type="radio" />            <p>青色</p>            </div>   <div class='checkbox blue'><input type="radio" />            <p>蓝色</p>            </div></div><div class="tab-item-content" id="radio-4"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% radio 纯文本测试 %&#125;</span><br><span class="line">&#123;% radio checked, 支持简单的 [<span class="string">markdown</span>](<span class="link">https://guides.github.com/features/mastering-markdown/</span>) 语法 %&#125;</span><br><span class="line">&#123;% radio red, 支持自定义颜色 %&#125;</span><br><span class="line">&#123;% radio green, 绿色 %&#125;</span><br><span class="line">&#123;% radio yellow, 黄色 %&#125;</span><br><span class="line">&#123;% radio cyan, 青色 %&#125;</span><br><span class="line">&#123;% radio blue, 蓝色 %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="上标标签-tip"><a href="#上标标签-tip" class="headerlink" title="上标标签 tip"></a>上标标签 tip</h2><div class="tip cogs"><p>主要样式参考自<a href="https://www.antmoe.com/posts/3b43914f/">小康的 butterfly 渐变背景标签</a></p></div><div class="tabs" id="tip"><ul class="nav-tabs"><button type="button" class="tab " data-href="tip-1">标签语法</button><button type="button" class="tab " data-href="tip-2">配置参数</button><button type="button" class="tab  active" data-href="tip-3">样式预览</button><button type="button" class="tab " data-href="tip-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="tip-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% tip [参数，可选] %&#125;文本内容&#123;% endtip %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="tip-2"><ol><li>样式: success,error,warning,bolt,ban,home,sync,cogs,key,bell</li><li>自定义图标: 支持 fontawesome。</li></ol></div><div class="tab-item-content active" id="tip-3"><div class="tip "><p>default</p></div><div class="tip info"><p>info</p></div><div class="tip success"><p>success</p></div><div class="tip error"><p>error</p></div><div class="tip warning"><p>warning</p></div><div class="tip bolt"><p>bolt</p></div><div class="tip ban"><p>ban</p></div><div class="tip home"><p>home</p></div><div class="tip sync"><p>sync</p></div><div class="tip cogs"><p>cogs</p></div><div class="tip key"><p>key</p></div><div class="tip bell"><p>bell</p></div><div class="tip fa-atom"><p>自定义 font awesome 图标</p></div></div><div class="tab-item-content" id="tip-4"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">&#123;% tip %&#125;default&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip info %&#125;info&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip success %&#125;success&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip error %&#125;error&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip warning %&#125;warning&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip bolt %&#125;bolt&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip ban %&#125;ban&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip home %&#125;home&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip sync %&#125;sync&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip cogs %&#125;cogs&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip key %&#125;key&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip bell %&#125;bell&#123;% endtip %&#125;</span><br><span class="line">&#123;% tip fa-atom %&#125;自定义 font awesome 图标&#123;% endtip %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="Note-Bootstrap-Callout"><a href="#Note-Bootstrap-Callout" class="headerlink" title="Note (Bootstrap Callout)"></a>Note (Bootstrap Callout)</h2><div class="tabs" id="note"><ul class="nav-tabs"><button type="button" class="tab " data-href="note-1">通用配置</button><button type="button" class="tab " data-href="note-2">语法格式</button><button type="button" class="tab " data-href="note-3">配置参数</button><button type="button" class="tab  active" data-href="note-4">样式预览</button><button type="button" class="tab " data-href="note-5">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="note-1"><p>修改主题配置文件</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">note:</span></span><br><span class="line">  <span class="comment"># Note tag style values:</span></span><br><span class="line">  <span class="comment">#  - simple    bs-callout old alert style. Default.</span></span><br><span class="line">  <span class="comment">#  - modern    bs-callout new (v2-v3) alert style.</span></span><br><span class="line">  <span class="comment">#  - flat      flat callout style with background, like on Mozilla or StackOverflow.</span></span><br><span class="line">  <span class="comment">#  - disabled  disable all CSS styles import of note tag.</span></span><br><span class="line">  <span class="attr">style:</span> <span class="string">simple</span></span><br><span class="line">  <span class="attr">icons:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">border_radius:</span> <span class="number">3</span></span><br><span class="line">  <span class="comment"># Offset lighter of background in % for modern and flat styles (modern: -12 | 12; flat: -18 | 6).</span></span><br><span class="line">  <span class="comment"># Offset also applied to label tag variables. This option can work with disabled note tag.</span></span><br><span class="line">  <span class="attr">light_bg_offset:</span> <span class="number">0</span></span><br></pre></td></tr></table></figure><p><code>Note</code>标签外挂有两种用法。<code>icons</code>和<code>light_bg_offset</code>只对方法一生效。</p><p><code>fontawesome</code>图标需开启主题配置文件中<code>icons.fontawesome</code></p></div><div class="tab-item-content" id="note-2"><p><code>方法一</code></p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note [class] [no-icon] [style] %&#125;</span><br><span class="line">Any content (support inline tags too.io).</span><br><span class="line">&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure><p><code>方法二</code></p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note [color] [icon] [style] %&#125;</span><br><span class="line">Any content (support inline tags too.io).</span><br><span class="line">&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="note-3"><p><code>方法一</code></p><div class="table-container"><table><thead><tr><th style="text-align:left">参数</th><th style="text-align:left">用法</th></tr></thead><tbody><tr><td style="text-align:left">class</td><td style="text-align:left">【可选】标识，不同的标识有不同的配色<br>（ default / primary / success / info / warning / danger ）</td></tr><tr><td style="text-align:left">no-icon</td><td style="text-align:left">【可选】不显示 icon</td></tr><tr><td style="text-align:left">style</td><td style="text-align:left">【可选】可以覆盖配置中的 style<br>（simple/modern/flat/disabled）</td></tr></tbody></table></div><p><code>方法二</code><br>|参数|用法|<br>|:—|:——————-|<br>|class|【可选】标识，不同的标识有不同的配色<br>（ default / blue / pink / red / purple / orange / green ）|<br>|no-icon|【可选】可配置自定义 icon (支持 fontawesome 图标和主题内置的阿里图标,<code>fontawesome</code>图标需开启主题配置文件中<code>icons.fontawesome</code>, 也可以配置 no-icon )|<br>|style| 【可选】可以覆盖配置中的 style<br>（simple/modern/flat/disabled）|</p></div><div class="tab-item-content active" id="note-4"><p><code>方法一</code></p><ol><li><code>simple</code>样式</li></ol><div class="note simple"><p>默认 提示块标签</p></div><div class="note default simple"><p>default 提示块标签</p></div><div class="note primary simple"><p>primary 提示块标签</p></div><div class="note success simple"><p>success 提示块标签</p></div><div class="note info simple"><p>info 提示块标签</p></div><div class="note warning simple"><p>warning 提示块标签</p></div><div class="note danger simple"><p>danger 提示块标签</p></div><ol><li><code>modern</code>样式</li></ol><div class="note modern"><p>默认 提示块标签</p></div><div class="note default modern"><p>default 提示块标签</p></div><div class="note primary modern"><p>primary 提示块标签</p></div><div class="note success modern"><p>success 提示块标签</p></div><div class="note info modern"><p>info 提示块标签</p></div><div class="note warning modern"><p>warning 提示块标签</p></div><div class="note danger modern"><p>danger 提示块标签</p></div><ol><li><code>flat</code>样式</li></ol><div class="note flat"><p>默认 提示块标签</p></div><div class="note default flat"><p>default 提示块标签</p></div><div class="note primary flat"><p>primary 提示块标签</p></div><div class="note success flat"><p>success 提示块标签</p></div><div class="note info flat"><p>info 提示块标签</p></div><div class="note warning flat"><p>warning 提示块标签</p></div><div class="note danger flat"><p>danger 提示块标签</p></div><ol><li><code>disabled</code>样式</li></ol><div class="note disabled"><p>默认 提示块标签</p></div><div class="note default disabled"><p>default 提示块标签</p></div><div class="note primary disabled"><p>primary 提示块标签</p></div><div class="note success disabled"><p>success 提示块标签</p></div><div class="note info disabled"><p>info 提示块标签</p></div><div class="note warning disabled"><p>warning 提示块标签</p></div><div class="note danger disabled"><p>danger 提示块标签</p></div><ol><li><code>no-icon</code>样式</li></ol><div class="note no-icon flat"><p>默认 提示块标签</p></div><div class="note default no-icon flat"><p>default 提示块标签</p></div><div class="note primary no-icon flat"><p>primary 提示块标签</p></div><div class="note success no-icon flat"><p>success 提示块标签</p></div><div class="note info no-icon flat"><p>info 提示块标签</p></div><div class="note warning no-icon flat"><p>warning 提示块标签</p></div><div class="note danger no-icon flat"><p>danger 提示块标签</p></div><p><code>方法二</code></p><p>图标支持 <code>fontawesome</code> 和 <code>主题内置的阿里图标</code>，使用方法为加上对应的类名，<code>fontawesome</code>图标需开启主题配置文件中<code>icons.fontawesome</code>，默认未开启 fontawesome</p><ol><li>simple 样式</li></ol><p><code>主题内置阿里图标</code></p><div class="note anzhiyufont anzhiyu-icon-rocket simple"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue anzhiyufont anzhiyu-icon-bullhorn simple"><p>2022 年快到了….</p></div><div class="note pink anzhiyufont anzhiyu-icon-instagram simple"><p>小心开车 安全至上</p></div><div class="note red anzhiyufont anzhiyu-icon-fan simple"><p>这是三片呢？还是四片？</p></div><div class="note orange anzhiyufont anzhiyu-icon-dengpao simple"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple anzhiyufont anzhiyu-icon-sanmingzhi simple"><p>剪刀石头布</p></div><div class="note green anzhiyufont anzhiyu-icon-ic_train simple"><p>前端最讨厌的浏览器</p></div><p><code>fontawesome 图标</code>，开启主题配置文件中的<code>icons.fontawesome</code>为<code>true</code>后可见</p><div class="note icon-padding simple"><i class="note-icon fab fa-cc-visa"></i><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue icon-padding simple"><i class="note-icon fas fa-bullhorn"></i><p>2022 年快到了….</p></div><div class="note pink icon-padding simple"><i class="note-icon fas fa-car-crash"></i><p>小心开车 安全至上</p></div><div class="note red icon-fan simple"><p>这是三片呢？还是四片？</p></div><div class="note orange icon-padding simple"><i class="note-icon fas fa-battery-half"></i><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple icon-padding simple"><i class="note-icon far fa-hand-scissors"></i><p>剪刀石头布</p></div><div class="note green icon-padding simple"><i class="note-icon fab fa-internet-explorer"></i><p>前端最讨厌的浏器</p></div><ol><li>modern 样式</li></ol><p><code>主题内置阿里图标</code></p><div class="note anzhiyufont anzhiyu-icon-rocket modern"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue anzhiyufont anzhiyu-icon-bullhorn modern"><p>2022 年快到了….</p></div><div class="note pink anzhiyufont anzhiyu-icon-instagram modern"><p>小心开车 安全至上</p></div><div class="note red anzhiyufont anzhiyu-icon-fan modern"><p>这是三片呢？还是四片？</p></div><div class="note orange anzhiyufont anzhiyu-icon-dengpao modern"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple anzhiyufont anzhiyu-icon-sanmingzhi modern"><p>剪刀石头布</p></div><div class="note green anzhiyufont anzhiyu-icon-ic_train modern"><p>前端最讨厌的浏览器</p></div><p><code>fontawesome 图标</code>，开启主题配置文件中的<code>icons.fontawesome</code>为<code>true</code>后可见</p><div class="note icon-padding modern"><i class="note-icon fab fa-cc-visa"></i><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue icon-padding modern"><i class="note-icon fas fa-bullhorn"></i><p>2021 年快到了….</p></div><div class="note pink icon-padding modern"><i class="note-icon fas fa-car-crash"></i><p>小心开车 安全至上</p></div><div class="note red icon-fan modern"><p>这是三片呢？还是四片？</p></div><div class="note orange icon-padding modern"><i class="note-icon fas fa-battery-half"></i><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple icon-padding modern"><i class="note-icon far fa-hand-scissors"></i><p>剪刀石头布</p></div><div class="note green icon-padding modern"><i class="note-icon fab fa-internet-explorer"></i><p>前端最讨厌的浏览器</p></div><ol><li>flat 样式</li></ol><p><code>主题内置阿里图标</code></p><div class="note anzhiyufont anzhiyu-icon-rocket flat"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue anzhiyufont anzhiyu-icon-bullhorn flat"><p>2022 年快到了….</p></div><div class="note pink anzhiyufont anzhiyu-icon-instagram flat"><p>小心开车 安全至上</p></div><div class="note red anzhiyufont anzhiyu-icon-fan flat"><p>这是三片呢？还是四片？</p></div><div class="note orange anzhiyufont anzhiyu-icon-dengpao flat"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple anzhiyufont anzhiyu-icon-sanmingzhi flat"><p>剪刀石头布</p></div><div class="note green anzhiyufont anzhiyu-icon-ic_train flat"><p>前端最讨厌的浏览器</p></div><p><code>fontawesome 图标</code>，开启主题配置文件中的<code>icons.fontawesome</code>为<code>true</code>后可见</p><div class="note icon-padding flat"><i class="note-icon fab fa-cc-visa"></i><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue icon-padding flat"><i class="note-icon fas fa-bullhorn"></i><p>2021 年快到了….</p></div><div class="note pink icon-padding flat"><i class="note-icon fas fa-car-crash"></i><p>小心开车 安全至上</p></div><div class="note red icon-fan flat"><p>这是三片呢？还是四片？</p></div><div class="note orange icon-padding flat"><i class="note-icon fas fa-battery-half"></i><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple icon-padding flat"><i class="note-icon far fa-hand-scissors"></i><p>剪刀石头布</p></div><div class="note green icon-padding flat"><i class="note-icon fab fa-internet-explorer"></i><p>前端最讨厌的浏览器</p></div><ol><li>disabled 样式</li></ol><p><code>主题内置阿里图标</code></p><div class="note anzhiyufont anzhiyu-icon-rocket disabled"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue anzhiyufont anzhiyu-icon-bullhorn disabled"><p>2022 年快到了….</p></div><div class="note pink anzhiyufont anzhiyu-icon-instagram disabled"><p>小心开车 安全至上</p></div><div class="note red anzhiyufont anzhiyu-icon-fan disabled"><p>这是三片呢？还是四片？</p></div><div class="note orange anzhiyufont anzhiyu-icon-dengpao disabled"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple anzhiyufont anzhiyu-icon-sanmingzhi disabled"><p>剪刀石头布</p></div><div class="note green anzhiyufont anzhiyu-icon-ic_train disabled"><p>前端最讨厌的浏览器</p></div><p><code>fontawesome 图标</code>，开启主题配置文件中的<code>icons.fontawesome</code>为<code>true</code>后可见</p><div class="note icon-padding disabled"><i class="note-icon fab fa-cc-visa"></i><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue icon-padding disabled"><i class="note-icon fas fa-bullhorn"></i><p>2021 年快到了….</p></div><div class="note pink icon-padding disabled"><i class="note-icon fas fa-car-crash"></i><p>小心开车 安全至上</p></div><div class="note red icon-fan disabled"><p>这是三片呢？还是四片？</p></div><div class="note orange icon-padding disabled"><i class="note-icon fas fa-battery-half"></i><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple icon-padding disabled"><i class="note-icon far fa-hand-scissors"></i><p>剪刀石头布</p></div><div class="note green icon-padding disabled"><i class="note-icon fab fa-internet-explorer"></i><p>前端最讨厌的浏览器</p></div><ol><li>no-icon 样式</li></ol><div class="note no-icon flat"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note blue no-icon flat"><p>2021 年快到了….</p></div><div class="note pink no-icon flat"><p>小心开车 安全至上</p></div><div class="note red no-icon flat"><p>这是三片呢？还是四片？</p></div><div class="note orange no-icon flat"><p>你是刷 Visa 还是 UnionPay</p></div><div class="note purple no-icon flat"><p>剪刀石头布</p></div><div class="note green no-icon flat"><p>前端最讨厌的浏览器</p></div></div><div class="tab-item-content" id="note-5"><p><code>方法一</code></p><ol><li><code>simple</code>样式</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note simple %&#125;默认 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note default simple %&#125;default 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note primary simple %&#125;primary 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note success simple %&#125;success 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note info simple %&#125;info 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note warning simple %&#125;warning 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note danger simple %&#125;danger 提示块标签&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure><ol><li><code>modern</code>样式</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note modern %&#125;默认 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note default modern %&#125;default 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note primary modern %&#125;primary 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note success modern %&#125;success 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note info modern %&#125;info 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note warning modern %&#125;warning 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note danger modern %&#125;danger 提示块标签&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure><ol><li><code>flat</code>样式</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note flat %&#125;默认 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note default flat %&#125;default 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note primary flat %&#125;primary 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note success flat %&#125;success 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note info flat %&#125;info 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note warning flat %&#125;warning 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note danger flat %&#125;danger 提示块标签&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure><ol><li><code>disabled</code>样式</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note disabled %&#125;默认 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note default disabled %&#125;default 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note primary disabled %&#125;primary 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note success disabled %&#125;success 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note info disabled %&#125;info 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note warning disabled %&#125;warning 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note danger disabled %&#125;danger 提示块标签&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure><ol><li><code>no-icon</code>样式</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note no-icon %&#125;默认 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note default no-icon %&#125;default 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note primary no-icon %&#125;primary 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note success no-icon %&#125;success 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note info no-icon %&#125;info 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note warning no-icon %&#125;warning 提示块标签&#123;% endnote %&#125;</span><br><span class="line">&#123;% note danger no-icon %&#125;danger 提示块标签&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure><p><code>方法二</code></p><p>图标支持 <code>fontawesome</code> 和 <code>主题内置的阿里图标</code>，使用方法为加上对应的类名，<code>fontawesome</code>图标需开启主题配置文件中<code>icons.fontawesome</code>，默认未开启 fontawesome</p><ol><li><p>simple 样式<br><code>主题内置阿里图标</code></p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note &#x27;anzhiyufont anzhiyu-icon-rocket&#x27; simple %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue &#x27;anzhiyufont anzhiyu-icon-bullhorn&#x27; simple %&#125;2022 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink &#x27;anzhiyufont anzhiyu-icon-instagram&#x27; simple %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red &#x27;anzhiyufont anzhiyu-icon-fan&#x27; simple%&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange &#x27;anzhiyufont anzhiyu-icon-dengpao&#x27; simple %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple &#x27;anzhiyufont anzhiyu-icon-sanmingzhi&#x27; simple %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green &#x27;anzhiyufont anzhiyu-icon-ic<span class="emphasis">_train&#x27; simple %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span></span><br></pre></td></tr></table></figure><p><code>fontawesome 图标</code>，开启主题配置文件中的<code>icons.fontawesome</code>为<code>true</code>后可见</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note &#x27;fab fa-cc-visa&#x27; simple %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue &#x27;fas fa-bullhorn&#x27; simple %&#125;2022 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink &#x27;fas fa-car-crash&#x27; simple %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red &#x27;icon-fan&#x27; simple%&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange &#x27;fas fa-battery-half&#x27; simple %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple &#x27;far fa-hand-scissors&#x27; simple %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green &#x27;fab fa-internet-explorer&#x27; simple %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure></li><li><p>modern 样式<br><code>主题内置阿里图标</code></p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note &#x27;anzhiyufont anzhiyu-icon-rocket&#x27; modern %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue &#x27;anzhiyufont anzhiyu-icon-bullhorn&#x27; modern %&#125;2022 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink &#x27;anzhiyufont anzhiyu-icon-instagram&#x27; modern %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red &#x27;anzhiyufont anzhiyu-icon-fan&#x27; modern%&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange &#x27;anzhiyufont anzhiyu-icon-dengpao&#x27; modern %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple &#x27;anzhiyufont anzhiyu-icon-sanmingzhi&#x27; modern %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green &#x27;anzhiyufont anzhiyu-icon-ic<span class="emphasis">_train&#x27; modern %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span></span><br></pre></td></tr></table></figure><p><code>fontawesome 图标</code>，开启主题配置文件中的<code>icons.fontawesome</code>为<code>true</code>后可见</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note &#x27;fab fa-cc-visa&#x27; modern %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue &#x27;fas fa-bullhorn&#x27; modern %&#125;2021 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink &#x27;fas fa-car-crash&#x27; modern %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red &#x27;icon-fan&#x27; modern%&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange &#x27;fas fa-battery-half&#x27; modern %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple &#x27;far fa-hand-scissors&#x27; modern %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green &#x27;fab fa-internet-explorer&#x27; modern %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure></li><li><p>flat 样式<br><code>主题内置阿里图标</code></p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note &#x27;anzhiyufont anzhiyu-icon-rocket&#x27; flat %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue &#x27;anzhiyufont anzhiyu-icon-bullhorn&#x27; flat %&#125;2022 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink &#x27;anzhiyufont anzhiyu-icon-instagram&#x27; flat %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red &#x27;anzhiyufont anzhiyu-icon-fan&#x27; flat%&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange &#x27;anzhiyufont anzhiyu-icon-dengpao&#x27; flat %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple &#x27;anzhiyufont anzhiyu-icon-sanmingzhi&#x27; flat %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green &#x27;anzhiyufont anzhiyu-icon-ic<span class="emphasis">_train&#x27; flat %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span></span><br></pre></td></tr></table></figure><p><code>fontawesome 图标</code>，开启主题配置文件中的<code>icons.fontawesome</code>为<code>true</code>后可见</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note &#x27;fab fa-cc-visa&#x27; flat %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue &#x27;fas fa-bullhorn&#x27; flat %&#125;2021 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink &#x27;fas fa-car-crash&#x27; flat %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red &#x27;icon-fan&#x27; flat%&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange &#x27;fas fa-battery-half&#x27; flat %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple &#x27;far fa-hand-scissors&#x27; flat %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green &#x27;fab fa-internet-explorer&#x27; flat %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure></li><li><p>disabled 样式<br><code>主题内置阿里图标</code></p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note &#x27;anzhiyufont anzhiyu-icon-rocket&#x27; disabled %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue &#x27;anzhiyufont anzhiyu-icon-bullhorn&#x27; disabled %&#125;2022 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink &#x27;anzhiyufont anzhiyu-icon-instagram&#x27; disabled %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red &#x27;anzhiyufont anzhiyu-icon-fan&#x27; disabled%&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange &#x27;anzhiyufont anzhiyu-icon-dengpao&#x27; disabled %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple &#x27;anzhiyufont anzhiyu-icon-sanmingzhi&#x27; disabled %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green &#x27;anzhiyufont anzhiyu-icon-ic<span class="emphasis">_train&#x27; disabled %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span></span><br></pre></td></tr></table></figure><p><code>fontawesome 图标</code>，开启主题配置文件中的<code>icons.fontawesome</code>为<code>true</code>后可见</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note &#x27;fab fa-cc-visa&#x27; disabled %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue &#x27;fas fa-bullhorn&#x27; disabled %&#125;2021 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink &#x27;fas fa-car-crash&#x27; disabled %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red &#x27;icon-fan&#x27; disabled %&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange &#x27;fas fa-battery-half&#x27; disabled %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple &#x27;far fa-hand-scissors&#x27; disabled %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green &#x27;fab fa-internet-explorer&#x27; disabled %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure></li><li><p>no-icon 样式</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&#123;% note no-icon %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note blue no-icon %&#125;2021 年快到了....&#123;% endnote %&#125;</span><br><span class="line">&#123;% note pink no-icon %&#125;小心开车 安全至上&#123;% endnote %&#125;</span><br><span class="line">&#123;% note red no-icon %&#125;这是三片呢？还是四片？&#123;% endnote %&#125;</span><br><span class="line">&#123;% note orange no-icon %&#125;你是刷 Visa 还是 UnionPay&#123;% endnote %&#125;</span><br><span class="line">&#123;% note purple no-icon %&#125;剪刀石头布&#123;% endnote %&#125;</span><br><span class="line">&#123;% note green no-icon %&#125;前端最讨厌的浏览器&#123;% endnote %&#125;</span><br></pre></td></tr></table></figure></li></ol></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="音频-audio"><a href="#音频-audio" class="headerlink" title="音频 audio"></a>音频 audio</h2><div class="tabs" id="audio"><ul class="nav-tabs"><button type="button" class="tab " data-href="audio-1">标签语法</button><button type="button" class="tab  active" data-href="audio-2">样式预览</button><button type="button" class="tab " data-href="audio-3">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="audio-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% audio 音频链接 %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content active" id="audio-2"><div class="audio"><audio controls preload><source src='https://npm.elemecdn.com/anzhiyu-music@1.0.4/%E9%9D%92%E8%8A%B1%E7%93%B7/%E9%9D%92%E8%8A%B1%E7%93%B7.mp3' type='audio/mp3'>Your browser does not support the audio tag.</audio></div></div><div class="tab-item-content" id="audio-3"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% audio https://npm.elemecdn.com/anzhiyu-music@1.0.4/%E9%9D%92%E8%8A%B1%E7%93%B7/%E9%9D%92%E8%8A%B1%E7%93%B7.mp3 %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><h2 id="视频-video"><a href="#视频-video" class="headerlink" title="视频 video"></a>视频 video</h2><div class="tabs" id="video"><ul class="nav-tabs"><button type="button" class="tab " data-href="video-1">标签语法</button><button type="button" class="tab " data-href="video-2">参数配置</button><button type="button" class="tab  active" data-href="video-3">样式预览</button><button type="button" class="tab " data-href="video-4">示例源码</button></ul><div class="tab-contents"><div class="tab-item-content" id="video-1"><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% video 视频链接 %&#125;</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="video-2"><ol><li>对其方向：left, center, right</li><li>列数：逗号后面直接写列数，支持 1 ～ 4 列。</li></ol></div><div class="tab-item-content active" id="video-3"><ol><li>100%宽度</li></ol><p><img src="https://bu.dusays.com/2023/06/01/6478a1eeb1386.png" alt="100%宽度"></p><ol><li>50%宽度</li></ol><p><img src="https://bu.dusays.com/2023/06/01/6478a20a5f242.png" alt="50%宽度"></p><ol><li>25%宽度</li></ol><p><img src="https://bu.dusays.com/2023/06/01/6478a22b26088.png" alt="25%宽度"></p></div><div class="tab-item-content" id="video-4"><ol><li>100%宽度</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG<span class="emphasis">_0341.mov %&#125;</span></span><br></pre></td></tr></table></figure><ol><li>50%宽度</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">&#123;% videos, 2 %&#125;</span><br><span class="line">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG<span class="emphasis">_0341.mov %&#125;</span></span><br><span class="line"><span class="emphasis">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_</span>0341.mov %&#125;</span><br><span class="line">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG<span class="emphasis">_0341.mov %&#125;</span></span><br><span class="line"><span class="emphasis">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_</span>0341.mov %&#125;</span><br><span class="line">&#123;% endvideos %&#125;</span><br></pre></td></tr></table></figure><ol><li>25%宽度</li></ol><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">&#123;% videos, 4 %&#125;</span><br><span class="line">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG<span class="emphasis">_0341.mov %&#125;</span></span><br><span class="line"><span class="emphasis">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_</span>0341.mov %&#125;</span><br><span class="line">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG<span class="emphasis">_0341.mov %&#125;</span></span><br><span class="line"><span class="emphasis">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_</span>0341.mov %&#125;</span><br><span class="line">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG<span class="emphasis">_0341.mov %&#125;</span></span><br><span class="line"><span class="emphasis">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_</span>0341.mov %&#125;</span><br><span class="line">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG<span class="emphasis">_0341.mov %&#125;</span></span><br><span class="line"><span class="emphasis">&#123;% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_</span>0341.mov %&#125;</span><br><span class="line">&#123;% endvideos %&#125;</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div>]]></content>
    
    
    <summary type="html">添加大量外挂标签样式。</summary>
    
    
    
    
    <category term="Tag Plugins" scheme="https://happy.sanxiaoxing.cn/tags/Tag-Plugins/"/>
    
    <category term="hexo" scheme="https://happy.sanxiaoxing.cn/tags/hexo/"/>
    
  </entry>
  
  <entry>
    <title>Win必装软件</title>
    <link href="https://happy.sanxiaoxing.cn/posts/fb2e31d6.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/fb2e31d6.html</id>
    <published>2023-11-30T09:48:09.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<h1 id="重要声明"><a href="#重要声明" class="headerlink" title="重要声明"></a>重要声明</h1><div class="tip bell"><p>此工具仅供个人学习使用，请在学习后24小时内删除。若有侵权，请联系我，我会及时删除。</p></div><h1 id="必装软件"><a href="#必装软件" class="headerlink" title="必装软件"></a>必装软件</h1><h2 id="win必装软件"><a href="#win必装软件" class="headerlink" title="win必装软件"></a>win必装软件</h2><div class="flink"><div class="flink-name">必装软件官网</div> <div class="flink-list"><div class="anzhiyu-flink-list">            <div class="flink-list-item">              <a href="https://7-zip.org/" title="7z" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://th.bing.com/th?id=ODLS.a294175c-71aa-4157-9ca2-282d16feec4f&w=32&h=32&qlt=90&pcl=fffffa&o=6&pid=1.2" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="7z" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">7z</div>                  <div class="flink-item-desc" title="超强的解压工具">超强的解压工具</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://geekuninstaller.com/" title="geek" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://ts3.cn.mm.bing.net/th?id=ODLS.9ff57567-6b87-4b97-a9db-7e0e0a49761e&w=32&h=32&qlt=90&pcl=fffffa&o=6&pid=1.2" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="geek" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">geek</div>                  <div class="flink-item-desc" title="超强软件删除工具">超强软件删除工具</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://www.internetdownloadmanager.com/" title="IDM" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://th.bing.com/th?id=ODLS.fb5fc563-d056-4a5e-b30f-592a2a7394d6&w=32&h=32&qlt=90&pcl=fffffa&o=6&pid=1.2images/idman_logos.png" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="IDM" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">IDM</div>                  <div class="flink-item-desc" title="超强的下载工具">超强的下载工具</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://www.microsoft.com/zh-cn/software-download/windows10" title="Windows10" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://th.bing.com/th?id=ODLS.f9daea21-9936-4164-815f-b5209459f3c6&w=32&h=32&qlt=90&pcl=fffffa&o=6&pid=1.2" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Windows10" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Windows10</div>                  <div class="flink-item-desc" title="电脑的开始">电脑的开始</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://typoraio.cn/" title="Typora" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://typoraio.cn/img/favicon-128.png" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Typora" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Typora</div>                  <div class="flink-item-desc" title="超强Markdown编辑器">超强Markdown编辑器</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://otp.landian.vip/zh-cn/" title="Office tool Plus" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://th.bing.com/th?id=ODLS.863d8957-85ab-4cca-9668-882d1cbda526&w=32&h=32&qlt=90&pcl=fffffa&o=6&pid=1.2" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Office tool Plus" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Office tool Plus</div>                  <div class="flink-item-desc" title="一键部署办公软件">一键部署办公软件</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://potplayer.tv/?lang=zh_CN" title="Potplayer" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://ts4.cn.mm.bing.net/th?id=ODLS.a49676e9-e618-4273-a12f-4e5fff5e3988&w=32&h=32&qlt=91&pcl=fffffa&o=6&pid=1.2" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Potplayer" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Potplayer</div>                  <div class="flink-item-desc" title="超强视频播放器">超强视频播放器</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://www.sublimetext.com/" title="Sublime Text" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://www.sublimehq.com/images/sublime_text.png" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Sublime Text" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Sublime Text</div>                  <div class="flink-item-desc" title="简洁、强大的文本编辑器">简洁、强大的文本编辑器</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://greasyfork.org/zh-CN" title="Greasyfork" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://greasyfork.org/vite/assets/blacklogo96-e0c2c761.png" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Greasyfork" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Greasyfork</div>                  <div class="flink-item-desc" title="油猴的搭档">油猴的搭档</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://git-scm.com/" title="git" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://git-scm.com/favicon.ico" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="git" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">git</div>                  <div class="flink-item-desc" title="版本控制系统">版本控制系统</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://www.jetbrains.com/" title="JetBrains" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://www.jetbrains.com/favicon.ico" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="JetBrains" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">JetBrains</div>                  <div class="flink-item-desc" title="最好用开发工具">最好用开发工具</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://code.visualstudio.com/" title="VSCode" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://code.visualstudio.com/assets/favicon.ico" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="VSCode" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">VSCode</div>                  <div class="flink-item-desc" title="微软出品的编辑器">微软出品的编辑器</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://www.python.org/" title="Python" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://www.python.org/static/opengraph-icon-200x200.png" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Python" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Python</div>                  <div class="flink-item-desc" title="最流行的编程语言">最流行的编程语言</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://www.java.com/" title="Java" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://www.java.com/favicon.ico" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Java" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Java</div>                  <div class="flink-item-desc" title="后端的编程语言">后端的编程语言</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://docs.microsoft.com/zh-cn/windows/wsl/install-win10" title="WSL2" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://docs.microsoft.com/favicon.ico" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="WSL2" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">WSL2</div>                  <div class="flink-item-desc" title="微软出品的Linux子系统">微软出品的Linux子系统</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://www.kernel.org/" title="Linux 内核" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://th.bing.com/th?id=ODLS.a37e2d54-3922-4ceb-8816-4739e10913da&w=32&h=32&qlt=91&pcl=fffffa&o=6&pid=1.2" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Linux 内核" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Linux 内核</div>                  <div class="flink-item-desc" title="开源的操作系统">开源的操作系统</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://www.vim.org/" title="Vim" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://th.bing.com/th?id=ODLS.3f02df1f-37d5-4e7f-9ad8-9bbe13e49002&w=32&h=32&qlt=91&pcl=fffffa&o=6&pid=1.2" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Vim" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Vim</div>                  <div class="flink-item-desc" title="最流行的编辑器">最流行的编辑器</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="hhttps://obsproject.com/" title="OBS" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://obsproject.com/assets/images/new_icon_small-r.png" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="OBS" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">OBS</div>                  <div class="flink-item-desc" title="最流行的直播软件">最流行的直播软件</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://www.sumatrapdfreader.org/free-pdf-reader" title="Sumatra PDF" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://www.sumatrapdfreader.org/favicon.ico" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Sumatra PDF" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Sumatra PDF</div>                  <div class="flink-item-desc" title="巨干净的PDF查看器，仅推荐这个">巨干净的PDF查看器，仅推荐这个</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://zh.snipaste.com" title="Snipaste" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://zh.snipaste.com/img/logo.svg" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Snipaste" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Snipaste</div>                  <div class="flink-item-desc" title="免费好用的截图工具">免费好用的截图工具</div>                </div>              </a>            </div>            <div class="flink-list-item">              <a href="https://www.voidtools.com/zh-cn/" title="Everything" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://www.voidtools.com/favicon.ico" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="Everything" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">Everything</div>                  <div class="flink-item-desc" title="超级搜索工具">超级搜索工具</div>                </div>              </a>            </div></div></div></div><div class="tip ban"><p><del><a href="https://xodo.com/zh_cn">Xodo PDF</a></del> 你要什么会员啊，还关不了广告，登录不进去，直接拉入黑名单；<br><a href="https://obsidian.md/">Obsidian</a> 推荐新 Markdown 笔记软件，支持更多的插件，可玩性实用性比 Typora 更高一些</p></div><h2 id="急急如意令——破"><a href="#急急如意令——破" class="headerlink" title="急急如意令——破"></a>急急如意令——破</h2><div class="timeline undefined"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>急急如意令——破</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p> kms主机地址</p></div></div><div class='timeline-item-content'><ul><li>配合 <a href="https://otp.landian.vip/zh-cn/download.html">Office Tools Plus</a> 使用能发挥更大的作用！！！</li><li><a href="https://www.coolhub.top/tech-articles/kms_list.html"><code>KMS</code>主机地址</a></li><li>KMS激活地址,仅供个人参考使用</li></ul></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p><code>IDM</code>激活工具 （更新日期2024年12月22日）</p></div></div><div class='timeline-item-content'><ul><li><a href="https://www.123pan.com/s/SIXcVv-QQOtd.html"><del><code>IDM</code>激活工具</del>（已失效）</a><ul><li>可以使用另一种激活方式。</li><li>使用<code>管理员</code>的<code>powershell</code>，输入命令<code>irm https://massgrave.dev/ias | iex</code>，接下来按照步骤点击数字即可。</li><li>仔细阅读激活的数字。</li></ul></li><li>还可以使用<code>iex(irm is.gd/idm_reset)</code>类似于上面方法，进攻参考学习，建议直接freeze试用即可。要不后续还是太麻烦。</li></ul></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p> Win激活工具（更新日期2024年12月22日）</p></div></div><div class='timeline-item-content'><ul><li><a href="https://www.123pan.com/s/SIXcVv-EQOtd.html"><del>win10激活工具</del>  （已失效）</a><ul><li>可以使用另一种激活<code>win</code>系统的方式</li><li>使用<code>管理员</code>的<code>powershell</code>，输入命令<code>irm https://massgrave.dev/get | iex</code>，接下来按照步骤点击数字即可。</li><li>不仅可以激活win，还可以office，但是需要先安装office，安装完后再激活。</li></ul></li><li>再次声明以上方法仅供学习使用，请支持正版，此win工具以上连接可能在以后的某个阶段进行retired（直译：退休；结合语境：更换地址，不再维护）。可使用<code>irm https://get.activated.win | iex</code>进行过度使用。</li></ul></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p> typora 软件安装包</p></div></div><div class='timeline-item-content'><p>最新更新2025年6月19日 —适配了1.9.5版本</p><ul><li><a href="https://www.123pan.com/s/SIXcVv-0FOtd.html"><code>typora</code>激活文件，存放到目录文件夹即可</a><ul><li><a href="https://download2.typoraio.cn/windows/typora-setup-x64-1.9.5.exe">点击下载 Windows 适配版本1.9.5版本</a><blockquote><p>注意：不要安装新版本，新版本目前没有很好的方法去使用<br>这个旧版本虽然在一定程度上比不上新版本，但是对于Markdown基础使用已经是非常好的了，感谢理解</p></blockquote></li></ul></li></ul></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>jetBrains 激活方案</p></div></div><div class='timeline-item-content'><ul><li>使用<code>管理员</code>的<code>powershell</code>，输入命令<code>irm ckey.run|iex</code></li><li>也可也直接访问 <a href="https://ckey.run/">官网</a> 进行复制激活码</li></ul></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p> 后续还会增加实用小工具</p></div></div><div class='timeline-item-content'><ul><li>这里就放一个<a href="https://weixin.qq.com/">微信</a>吧</li></ul></div></div></div>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;重要声明&quot;&gt;&lt;a href=&quot;#重要声明&quot; class=&quot;headerlink&quot; title=&quot;重要声明&quot;&gt;&lt;/a&gt;重要声明&lt;/h1&gt;&lt;div class=&quot;tip bell&quot;&gt;&lt;p&gt;此工具仅供个人学习使用，请在学习后24小时内删除。若有侵权，请联系我，我会及时删</summary>
      
    
    
    
    <category term="Windows" scheme="https://happy.sanxiaoxing.cn/categories/Windows/"/>
    
    
    <category term="Windows" scheme="https://happy.sanxiaoxing.cn/tags/Windows/"/>
    
  </entry>
  
  <entry>
    <title>OpenCV简单学习</title>
    <link href="https://happy.sanxiaoxing.cn/posts/fd917c31.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/fd917c31.html</id>
    <published>2023-11-21T15:31:04.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<h1 id="OpenCV简介"><a href="#OpenCV简介" class="headerlink" title="OpenCV简介"></a>OpenCV简介</h1><div class="note success no-icon flat"><p><code>OpenCV</code>（Open Source Computer Vision Library）是一个开源的计算机视觉和图像处理库，它提供了丰富的函数和工具，用于处理图像和视频、进行特征提取、目标检测、图像分割、三维重建、机器学习等计算机视觉相关任务。</p><p>OpenCV支持多种编程语言，包括<code>C++</code>、<code>Python</code>、<code>Java</code>等，使其适用于不同的开发环境和平台。它具有跨平台性，可以在Windows、Linux、macOS等操作系统上使用，并且提供了丰富的函数库和工具，方便开发者快速实现各种计算机视觉任务。</p><p>OpenCV的功能非常丰富，包括图像处理、视觉特征、目标检测、摄像机标定、三维重建、机器学习等。它提供了各种算法和技术，如图像滤波、边缘检测、图像变换、特征点检测与描述、人脸检测与识别、物体追踪、摄像机姿态估计、立体视觉等。开发者可以使用OpenCV进行图像和视频处理，实现各种视觉应用。</p></div><div class="tip bell"><p>接下来就是一个简单的示例，以及具体的操作步骤</p></div><h2 id="OpenCV简单案例"><a href="#OpenCV简单案例" class="headerlink" title="OpenCV简单案例"></a>OpenCV简单案例</h2><div class="timeline undefined"><div class='timeline-item headline'><div class='timeline-item-title'><div class='item-circle'><p>OpenCV简单案例</p></div></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>第一步：安装OpenCV库</p></div></div><div class='timeline-item-content'><p>使用pip命令在终端中执行以下命令进行安装</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip install opencv<span class="literal">-python</span></span><br></pre></td></tr></table></figure></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p> 第二步：导入OpenCV库</p></div></div><div class='timeline-item-content'><p>在python代码中导入库</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> cv2</span><br></pre></td></tr></table></figure></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>第三步：读取图像或者视频</p></div></div><div class='timeline-item-content'><p>这里就以图片为例，简单进行。</p><p>使用<code>cv2.imread()</code>函数读取图像文件</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 读取图像</span></span><br><span class="line">img = cv2.imread(<span class="string">&#x27;image.jpg&#x27;</span>)</span><br></pre></td></tr></table></figure></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>第四步：处理图像或者视频</p></div></div><div class='timeline-item-content'><p>可以使用函数进行图像滤波、边缘检测、图像变换等操作，或者使用算法进行目标检测、人脸识别等任务。</p><p>这里就是仅仅信息图像的一个灰色处理</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 图像处理</span></span><br><span class="line">gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)</span><br></pre></td></tr></table></figure></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>第五步：显示或者保存结果</p></div></div><div class='timeline-item-content'><p>使用<code>cv2.imshow()</code>函数显示图像，或者使用<code>cv2.VideoWriter()</code>函数保存处理后的视频</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 显示图像</span></span><br><span class="line">cv2.imshow(<span class="string">&#x27;Image&#x27;</span>, img)</span><br><span class="line">cv2.waitKey(<span class="number">0</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 保存图像</span></span><br><span class="line">cv2.imwrite(<span class="string">&#x27;output.jpg&#x27;</span>, img)</span><br></pre></td></tr></table></figure></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>第六步：释放资源</p></div></div><div class='timeline-item-content'><p>在程序结束时，记得释放所有使用的资源，如关闭打开的视频文件或释放摄像头资源。可以使用<code>cv2.release()</code>函数来释放资源。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 释放视频资源</span></span><br><span class="line">video.release()</span><br></pre></td></tr></table></figure></div></div></div><h2 id="完整的简单案例"><a href="#完整的简单案例" class="headerlink" title="完整的简单案例"></a>完整的简单案例</h2><div class="note sucess no-icon flat"><p>这是一个完整的简单示例，使用OpenCV进行图像读取、显示和保存的代码：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> cv2</span><br><span class="line"></span><br><span class="line"><span class="comment"># 读取图像</span></span><br><span class="line">img = cv2.imread(<span class="string">&#x27;image.jpg&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 显示图像</span></span><br><span class="line">cv2.imshow(<span class="string">&#x27;Image&#x27;</span>, img)</span><br><span class="line">cv2.waitKey(<span class="number">0</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 保存图像</span></span><br><span class="line">cv2.imwrite(<span class="string">&#x27;output.jpg&#x27;</span>, img)</span><br></pre></td></tr></table></figure><h3 id="进阶简单案例"><a href="#进阶简单案例" class="headerlink" title="进阶简单案例"></a>进阶简单案例</h3><div class='checkbox blue'><input type="radio" />            <p>下面是一个进阶更改的</p>            </div><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> cv2</span><br><span class="line"><span class="keyword">from</span> numpy <span class="keyword">import</span> *</span><br><span class="line"><span class="keyword">from</span> matplotlib <span class="keyword">import</span> pyplot <span class="keyword">as</span> plt</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置图片</span></span><br><span class="line">img = cv2.imread(<span class="string">r&#x27;path\img.png&#x27;</span>) <span class="comment"># 更换图片的路径</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># bgr转rgb图片，方法一</span></span><br><span class="line">b,g,r = cv2.split(img)</span><br><span class="line">imag2 = cv2.merge([r,g,b])</span><br><span class="line">plt.imshow(imag2)</span><br><span class="line"></span><br><span class="line"><span class="comment"># bgr转rgb图片，方法二</span></span><br><span class="line">image = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)</span><br><span class="line"></span><br><span class="line">plt.imshow(image)</span><br><span class="line"><span class="comment"># 隐藏x轴刻度标签，隐藏y轴刻度标签</span></span><br><span class="line">plt.xticks([]), plt.yticks([])</span><br><span class="line">plt.show()</span><br><span class="line"></span><br><span class="line">cv2.imshow(<span class="string">&#x27;image&#x27;</span>,img)</span><br><span class="line">cv2.waitKey(<span class="number">0</span>)</span><br><span class="line">cv2.destroyAllWindows()</span><br></pre></td></tr></table></figure></div><h2 id="进阶人脸存在案例"><a href="#进阶人脸存在案例" class="headerlink" title="进阶人脸存在案例"></a>进阶人脸存在案例</h2><div class='checkbox red'><input type="radio" />            <p>再来进阶一下 ，直接开视频，使用人脸识别，仅识别是否有人脸存在</p>            </div><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> cv2 <span class="keyword">as</span> cv</span><br><span class="line"><span class="keyword">import</span> time</span><br><span class="line"></span><br><span class="line"><span class="comment"># 导入人脸训练库，opencv官网的训练好的人脸库</span></span><br><span class="line">face_cascade = cv.CascadeClassifier(<span class="string">&#x27;haarcascade_frontalface_alt.xml&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 打开摄像头</span></span><br><span class="line">cap = cv.VideoCapture(<span class="number">0</span>)</span><br><span class="line"><span class="keyword">if</span> <span class="keyword">not</span> cap.isOpened():</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;摄像头打开失败&quot;</span>)</span><br><span class="line">    exit()</span><br><span class="line"></span><br><span class="line">fpsTime = time.time()</span><br><span class="line"></span><br><span class="line"><span class="keyword">while</span> <span class="literal">True</span>:</span><br><span class="line">    <span class="comment"># 逐帧捕获</span></span><br><span class="line">    ret, frame = cap.read()</span><br><span class="line">    <span class="comment"># 如果正确读取帧，ret为True</span></span><br><span class="line">    <span class="keyword">if</span> <span class="keyword">not</span> ret:</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&quot;未能正确读取摄像头（摄像头未正确安装、打开或被占用）&quot;</span>)</span><br><span class="line">        <span class="keyword">break</span></span><br><span class="line"></span><br><span class="line">    <span class="comment"># 提高性能</span></span><br><span class="line">    frame.flags.writeable = <span class="literal">False</span></span><br><span class="line"></span><br><span class="line">    <span class="comment"># 镜像处理</span></span><br><span class="line">    frame = cv.flip(frame, <span class="number">1</span>)</span><br><span class="line"></span><br><span class="line">    <span class="comment"># 将帧转换为灰度图像</span></span><br><span class="line">    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)</span><br><span class="line"></span><br><span class="line">    <span class="comment"># 人脸检测</span></span><br><span class="line">    faces = face_cascade.detectMultiScale(gray, <span class="number">1.3</span>, <span class="number">5</span>)</span><br><span class="line"></span><br><span class="line">    <span class="comment"># 在检测到的人脸周围绘制矩形框</span></span><br><span class="line">    <span class="keyword">for</span> (x, y, w, h) <span class="keyword">in</span> faces:</span><br><span class="line">        cv.rectangle(frame, (x, y), (x + w, y + h), (<span class="number">0</span>, <span class="number">255</span>, <span class="number">0</span>), <span class="number">2</span>)</span><br><span class="line"></span><br><span class="line">    <span class="comment"># 在检测到的人脸周围绘制矩形框</span></span><br><span class="line">    <span class="keyword">if</span> <span class="built_in">len</span>(faces) &gt; <span class="number">0</span>:</span><br><span class="line">        cv.putText(frame, <span class="string">&quot;Find Face&quot;</span>, (<span class="number">10</span>, <span class="number">100</span>), cv.FONT_HERSHEY_SIMPLEX, <span class="number">1</span>, (<span class="number">0</span>, <span class="number">0</span>, <span class="number">255</span>), <span class="number">2</span>, cv.LINE_AA)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        cv.putText(frame, <span class="string">&quot;No Find Face&quot;</span>, (<span class="number">10</span>, <span class="number">100</span>), cv.FONT_HERSHEY_SIMPLEX, <span class="number">1</span>, (<span class="number">0</span>, <span class="number">0</span>, <span class="number">255</span>), <span class="number">2</span>, cv.LINE_AA)</span><br><span class="line"></span><br><span class="line">    <span class="comment"># 获取当前帧率</span></span><br><span class="line">    cTime = time.time()</span><br><span class="line">    fps_text = <span class="number">1</span> / (cTime - fpsTime)</span><br><span class="line">    fpsTime = cTime</span><br><span class="line">    cv.putText(frame, <span class="string">&quot;FPS: &quot;</span> + <span class="built_in">str</span>(<span class="built_in">int</span>(fps_text)), (<span class="number">10</span>, <span class="number">50</span>), cv.FONT_HERSHEY_SIMPLEX, <span class="number">1</span>, (<span class="number">0</span>, <span class="number">0</span>, <span class="number">255</span>), <span class="number">2</span>)</span><br><span class="line"></span><br><span class="line">    <span class="comment"># 显示结果帧</span></span><br><span class="line">    cv.imshow(<span class="string">&quot;image&quot;</span>, frame)</span><br><span class="line">    </span><br><span class="line">    <span class="comment"># ESC按键退出</span></span><br><span class="line">    <span class="keyword">if</span> cv.waitKey(<span class="number">1</span>) &amp; <span class="number">0xFF</span> == <span class="number">27</span>:</span><br><span class="line">        <span class="keyword">break</span></span><br><span class="line"><span class="comment"># 完成操作，释放捕获器</span></span><br><span class="line">cap.release()</span><br><span class="line">cv.destroyAllWindows()</span><br></pre></td></tr></table></figure><div class="note warning no-icon flat"><p>此代码仅供学习，不是高识别的人脸存在识别，也没有进行人脸识别</p></div><div class="flink"><div class="flink-name">OpenCV | Github</div><div class="flink-desc">文章使用的haarcascade_frontalface_alt.xml是一个经过训练的级联分类器，用于人脸检测。可以直接点击链接进行选择下载。</div> <div class="flink-list"><div class="anzhiyu-flink-list">            <div class="flink-list-item">              <a href="https://github.com/opencv/opencv/tree/4.x/data/haarcascades" title="OpenCV" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://opencv1.b-cdn.net/wp-content/uploads/2022/05/logo.png" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="OpenCV" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">OpenCV</div>                  <div class="flink-item-desc" title="OpenCV Needs Your Help">OpenCV Needs Your Help</div>                </div>              </a>            </div></div></div></div><div class="tip info"><p>未完待续。。。</p></div>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;OpenCV简介&quot;&gt;&lt;a href=&quot;#OpenCV简介&quot; class=&quot;headerlink&quot; title=&quot;OpenCV简介&quot;&gt;&lt;/a&gt;OpenCV简介&lt;/h1&gt;&lt;div class=&quot;note success no-icon flat&quot;&gt;&lt;p&gt;&lt;code&gt;O</summary>
      
    
    
    
    <category term="python" scheme="https://happy.sanxiaoxing.cn/categories/python/"/>
    
    <category term="OpenCV" scheme="https://happy.sanxiaoxing.cn/categories/python/OpenCV/"/>
    
    
    <category term="python" scheme="https://happy.sanxiaoxing.cn/tags/python/"/>
    
    <category term="OpenCV" scheme="https://happy.sanxiaoxing.cn/tags/OpenCV/"/>
    
  </entry>
  
  <entry>
    <title>Python爬虫第二弹</title>
    <link href="https://happy.sanxiaoxing.cn/posts/11d731c5.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/11d731c5.html</id>
    <published>2023-11-13T17:41:10.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<div class="flink"><div class="flink-name">接上集，需要了解python爬虫的可以前往上一篇</div><div class="flink-desc">Python爬虫简单测试 | SanXiaoXing</div> <div class="flink-list"><div class="anzhiyu-flink-list">            <div class="flink-list-item">              <a href="/posts/e5a66c8.html" title="SanXiaoXing" class="cf-friends-link" target="_blank">                <div class="flink-item-icon">                  <img class="no-lightbox cf-friends-avatar" src="https://avatars.githubusercontent.com/u/87142318?v=4" onerror='this.onerror=null;this.src="/img/friend_404.gif"' alt="SanXiaoXing" />                </div>                <div class="flink-item-info">                  <div class="flink-item-name">SanXiaoXing</div>                  <div class="flink-item-desc" title="Python爬虫简单测试">Python爬虫简单测试</div>                </div>              </a>            </div></div></div></div><h2 id="爬虫第二弹"><a href="#爬虫第二弹" class="headerlink" title="爬虫第二弹"></a>爬虫第二弹</h2><div class="note info flat"><p>我也没有想到会出第二弹，但是爬虫还是很好玩的<br>话不多说，开始吧 ~</p></div><div class="note danger no-icon flat"><h2 id="复习一下"><a href="#复习一下" class="headerlink" title="复习一下~"></a>复习一下~</h2></div><div class="tabs" id="test1"><ul class="nav-tabs"><button type="button" class="tab  active" data-href="test1-1">豆瓣前250名字和排名</button><button type="button" class="tab " data-href="test1-2">导入excel</button><button type="button" class="tab " data-href="test1-3">改进后的代码</button></ul><div class="tab-contents"><div class="tab-item-content active" id="test1-1"><p>爬取的豆瓣排名前250，并且带有排名标号、名字和评分</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">from</span> bs4 <span class="keyword">import</span> BeautifulSoup</span><br><span class="line"></span><br><span class="line">headers = &#123;<span class="string">&#x27;User-Agent&#x27;</span>: <span class="string">&#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36&#x27;</span>&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> page <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">0</span>, <span class="number">250</span>, <span class="number">25</span>):</span><br><span class="line">    url = <span class="string">f&#x27;https://movie.douban.com/top250?start=<span class="subst">&#123;page&#125;</span>&#x27;</span></span><br><span class="line">    response = requests.get(url, headers=headers)</span><br><span class="line">    soup = BeautifulSoup(response.text, <span class="string">&#x27;html.parser&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    movies = soup.find_all(<span class="string">&#x27;div&#x27;</span>, class_=<span class="string">&#x27;info&#x27;</span>)</span><br><span class="line">    <span class="keyword">for</span> idx, movie <span class="keyword">in</span> <span class="built_in">enumerate</span>(movies, start=page+<span class="number">1</span>):</span><br><span class="line">        title = movie.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;title&#x27;</span>).text</span><br><span class="line">        rating = movie.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;rating_num&#x27;</span>).text</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">f&#x27;排名: <span class="subst">&#123;idx&#125;</span>\t电影名字: <span class="subst">&#123;title&#125;</span>\t评分: <span class="subst">&#123;rating&#125;</span>&#x27;</span>)</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="test1-2"><p>运行完，桌面上就会有一个<code>douban_top250.xlsx</code>文件，就可以看到</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">from</span> bs4 <span class="keyword">import</span> BeautifulSoup</span><br><span class="line"><span class="keyword">from</span> openpyxl <span class="keyword">import</span> Workbook</span><br><span class="line"></span><br><span class="line">headers = &#123;<span class="string">&#x27;User-Agent&#x27;</span>: <span class="string">&#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36&#x27;</span>&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment"># 创建一个新的Excel工作簿</span></span><br><span class="line">wb = Workbook()</span><br><span class="line"><span class="comment"># 获取默认的工作表</span></span><br><span class="line">ws = wb.active</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> page <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">0</span>, <span class="number">250</span>, <span class="number">25</span>):</span><br><span class="line">    url = <span class="string">f&#x27;https://movie.douban.com/top250?start=<span class="subst">&#123;page&#125;</span>&#x27;</span></span><br><span class="line">    response = requests.get(url, headers=headers)</span><br><span class="line">    soup = BeautifulSoup(response.text, <span class="string">&#x27;html.parser&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    movies = soup.find_all(<span class="string">&#x27;div&#x27;</span>, class_=<span class="string">&#x27;info&#x27;</span>)</span><br><span class="line">    <span class="keyword">for</span> idx, movie <span class="keyword">in</span> <span class="built_in">enumerate</span>(movies, start=page+<span class="number">1</span>):</span><br><span class="line">        title = movie.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;title&#x27;</span>).text</span><br><span class="line">        rating = movie.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;rating_num&#x27;</span>).text</span><br><span class="line">        ws.cell(row=idx, column=<span class="number">1</span>, value=idx)  <span class="comment"># 写入排名</span></span><br><span class="line">        ws.cell(row=idx, column=<span class="number">2</span>, value=title)  <span class="comment"># 写入电影名字</span></span><br><span class="line">        ws.cell(row=idx, column=<span class="number">3</span>, value=rating)  <span class="comment"># 写入评分</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 保存Excel文件</span></span><br><span class="line">wb.save(<span class="string">&#x27;douban_top250.xlsx&#x27;</span>)</span><br></pre></td></tr></table></figure></div><div class="tab-item-content" id="test1-3"><p>使用<code>ws[&#39;A1&#39;] = &#39;排名&#39;</code>将排名列标题写入A1单元格，使用<code>ws[&#39;B1&#39;] = &#39;电影名字&#39;</code>将电影名字列标题写入B1单元格，使用<code>ws[&#39;C1&#39;] = &#39;评分&#39;</code>将评分列标题写入C1单元格。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">from</span> bs4 <span class="keyword">import</span> BeautifulSoup</span><br><span class="line"><span class="keyword">from</span> openpyxl <span class="keyword">import</span> Workbook</span><br><span class="line"></span><br><span class="line">headers = &#123;<span class="string">&#x27;User-Agent&#x27;</span>: <span class="string">&#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36&#x27;</span>&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment"># 创建一个新的Excel工作簿</span></span><br><span class="line">wb = Workbook()</span><br><span class="line"><span class="comment"># 获取默认的工作表</span></span><br><span class="line">ws = wb.active</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加列标题</span></span><br><span class="line">ws[<span class="string">&#x27;A1&#x27;</span>] = <span class="string">&#x27;排名&#x27;</span></span><br><span class="line">ws[<span class="string">&#x27;B1&#x27;</span>] = <span class="string">&#x27;电影名字&#x27;</span></span><br><span class="line">ws[<span class="string">&#x27;C1&#x27;</span>] = <span class="string">&#x27;评分&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> page <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">0</span>, <span class="number">250</span>, <span class="number">25</span>):</span><br><span class="line">    url = <span class="string">f&#x27;https://movie.douban.com/top250?start=<span class="subst">&#123;page&#125;</span>&#x27;</span></span><br><span class="line">    response = requests.get(url, headers=headers)</span><br><span class="line">    soup = BeautifulSoup(response.text, <span class="string">&#x27;html.parser&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    movies = soup.find_all(<span class="string">&#x27;div&#x27;</span>, class_=<span class="string">&#x27;info&#x27;</span>)</span><br><span class="line">    <span class="keyword">for</span> idx, movie <span class="keyword">in</span> <span class="built_in">enumerate</span>(movies, start=page+<span class="number">2</span>):</span><br><span class="line">        title = movie.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;title&#x27;</span>).text</span><br><span class="line">        rating = movie.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;rating_num&#x27;</span>).text</span><br><span class="line">        ws.cell(row=idx, column=<span class="number">1</span>, value=idx-<span class="number">1</span>)  <span class="comment"># 写入排名</span></span><br><span class="line">        ws.cell(row=idx, column=<span class="number">2</span>, value=title)  <span class="comment"># 写入电影名字</span></span><br><span class="line">        ws.cell(row=idx, column=<span class="number">3</span>, value=rating)  <span class="comment"># 写入评分</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 保存Excel文件</span></span><br><span class="line">wb.save(<span class="string">&#x27;douban_top250.xlsx&#x27;</span>)</span><br></pre></td></tr></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="anzhiyufont anzhiyu-icon-arrow-up"></i></button></div></div><div class="note no-icon flat"><p>接上集，上次我们已经可以将爬虫的文字数据导入到excel表格里面了，但是我们不仅仅需要文字类型的数据，我们还需要一些图片类型的。</p></div><h2 id="爬虫爬取豆瓣的海报"><a href="#爬虫爬取豆瓣的海报" class="headerlink" title="爬虫爬取豆瓣的海报"></a>爬虫爬取豆瓣的海报</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">from</span> bs4 <span class="keyword">import</span> BeautifulSoup</span><br><span class="line"></span><br><span class="line">url = <span class="string">&#x27;https://movie.douban.com/top250&#x27;</span></span><br><span class="line">headers = &#123;</span><br><span class="line">    <span class="string">&#x27;User-Agent&#x27;</span>: <span class="string">&#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3&#x27;</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">get_movies</span>():</span><br><span class="line">    movies = []</span><br><span class="line">    <span class="keyword">for</span> page <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">10</span>):   <span class="comment"># 豆瓣前250名电影共有10个页面，每页25部电影</span></span><br><span class="line">        params = &#123;</span><br><span class="line">            <span class="string">&#x27;start&#x27;</span>: page * <span class="number">25</span></span><br><span class="line">        &#125;</span><br><span class="line">        response = requests.get(url, headers=headers, params=params)</span><br><span class="line">        soup = BeautifulSoup(response.text, <span class="string">&#x27;html.parser&#x27;</span>)</span><br><span class="line">        items = soup.find_all(<span class="string">&#x27;div&#x27;</span>, class_=<span class="string">&#x27;item&#x27;</span>)</span><br><span class="line">        <span class="keyword">for</span> item <span class="keyword">in</span> items:</span><br><span class="line">            movie = &#123;&#125;</span><br><span class="line">            movie[<span class="string">&#x27;rank&#x27;</span>] = item.find(<span class="string">&#x27;em&#x27;</span>).text</span><br><span class="line">            movie[<span class="string">&#x27;title&#x27;</span>] = item.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;title&#x27;</span>).text</span><br><span class="line">            movie[<span class="string">&#x27;score&#x27;</span>] = item.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;rating_num&#x27;</span>).text</span><br><span class="line">            movie[<span class="string">&#x27;image&#x27;</span>] = item.find(<span class="string">&#x27;img&#x27;</span>)[<span class="string">&#x27;src&#x27;</span>]</span><br><span class="line">            movies.append(movie)</span><br><span class="line">    <span class="keyword">return</span> movies</span><br><span class="line"></span><br><span class="line">movies = get_movies()</span><br><span class="line"><span class="keyword">for</span> movie <span class="keyword">in</span> movies:</span><br><span class="line">    <span class="built_in">print</span>(movie[<span class="string">&#x27;rank&#x27;</span>], movie[<span class="string">&#x27;title&#x27;</span>], movie[<span class="string">&#x27;score&#x27;</span>])</span><br><span class="line">    response = requests.get(movie[<span class="string">&#x27;image&#x27;</span>])</span><br><span class="line">    <span class="keyword">with</span> <span class="built_in">open</span>(<span class="string">f&quot;<span class="subst">&#123;movie[<span class="string">&#x27;rank&#x27;</span>]&#125;</span>_<span class="subst">&#123;movie[<span class="string">&#x27;title&#x27;</span>]&#125;</span>.jpg&quot;</span>, <span class="string">&#x27;wb&#x27;</span>) <span class="keyword">as</span> f:</span><br><span class="line">        f.write(response.content)</span><br></pre></td></tr></table></figure><p>添加了一个<code>movie[&#39;image&#39;]</code>字段来存储电影海报的URL。然后，我们使用<code>requests.get()</code>方法来发送GET请求获取图片数据，并使用<code>open()</code>方法将图片数据写入到本地文件中，以电影的排名和标题作为文件名。</p><h2 id="需要设定目标路径"><a href="#需要设定目标路径" class="headerlink" title="需要设定目标路径"></a>需要设定目标路径</h2><p>有时候我们需要把爬取的图片和文件存放到指定路径，下面就是更改之后的代码</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">from</span> bs4 <span class="keyword">import</span> BeautifulSoup</span><br><span class="line"></span><br><span class="line">url = <span class="string">&#x27;https://movie.douban.com/top250&#x27;</span></span><br><span class="line">headers = &#123;</span><br><span class="line">    <span class="string">&#x27;User-Agent&#x27;</span>: <span class="string">&#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3&#x27;</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">save_path = os.path.expanduser(<span class="string">&#x27;~/Desktop/img&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">get_movies</span>():</span><br><span class="line">    movies = []</span><br><span class="line">    <span class="keyword">for</span> page <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">10</span>):   <span class="comment"># 豆瓣前250名电影共有10个页面，每页25部电影</span></span><br><span class="line">        params = &#123;</span><br><span class="line">            <span class="string">&#x27;start&#x27;</span>: page * <span class="number">25</span></span><br><span class="line">        &#125;</span><br><span class="line">        response = requests.get(url, headers=headers, params=params)</span><br><span class="line">        soup = BeautifulSoup(response.text, <span class="string">&#x27;html.parser&#x27;</span>)</span><br><span class="line">        items = soup.find_all(<span class="string">&#x27;div&#x27;</span>, class_=<span class="string">&#x27;item&#x27;</span>)</span><br><span class="line">        <span class="keyword">for</span> item <span class="keyword">in</span> items:</span><br><span class="line">            movie = &#123;&#125;</span><br><span class="line">            movie[<span class="string">&#x27;rank&#x27;</span>] = item.find(<span class="string">&#x27;em&#x27;</span>).text</span><br><span class="line">            movie[<span class="string">&#x27;title&#x27;</span>] = item.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;title&#x27;</span>).text</span><br><span class="line">            movie[<span class="string">&#x27;score&#x27;</span>] = item.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;rating_num&#x27;</span>).text</span><br><span class="line">            movie[<span class="string">&#x27;image&#x27;</span>] = item.find(<span class="string">&#x27;img&#x27;</span>)[<span class="string">&#x27;src&#x27;</span>]</span><br><span class="line">            movies.append(movie)</span><br><span class="line">    <span class="keyword">return</span> movies</span><br><span class="line"></span><br><span class="line"><span class="comment"># 创建目录</span></span><br><span class="line">os.makedirs(save_path, exist_ok=<span class="literal">True</span>)</span><br><span class="line"><span class="comment"># 设置自定义目录</span></span><br><span class="line">save_path = <span class="string">&#x27;C:/Users/ASUS/Desktop/img&#x27;</span></span><br><span class="line"></span><br><span class="line">movies = get_movies()</span><br><span class="line"><span class="keyword">for</span> movie <span class="keyword">in</span> movies:</span><br><span class="line">    <span class="built_in">print</span>(movie[<span class="string">&#x27;rank&#x27;</span>], movie[<span class="string">&#x27;title&#x27;</span>], movie[<span class="string">&#x27;score&#x27;</span>])</span><br><span class="line">    response = requests.get(movie[<span class="string">&#x27;image&#x27;</span>])</span><br><span class="line">    file_path = os.path.join(save_path, <span class="string">f&quot;<span class="subst">&#123;movie[<span class="string">&#x27;rank&#x27;</span>]&#125;</span>_<span class="subst">&#123;movie[<span class="string">&#x27;title&#x27;</span>]&#125;</span>.jpg&quot;</span>)</span><br><span class="line">    <span class="keyword">with</span> <span class="built_in">open</span>(file_path, <span class="string">&#x27;wb&#x27;</span>) <span class="keyword">as</span> f:</span><br><span class="line">        f.write(response.content)</span><br></pre></td></tr></table></figure><div class="note sucess no-icon flat"><p>OK，完成了编写，结束</p></div>]]></content>
    
    
      
      
    <summary type="html">&lt;div class=&quot;flink&quot;&gt;&lt;div class=&quot;flink-name&quot;&gt;接上集，需要了解python爬虫的可以前往上一篇&lt;/div&gt;&lt;div class=&quot;flink-desc&quot;&gt;Python爬虫简单测试 | SanXiaoXing&lt;/div&gt; &lt;div class</summary>
      
    
    
    
    <category term="python" scheme="https://happy.sanxiaoxing.cn/categories/python/"/>
    
    <category term="爬虫" scheme="https://happy.sanxiaoxing.cn/categories/python/%E7%88%AC%E8%99%AB/"/>
    
    
    <category term="python" scheme="https://happy.sanxiaoxing.cn/tags/python/"/>
    
    <category term="爬虫" scheme="https://happy.sanxiaoxing.cn/tags/%E7%88%AC%E8%99%AB/"/>
    
  </entry>
  
  <entry>
    <title>Python爬虫简单测试</title>
    <link href="https://happy.sanxiaoxing.cn/posts/e5a66c8.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/e5a66c8.html</id>
    <published>2023-11-06T11:11:14.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<p><div align="center"><b><span style="color:rgb(255, 0, 0);">前提：需要有python和pip环境</span></b></div><br><div class="note success no-icon flat"><p>写在前言处：需要了解前端的HTML标记和CSS样式，了解python的基本用法</p></div></p><h1 id="爬虫"><a href="#爬虫" class="headerlink" title="爬虫"></a>爬虫</h1><p>首先了解一下爬虫是什么，还有什么注意事项。</p><p>爬虫（Web crawler）是一种自动化程序或脚本，用于浏览互联网并自动提取网页内容的工具。它也被称为网络爬虫、网络蜘蛛或网络机器人。</p><p>爬虫通过发送HTTP请求访问指定的网页，并从返回的内容中提取有用的信息，例如文本、图片、链接等。它们通常用于数据采集、搜索引擎索引、数据分析、监测网站变化等任务。</p><p>爬虫的工作原理通常是：</p><ol><li>指定一个初始URL作为爬取的起点。</li><li>发送HTTP请求获取网页内容。</li><li>解析HTML内容，提取感兴趣的数据，例如链接、文本等。</li><li>如果有新的链接，将其添加到待爬取的URL队列中。</li><li>重复执行步骤2-4，直到满足终止条件（例如爬取的页面数量达到设定值或达到指定深度）。</li></ol><p>爬虫可以针对特定的网站进行定向爬取，也可以通过搜索引擎的爬虫来广泛地爬取整个互联网。</p><div class="note warning flat"><p>注意事项<br>在爬取过程中，爬虫需要<b><span style="color:rgb(255, 0, 0);"><strong>遵守网站的爬取规则</strong></span></b>和<b><span style="color:rgb(255, 0, 0);"><strong>道德准则</strong></span></b>，以避免对网站造成过大的负担或侵犯隐私等问题。</p></div><h1 id="准备工作"><a href="#准备工作" class="headerlink" title="准备工作"></a>准备工作</h1><h2 id="安装requests和bs4库"><a href="#安装requests和bs4库" class="headerlink" title="安装requests和bs4库"></a>安装requests和bs4库</h2><p>分别在powershell里面执行</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">pip install requests</span><br><span class="line">pip install bs4</span><br></pre></td></tr></table></figure><p>在Python中，BeautifulSoup（通常简称为bs4）是一个用于解析HTML和XML文档的库。</p><p>BeautifulSoup的主要作用如下：</p><ol><li>解析HTML和XML文档：BeautifulSoup可以将HTML或XML文档解析为Python对象，使得我们可以方便地提取其中的数据。</li><li>树形结构遍历：BeautifulSoup将解析的文档构建为树形结构，通过遍历这个结构，我们可以轻松地定位和访问文档中的各个元素。</li><li>数据提取：通过BeautifulSoup提供的一系列方法，我们可以根据标签、类名、属性等条件来提取文档中的数据。例如，我们可以提取所有的链接、图片、段落等。</li><li>数据清洗：BeautifulSoup还可以清洗和格式化提取到的数据。它提供了一些方法来去除HTML标签、删除多余的空白字符等，使得提取到的数据更加干净和易于处理。</li><li>弥补HTML解析器的不足：BeautifulSoup可以与不同的HTML解析器（如Python内置的html.parser、lxml等）配合使用，以弥补解析器在处理不规范或复杂HTML时的不足之处。</li></ol><h2 id="一个简单的小Demo"><a href="#一个简单的小Demo" class="headerlink" title="一个简单的小Demo"></a>一个简单的小Demo</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">from</span> bs4 <span class="keyword">import</span> BeautifulSoup</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">web_crawler</span>(<span class="params">url</span>):</span><br><span class="line">    <span class="comment"># 发起HTTP GET请求</span></span><br><span class="line">    response = requests.get(url)</span><br><span class="line"></span><br><span class="line">    <span class="comment"># 检查响应状态码</span></span><br><span class="line">    <span class="keyword">if</span> response.status_code == <span class="number">200</span>:</span><br><span class="line">        <span class="comment"># 使用BeautifulSoup解析HTML内容</span></span><br><span class="line">        soup = BeautifulSoup(response.text, <span class="string">&quot;html.parser&quot;</span>)</span><br><span class="line"></span><br><span class="line">        <span class="comment"># 获取所有的&lt;a&gt;标签</span></span><br><span class="line">        links = soup.find_all(<span class="string">&quot;a&quot;</span>)</span><br><span class="line"></span><br><span class="line">        <span class="comment"># 遍历每个链接，并打印标题和URL</span></span><br><span class="line">        <span class="keyword">for</span> link <span class="keyword">in</span> links:</span><br><span class="line">            title = link.text</span><br><span class="line">            href = link.get(<span class="string">&quot;href&quot;</span>)</span><br><span class="line">            <span class="built_in">print</span>(<span class="string">f&quot;Title: <span class="subst">&#123;title&#125;</span>\nURL: <span class="subst">&#123;href&#125;</span>\n&quot;</span>)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&quot;Failed to fetch the webpage&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 指定要爬取的网页URL</span></span><br><span class="line">url = <span class="string">&quot;https://sanxiaoxing.github.io/&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 调用爬虫函数</span></span><br><span class="line">web_crawler(url)</span><br></pre></td></tr></table></figure><p>在<code>web_crawler</code>函数内部，我们首先发起GET请求，并检查响应状态码。如果响应状态码为200，表示请求成功，我们使用<code>BeautifulSoup</code>解析HTML内容。</p><p>接下来，我们使用<code>find_all</code>方法获取网页中所有的<code>&lt;a&gt;</code>标签，并遍历每个链接。我们使用<code>text</code>属性获取链接的文本内容，使用<code>get</code>方法获取链接的URL，并打印标题和URL。</p><p>最后，我们在主程序中指定要爬取的网页URL，并调用<code>web_crawler</code>函数来执行爬取操作。</p><hr><div class="note success no-icon flat"><p>除此之外,有的网站会限制python爬虫进行数据的爬取，这时我们可以使用</p></div><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">header = &#123;</span><br><span class="line">    <span class="string">&#x27;User-Agent&#x27;</span>: <span class="string">&#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0&#x27;</span>&#125;</span><br></pre></td></tr></table></figure><p>进行web的伪装。</p><div class="note info flat"><p>提示：<code>user-Agent</code>可以使用web浏览器<code>F12</code>的开发者选项中的<code>网络</code>，进行刷新，随便点击一个即可看到<code>user-Agent</code>的一个内容</p></div><span class='nota' data-nota='可以看到注解内容出现在顶栏'>把鼠标移动到我上面试试</span><h3 id="继续爬取豆瓣电影"><a href="#继续爬取豆瓣电影" class="headerlink" title="继续爬取豆瓣电影"></a>继续爬取豆瓣电影</h3><p>了解以上的内容，就可以简单爬取一下豆瓣的电影了</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">from</span> bs4 <span class="keyword">import</span> BeautifulSoup</span><br><span class="line"></span><br><span class="line">url = <span class="string">&#x27;https://movie.douban.com/top250&#x27;</span></span><br><span class="line">headers = &#123;<span class="string">&#x27;User-Agent&#x27;</span>: <span class="string">&#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36&#x27;</span>&#125;</span><br><span class="line"></span><br><span class="line">response = requests.get(url, headers=headers)</span><br><span class="line">soup = BeautifulSoup(response.text, <span class="string">&#x27;html.parser&#x27;</span>)</span><br><span class="line"></span><br><span class="line">movies = soup.find_all(<span class="string">&#x27;div&#x27;</span>, class_=<span class="string">&#x27;info&#x27;</span>) <span class="comment"># 查找所有属性</span></span><br><span class="line"><span class="keyword">for</span> movie <span class="keyword">in</span> movies:</span><br><span class="line">    title = movie.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;title&#x27;</span>).text</span><br><span class="line">    rating = movie.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;rating_num&#x27;</span>).text</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">f&#x27;电影名字: <span class="subst">&#123;title&#125;</span>\t评分: <span class="subst">&#123;rating&#125;</span>&#x27;</span>)</span><br></pre></td></tr></table></figure><p>根据上面的代码，不难发现只有第一页的内容，而我们需要前250的内容</p><h3 id="豆瓣排名前250名的总排名"><a href="#豆瓣排名前250名的总排名" class="headerlink" title="豆瓣排名前250名的总排名"></a>豆瓣排名前250名的总排名</h3><p>那么，我们需要使用一个循环处理每一个页面<code>range(0,250,25)</code>。标识0到250，每次增加25，以便处理页面。</p><div class="note info modern"><p><code>https://movie.douban.com/top250?start=0&amp;filter=</code>在这个连接里面不难看出<code>start</code>是0，翻到下一页就是25，可以得出所需要增加的为25</p></div><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">from</span> bs4 <span class="keyword">import</span> BeautifulSoup</span><br><span class="line"></span><br><span class="line">headers = &#123;<span class="string">&#x27;User-Agent&#x27;</span>: <span class="string">&#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36&#x27;</span>&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> page <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">0</span>, <span class="number">250</span>, <span class="number">25</span>):</span><br><span class="line">    url = <span class="string">f&#x27;https://movie.douban.com/top250?start=<span class="subst">&#123;page&#125;</span>&#x27;</span></span><br><span class="line">    response = requests.get(url, headers=headers)</span><br><span class="line">    soup = BeautifulSoup(response.text, <span class="string">&#x27;html.parser&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    movies = soup.find_all(<span class="string">&#x27;div&#x27;</span>, class_=<span class="string">&#x27;info&#x27;</span>)</span><br><span class="line">    <span class="keyword">for</span> movie <span class="keyword">in</span> movies:</span><br><span class="line">        title = movie.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;title&#x27;</span>).text</span><br><span class="line">        rating = movie.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;rating_num&#x27;</span>).text</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">f&#x27;电影名字: <span class="subst">&#123;title&#125;</span>\t评分: <span class="subst">&#123;rating&#125;</span>&#x27;</span>)</span><br></pre></td></tr></table></figure><h3 id="豆瓣排名前250标号排序"><a href="#豆瓣排名前250标号排序" class="headerlink" title="豆瓣排名前250标号排序"></a>豆瓣排名前250标号排序</h3><p>上面的爬取数据只会有名字还有评分，没有排名，接下来我们继续加</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">from</span> bs4 <span class="keyword">import</span> BeautifulSoup</span><br><span class="line"></span><br><span class="line">headers = &#123;<span class="string">&#x27;User-Agent&#x27;</span>: <span class="string">&#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36&#x27;</span>&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> page <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">0</span>, <span class="number">250</span>, <span class="number">25</span>):</span><br><span class="line">    url = <span class="string">f&#x27;https://movie.douban.com/top250?start=<span class="subst">&#123;page&#125;</span>&#x27;</span></span><br><span class="line">    response = requests.get(url, headers=headers)</span><br><span class="line">    soup = BeautifulSoup(response.text, <span class="string">&#x27;html.parser&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    movies = soup.find_all(<span class="string">&#x27;div&#x27;</span>, class_=<span class="string">&#x27;info&#x27;</span>)</span><br><span class="line">    <span class="keyword">for</span> idx, movie <span class="keyword">in</span> <span class="built_in">enumerate</span>(movies, start=page+<span class="number">1</span>):</span><br><span class="line">        title = movie.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;title&#x27;</span>).text</span><br><span class="line">        rating = movie.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;rating_num&#x27;</span>).text</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">f&#x27;排名: <span class="subst">&#123;idx&#125;</span>\t电影名字: <span class="subst">&#123;title&#125;</span>\t评分: <span class="subst">&#123;rating&#125;</span>&#x27;</span>)</span><br></pre></td></tr></table></figure><p>在更新后的代码中，我们使用了<code>enumerate()</code>函数来获得电影的排名。<code>enumerate()</code>函数会返回一个可迭代对象，同时提供索引和对应的元素。通过设置<code>start=page+1</code>，我们将排名的起始值设置为当前页面的起始值。</p><div class="note info no-icon flat"><p>那么，还是不满足在控制台输出结果，想在excel表格里面展示，接下来 <code>Show Time</code></p></div><h3 id="将其数据导入到excel表格里面"><a href="#将其数据导入到excel表格里面" class="headerlink" title="将其数据导入到excel表格里面"></a>将其数据导入到excel表格里面</h3><p>要将数据导入excel中，需要使用第三方库openpyxl</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip install openpyxl</span><br></pre></td></tr></table></figure><p>以下是更新后的示例</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">from</span> bs4 <span class="keyword">import</span> BeautifulSoup</span><br><span class="line"><span class="keyword">from</span> openpyxl <span class="keyword">import</span> Workbook</span><br><span class="line"></span><br><span class="line">headers = &#123;<span class="string">&#x27;User-Agent&#x27;</span>: <span class="string">&#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36&#x27;</span>&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment"># 创建一个新的Excel工作簿</span></span><br><span class="line">wb = Workbook()</span><br><span class="line"><span class="comment"># 获取默认的工作表</span></span><br><span class="line">ws = wb.active</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> page <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">0</span>, <span class="number">250</span>, <span class="number">25</span>):</span><br><span class="line">    url = <span class="string">f&#x27;https://movie.douban.com/top250?start=<span class="subst">&#123;page&#125;</span>&#x27;</span></span><br><span class="line">    response = requests.get(url, headers=headers)</span><br><span class="line">    soup = BeautifulSoup(response.text, <span class="string">&#x27;html.parser&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    movies = soup.find_all(<span class="string">&#x27;div&#x27;</span>, class_=<span class="string">&#x27;info&#x27;</span>)</span><br><span class="line">    <span class="keyword">for</span> idx, movie <span class="keyword">in</span> <span class="built_in">enumerate</span>(movies, start=page+<span class="number">1</span>):</span><br><span class="line">        title = movie.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;title&#x27;</span>).text</span><br><span class="line">        rating = movie.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;rating_num&#x27;</span>).text</span><br><span class="line">        ws.cell(row=idx, column=<span class="number">1</span>, value=idx)  <span class="comment"># 写入排名</span></span><br><span class="line">        ws.cell(row=idx, column=<span class="number">2</span>, value=title)  <span class="comment"># 写入电影名字</span></span><br><span class="line">        ws.cell(row=idx, column=<span class="number">3</span>, value=rating)  <span class="comment"># 写入评分</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 保存Excel文件</span></span><br><span class="line">wb.save(<span class="string">&#x27;douban_top250.xlsx&#x27;</span>)</span><br></pre></td></tr></table></figure><p>运行完，桌面上就会有一个<code>douban_top250.xlsx</code>文件，就可以看到</p><p><strong>但是</strong></p><p>还不是最完美的，他没有第一行作为提示</p><p>继续改进</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">from</span> bs4 <span class="keyword">import</span> BeautifulSoup</span><br><span class="line"><span class="keyword">from</span> openpyxl <span class="keyword">import</span> Workbook</span><br><span class="line"></span><br><span class="line">headers = &#123;<span class="string">&#x27;User-Agent&#x27;</span>: <span class="string">&#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36&#x27;</span>&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment"># 创建一个新的Excel工作簿</span></span><br><span class="line">wb = Workbook()</span><br><span class="line"><span class="comment"># 获取默认的工作表</span></span><br><span class="line">ws = wb.active</span><br><span class="line"></span><br><span class="line"><span class="comment"># 添加列标题</span></span><br><span class="line">ws[<span class="string">&#x27;A1&#x27;</span>] = <span class="string">&#x27;排名&#x27;</span></span><br><span class="line">ws[<span class="string">&#x27;B1&#x27;</span>] = <span class="string">&#x27;电影名字&#x27;</span></span><br><span class="line">ws[<span class="string">&#x27;C1&#x27;</span>] = <span class="string">&#x27;评分&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> page <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">0</span>, <span class="number">250</span>, <span class="number">25</span>):</span><br><span class="line">    url = <span class="string">f&#x27;https://movie.douban.com/top250?start=<span class="subst">&#123;page&#125;</span>&#x27;</span></span><br><span class="line">    response = requests.get(url, headers=headers)</span><br><span class="line">    soup = BeautifulSoup(response.text, <span class="string">&#x27;html.parser&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    movies = soup.find_all(<span class="string">&#x27;div&#x27;</span>, class_=<span class="string">&#x27;info&#x27;</span>)</span><br><span class="line">    <span class="keyword">for</span> idx, movie <span class="keyword">in</span> <span class="built_in">enumerate</span>(movies, start=page+<span class="number">2</span>):</span><br><span class="line">        title = movie.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;title&#x27;</span>).text</span><br><span class="line">        rating = movie.find(<span class="string">&#x27;span&#x27;</span>, class_=<span class="string">&#x27;rating_num&#x27;</span>).text</span><br><span class="line">        ws.cell(row=idx, column=<span class="number">1</span>, value=idx-<span class="number">1</span>)  <span class="comment"># 写入排名</span></span><br><span class="line">        ws.cell(row=idx, column=<span class="number">2</span>, value=title)  <span class="comment"># 写入电影名字</span></span><br><span class="line">        ws.cell(row=idx, column=<span class="number">3</span>, value=rating)  <span class="comment"># 写入评分</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 保存Excel文件</span></span><br><span class="line">wb.save(<span class="string">&#x27;douban_top250.xlsx&#x27;</span>)</span><br></pre></td></tr></table></figure><p>使用<code>ws[&#39;A1&#39;] = &#39;排名&#39;</code>将排名列标题写入A1单元格，使用<code>ws[&#39;B1&#39;] = &#39;电影名字&#39;</code>将电影名字列标题写入B1单元格，使用<code>ws[&#39;C1&#39;] = &#39;评分&#39;</code>将评分列标题写入C1单元格。</p><p>同时，我们将循环中写入数据的起始行从<code>page+1</code>修改为<code>page+2</code>，以便为列标题腾出第一行。</p><p>目前就是非常完美了</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;&lt;div align=&quot;center&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color:rgb(255, 0, 0);&quot;&gt;前提：需要有python和pip环境&lt;/span&gt;&lt;/b&gt;
&lt;/div&gt;&lt;br&gt;&lt;div class=&quot;note success no-icon flat</summary>
      
    
    
    
    <category term="python" scheme="https://happy.sanxiaoxing.cn/categories/python/"/>
    
    <category term="爬虫" scheme="https://happy.sanxiaoxing.cn/categories/python/%E7%88%AC%E8%99%AB/"/>
    
    
    <category term="python" scheme="https://happy.sanxiaoxing.cn/tags/python/"/>
    
    <category term="爬虫" scheme="https://happy.sanxiaoxing.cn/tags/%E7%88%AC%E8%99%AB/"/>
    
  </entry>
  
  <entry>
    <title>python使用ssh命令执行脚本</title>
    <link href="https://happy.sanxiaoxing.cn/posts/5bed7dca.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/5bed7dca.html</id>
    <published>2023-11-06T10:13:20.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<div align="center"><b><span style="color:rgb(255, 0, 0);">前提需要有python和pip环境，一下只介绍python与ssh命令执行</span></b></div><h2 id="下载paramiko库"><a href="#下载paramiko库" class="headerlink" title="下载paramiko库"></a>下载paramiko库</h2><h3 id="命令框安装"><a href="#命令框安装" class="headerlink" title="命令框安装"></a>命令框安装</h3><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip install paramiko</span><br></pre></td></tr></table></figure><h2 id="paramiko使用代码"><a href="#paramiko使用代码" class="headerlink" title="paramiko使用代码"></a>paramiko使用代码</h2><p>​    在一个无限循环中，依次执行commands列表中的命令。使用exec_command()方法执行命令，并获取标准输出和标准错误输出。然后打印标准错误输出和标准输出的内容。接下来，使用range()函数实现倒计时功能，打印剩余秒数并进行延迟。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 导入必要的库</span></span><br><span class="line"><span class="keyword">import</span> paramiko</span><br><span class="line"><span class="keyword">import</span> time</span><br><span class="line"></span><br><span class="line"><span class="comment"># ssh连接的相关信息</span></span><br><span class="line">hostname = <span class="string">&#x27;192.168.1.51&#x27;</span> <span class="comment"># 主机的IP地址</span></span><br><span class="line">port = <span class="number">22</span>                 <span class="comment"># 端口号</span></span><br><span class="line">username = <span class="string">&#x27;root&#x27;</span>         <span class="comment"># 用户名</span></span><br><span class="line">password = <span class="string">&#x27;root&#x27;</span>         <span class="comment"># 密码</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 定义执行的命令</span></span><br><span class="line">commands = [</span><br><span class="line">    <span class="string">&#x27;us -m \&#x27;&#123;&quot;ctrl&quot;:&#123;&quot;mac&quot;:&quot;DC8E95FFFE0C77FF&quot;,&quot;endpoint&quot;:1,&quot;OnOff&quot;:1&#125;&#125;\&#x27;&#x27;</span>,</span><br><span class="line">    <span class="string">&#x27;us -m \&#x27;&#123;&quot;ctrl&quot;:&#123;&quot;mac&quot;:&quot;DC8E95FFFE0C77FF&quot;,&quot;endpoint&quot;:2,&quot;OnOff&quot;:1&#125;&#125;\&#x27;&#x27;</span></span><br><span class="line">]</span><br><span class="line"></span><br><span class="line"><span class="comment"># 建立ssh连接</span></span><br><span class="line"><span class="comment"># 创建一个SSHClient对象，并设置缺失主机密钥的策略为自动添加。然后使用connect()方法连接到指定的主机。</span></span><br><span class="line">ssh = paramiko.SSHClient()</span><br><span class="line">ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())</span><br><span class="line">ssh.connect(hostname, port, username, password)</span><br><span class="line"></span><br><span class="line">time.sleep(<span class="number">2</span>)</span><br><span class="line"><span class="keyword">try</span>:</span><br><span class="line">    <span class="keyword">while</span> <span class="literal">True</span>:</span><br><span class="line">        <span class="keyword">for</span> command <span class="keyword">in</span> commands:</span><br><span class="line">            <span class="comment"># 执行命令</span></span><br><span class="line">            <span class="built_in">print</span>(command)</span><br><span class="line">            stdin, stdout, stderr = ssh.exec_command(command)</span><br><span class="line">            <span class="comment"># print(stdin)</span></span><br><span class="line">            <span class="comment"># print(stdout)</span></span><br><span class="line">            <span class="built_in">print</span>(<span class="string">&#x27;stderr&#x27;</span>, stderr.readlines())</span><br><span class="line">            <span class="keyword">for</span> line <span class="keyword">in</span> stdout.readlines():</span><br><span class="line">                <span class="built_in">print</span>(line.strip())</span><br><span class="line">                </span><br><span class="line">            <span class="comment"># 进入倒计时</span></span><br><span class="line">            <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">3</span>, <span class="number">0</span>, -<span class="number">1</span>):</span><br><span class="line">                <span class="built_in">print</span>(<span class="string">&quot;\r倒计时&#123;&#125;秒！&quot;</span>.<span class="built_in">format</span>(i), end=<span class="string">&quot;&quot;</span>, flush=<span class="literal">True</span>)</span><br><span class="line">                time.sleep(<span class="number">1</span>)</span><br><span class="line"></span><br><span class="line"><span class="keyword">except</span> KeyboardInterrupt:</span><br><span class="line">    <span class="keyword">pass</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 关闭ssh连接</span></span><br><span class="line">ssh.close()</span><br></pre></td></tr></table></figure><p>这是一个简单的示例。</p><h2 id="paramiko结合多线程的使用使用代码示例如下"><a href="#paramiko结合多线程的使用使用代码示例如下" class="headerlink" title="paramiko结合多线程的使用使用代码示例如下"></a>paramiko结合<strong><em>多线程</em></strong>的使用使用代码示例如下</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> threading</span><br><span class="line"><span class="keyword">import</span> paramiko</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">paramikoThreading</span>(threading.Thread):</span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self,command,host,username,password,port=<span class="number">22</span></span>):</span><br><span class="line">        self.command = command</span><br><span class="line">        self.host = host</span><br><span class="line">        self.username = username</span><br><span class="line">        self.password = password</span><br><span class="line">        self.port = port</span><br><span class="line"> </span><br><span class="line">        <span class="built_in">super</span>(paramikoThreading,self).__init__()</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">run</span>(<span class="params">self</span>):</span><br><span class="line">        ssh = paramiko.SSHClient()</span><br><span class="line">        <span class="comment"># 创建一个ssh的白名单</span></span><br><span class="line">        know_host = paramiko.AutoAddPolicy()</span><br><span class="line">        <span class="comment"># 加载创建的白名单</span></span><br><span class="line">        ssh.set_missing_host_key_policy(know_host)</span><br><span class="line"> </span><br><span class="line">        <span class="comment"># 连接服务器</span></span><br><span class="line">        ssh.connect(</span><br><span class="line">            hostname=self.host,</span><br><span class="line">            port=self.port,</span><br><span class="line">            username=self.username,</span><br><span class="line">            password=self.password,</span><br><span class="line">        )</span><br><span class="line"> </span><br><span class="line">        stdin, stdout, stderr = ssh.exec_command(self.command)</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&quot;*&quot;</span>*<span class="number">60</span>)</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&quot;ip:%s,\ncommand:%s,\n&quot;</span>%(self.host,self.command))</span><br><span class="line">        <span class="built_in">print</span>(stdout.read().decode())</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&quot;*&quot;</span>*<span class="number">60</span>)</span><br><span class="line">        ssh.close()</span><br><span class="line"> </span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">&#x27;__main__&#x27;</span>:</span><br><span class="line">    <span class="keyword">from</span> settings <span class="keyword">import</span> pool  <span class="comment">#调用配置文件配置文件为settings.py</span></span><br><span class="line"> </span><br><span class="line">    command = <span class="string">&quot;ls&quot;</span></span><br><span class="line">    t_pool = []</span><br><span class="line">    <span class="keyword">for</span> host <span class="keyword">in</span> pool:</span><br><span class="line">        t = paramikoThreading(</span><br><span class="line">            host=host.get(<span class="string">&quot;host&quot;</span>,<span class="string">&quot;localhost&quot;</span>),</span><br><span class="line">            username=host.get(<span class="string">&quot;username&quot;</span>,<span class="string">&quot;root&quot;</span>),</span><br><span class="line">            password=host.get(<span class="string">&quot;password&quot;</span>,<span class="string">&quot;123&quot;</span>),</span><br><span class="line">            command=command</span><br><span class="line">            )</span><br><span class="line">        t_pool.append(t)</span><br><span class="line">    <span class="keyword">for</span> t <span class="keyword">in</span> t_pool:</span><br><span class="line">        t.start()</span><br><span class="line">    <span class="keyword">for</span> t <span class="keyword">in</span> t_pool:</span><br><span class="line">        t.join()</span><br></pre></td></tr></table></figure><h3 id="上文使用的settings-py文件如下"><a href="#上文使用的settings-py文件如下" class="headerlink" title="上文使用的settings.py文件如下"></a>上文使用的<code>settings.py</code>文件如下</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">pool = [</span><br><span class="line">    <span class="built_in">dict</span>(host=<span class="string">&quot;10.10.21.177&quot;</span>, username=<span class="string">&quot;root&quot;</span>, password=<span class="string">&quot;123&quot;</span>),</span><br><span class="line">    <span class="built_in">dict</span>(host=<span class="string">&quot;10.10.21.177&quot;</span>, username=<span class="string">&quot;root&quot;</span>, password=<span class="string">&quot;123&quot;</span>),</span><br><span class="line">    <span class="built_in">dict</span>(host=<span class="string">&quot;10.10.21.177&quot;</span>, username=<span class="string">&quot;root&quot;</span>, password=<span class="string">&quot;123&quot;</span>),</span><br><span class="line">    <span class="built_in">dict</span>(host=<span class="string">&quot;10.10.21.177&quot;</span>, username=<span class="string">&quot;root&quot;</span>, password=<span class="string">&quot;123&quot;</span>),</span><br><span class="line">    <span class="built_in">dict</span>(host=<span class="string">&quot;10.10.21.177&quot;</span>, username=<span class="string">&quot;root&quot;</span>, password=<span class="string">&quot;123&quot;</span>),</span><br><span class="line">    <span class="built_in">dict</span>(host=<span class="string">&quot;10.10.21.177&quot;</span>, username=<span class="string">&quot;root&quot;</span>, password=<span class="string">&quot;123&quot;</span>),</span><br><span class="line">    <span class="built_in">dict</span>(host=<span class="string">&quot;10.10.21.177&quot;</span>, username=<span class="string">&quot;root&quot;</span>, password=<span class="string">&quot;123&quot;</span>),</span><br><span class="line">    <span class="built_in">dict</span>(host=<span class="string">&quot;10.10.21.177&quot;</span>, username=<span class="string">&quot;root&quot;</span>, password=<span class="string">&quot;123&quot;</span>),</span><br><span class="line">]</span><br></pre></td></tr></table></figure><h2 id="文件的上传与下载"><a href="#文件的上传与下载" class="headerlink" title="文件的上传与下载"></a>文件的上传与下载</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> paramiko</span><br><span class="line"> </span><br><span class="line">trans = paramiko.Transport(</span><br><span class="line">    sock=(<span class="string">&quot;10.10.21.177&quot;</span>,<span class="number">22</span>) <span class="comment"># 设置IP以及端口号</span></span><br><span class="line">)</span><br><span class="line"> </span><br><span class="line">trans.connect(</span><br><span class="line">    username=<span class="string">&quot;root&quot;</span>,<span class="comment"># 账号</span></span><br><span class="line">    password=<span class="string">&quot;12345&quot;</span><span class="comment">#密码</span></span><br><span class="line">)</span><br><span class="line">sftp = paramiko.SFTPClient.from_transport(trans)</span><br><span class="line"> </span><br><span class="line"><span class="comment">#上传</span></span><br><span class="line"><span class="comment">#把本地的文件settings.py，上传到远端为/root/Desktop/settings.py</span></span><br><span class="line">sftp.put(<span class="string">&quot;settings.py&quot;</span>,<span class="string">&quot;/root/Desktop/settings.py&quot;</span>)</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"><span class="comment">#下载</span></span><br><span class="line"><span class="comment">#从远程/root/Desktop/hh.py获取文件下载到本地名称为hh.py</span></span><br><span class="line"><span class="comment"># sftp.get(&quot;/root/Desktop/hh.py&quot;,&quot;hh.py&quot;)</span></span><br><span class="line"> </span><br><span class="line">sftp.close()</span><br></pre></td></tr></table></figure><h4 id="参考文档：Python进行ssh操作-ssh-python-CSDN博客"><a href="#参考文档：Python进行ssh操作-ssh-python-CSDN博客" class="headerlink" title="参考文档：Python进行ssh操作_ssh python-CSDN博客"></a>参考文档：<a href="https://blog.csdn.net/qq_39112101/article/details/94175083">Python进行ssh操作_ssh python-CSDN博客</a></h4>]]></content>
    
    
      
      
    <summary type="html">&lt;div align=&quot;center&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color:rgb(255, 0, 0);&quot;&gt;前提需要有python和pip环境，一下只介绍python与ssh命令执行&lt;/span&gt;&lt;/b&gt;
&lt;/div&gt;

&lt;h2 id=&quot;下载paramiko库&quot;&gt;&lt;a</summary>
      
    
    
    
    <category term="python" scheme="https://happy.sanxiaoxing.cn/categories/python/"/>
    
    <category term="SSH" scheme="https://happy.sanxiaoxing.cn/categories/python/SSH/"/>
    
    
    <category term="python" scheme="https://happy.sanxiaoxing.cn/tags/python/"/>
    
  </entry>
  
  <entry>
    <title>Blog源文件GitHub</title>
    <link href="https://happy.sanxiaoxing.cn/posts/798ab618.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/798ab618.html</id>
    <published>2023-11-01T10:13:20.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<h1 id="使用github上传自己的blog源文件"><a href="#使用github上传自己的blog源文件" class="headerlink" title="使用github上传自己的blog源文件"></a>使用github上传自己的blog源文件</h1><h3 id="新环境"><a href="#新环境" class="headerlink" title="新环境"></a>新环境</h3><ul><li>要在新环境继续在原有仓库基础上撸文章，此时通过<code>git clone</code>将博客源码拉到本地，然后安装、初始化hexo就能搞定：</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">git clone ...</span><br><span class="line">npm install hexo</span><br><span class="line">npm install hexo-deployer-git -save</span><br><span class="line"></span><br><span class="line">// hexo环境配置好后，继续像之前一样</span><br><span class="line">hexo new post_name</span><br></pre></td></tr></table></figure><ul><li><p>hexo algolia<code>命令需要设置</code>HEXO_ALGOLIA_INDEXING_KEY`</p><p>在 <code>git bash</code> 命令上执行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">export</span> HEXO_ALGOLIA_INDEXING_KEY=<span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line">./node_modules/.bin/hexo algolia</span><br></pre></td></tr></table></figure></li><li><p>配置pwa（我也不知道为啥会掉）</p><p>在<code>[Blogroot]\themes\butterfly\layout\includes\third-party\</code>目录下新建<code>pwanotice.pug</code>文件，打开<code>[Blogroot]\themes\butterfly\layout\includes\third-party\pwanotice.pug</code>,输入：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><span class="line">#app-refresh.app-refresh(style=&#x27;position: fixed;top: -2.2rem;left: 0;right: 0;z-index: 99999;padding: 0 1rem;font-size: 15px;height: 2.2rem;transition: all 0.3s ease;&#x27;)</span><br><span class="line">  .app-refresh-wrap(style=&#x27; display: flex;color: #fff;height: 100%;align-items: center;justify-content: center;&#x27;)</span><br><span class="line">    label ✨ 有新文章啦！ 👉</span><br><span class="line">    a(href=&#x27;javascript:void(0)&#x27; onclick=&#x27;location.reload()&#x27;)</span><br><span class="line">      span(style=&#x27;color: #fff;text-decoration: underline;cursor: pointer;&#x27;) 🍗点击食用🍔</span><br><span class="line">script.</span><br><span class="line">  if (&#x27;serviceWorker&#x27; in navigator) &#123;</span><br><span class="line">  if (navigator.serviceWorker.controller) &#123;</span><br><span class="line">  navigator.serviceWorker.addEventListener(&#x27;controllerchange&#x27;, function() &#123;</span><br><span class="line">  showNotification()</span><br><span class="line">  &#125;)</span><br><span class="line">  &#125;</span><br><span class="line">  window.addEventListener(&#x27;load&#x27;, function() &#123;</span><br><span class="line">  navigator.serviceWorker.register(&#x27;/sw.js&#x27;)</span><br><span class="line">  &#125;)</span><br><span class="line">  &#125;</span><br><span class="line">  function showNotification() &#123;</span><br><span class="line">  if (GLOBAL_CONFIG.Snackbar) &#123;</span><br><span class="line">  var snackbarBg =</span><br><span class="line">  document.documentElement.getAttribute(&#x27;data-theme&#x27;) === &#x27;light&#x27; ?</span><br><span class="line">  GLOBAL_CONFIG.Snackbar.bgLight :</span><br><span class="line">  GLOBAL_CONFIG.Snackbar.bgDark</span><br><span class="line">  var snackbarPos = GLOBAL_CONFIG.Snackbar.position</span><br><span class="line">  Snackbar.show(&#123;</span><br><span class="line">  text: &#x27;✨ 有新文章啦！ 👉&#x27;,</span><br><span class="line">  backgroundColor: snackbarBg,</span><br><span class="line">  duration: 500000,</span><br><span class="line">  pos: snackbarPos,</span><br><span class="line">  actionText: &#x27;🍗点击食用🍔&#x27;,</span><br><span class="line">  actionTextColor: &#x27;#fff&#x27;,</span><br><span class="line">  onActionClick: function(e) &#123;</span><br><span class="line">  location.reload()</span><br><span class="line">  &#125;,</span><br><span class="line">  &#125;)</span><br><span class="line">  &#125; else &#123;</span><br><span class="line">  var showBg =</span><br><span class="line">  document.documentElement.getAttribute(&#x27;data-theme&#x27;) === &#x27;light&#x27; ?</span><br><span class="line">  &#x27;#3b70fc&#x27; :</span><br><span class="line">  &#x27;#1f1f1f&#x27;</span><br><span class="line">  var cssText = `top: 0; background: $&#123;showBg&#125;;`</span><br><span class="line">  document.getElementById(&#x27;app-refresh&#x27;).style.cssText = cssText</span><br><span class="line">  &#125;</span><br><span class="line">  &#125;</span><br></pre></td></tr></table></figure><p>修改<code>[Blogroot]\themes\butterfly\layout\includes\additional-js.pug</code>,在文件底部添加以下内容，注意缩进。<code>butterfly_v3.6.0</code>取消了缓存配置，转为完全默认，需要将<code>&#123;cache:theme.fragment_cache&#125;</code>改为<code>&#123;cache: true&#125;</code>:</p><ul><li>这里直接加就行</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">if theme.pwa.enable</span><br><span class="line">    !=partial(&#x27;includes/third-party/pwanotice&#x27;, &#123;&#125;, &#123;cache: true&#125;)</span><br></pre></td></tr></table></figure><div class="note success no-icon flat"><p>一直pwa推送，很烦人，不用了</p></div></li></ul><p>之后就可以了。（仅供个人使用）</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;使用github上传自己的blog源文件&quot;&gt;&lt;a href=&quot;#使用github上传自己的blog源文件&quot; class=&quot;headerlink&quot; title=&quot;使用github上传自己的blog源文件&quot;&gt;&lt;/a&gt;使用github上传自己的blog源文件&lt;/h1&gt;&lt;</summary>
      
    
    
    
    <category term="hexo" scheme="https://happy.sanxiaoxing.cn/categories/hexo/"/>
    
    <category term="Github" scheme="https://happy.sanxiaoxing.cn/categories/hexo/Github/"/>
    
    
    <category term="hexo" scheme="https://happy.sanxiaoxing.cn/tags/hexo/"/>
    
  </entry>
  
  <entry>
    <title>Hello World</title>
    <link href="https://happy.sanxiaoxing.cn/posts/16107.html"/>
    <id>https://happy.sanxiaoxing.cn/posts/16107.html</id>
    <published>2023-10-31T10:13:20.000Z</published>
    <updated>2026-06-09T14:11:29.528Z</updated>
    
    <content type="html"><![CDATA[<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues">GitHub</a>.</p><h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new <span class="string">&quot;My New Post&quot;</span></span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/writing.html">Writing</a></p><h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/server.html">Server</a></p><h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/generating.html">Generating</a></p><h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/one-command-deployment.html">Deployment</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;Welcome to &lt;a href=&quot;https://hexo.io/&quot;&gt;Hexo&lt;/a&gt;! This is your very first post. Check &lt;a href=&quot;https://hexo.io/docs/&quot;&gt;documentation&lt;/a&gt; for</summary>
      
    
    
    
    <category term="hexo" scheme="https://happy.sanxiaoxing.cn/categories/hexo/"/>
    
    
  </entry>
  
</feed>
