PageSourceSearch

https://eloquent-khapse-98a9d2.netlify.app/archives/

html eloquent-khapse-98a9d2.netlify.app collected 2026-10-03 10:41:38 UTC 62,579 bytes, 1,757 lines download raw bytes

1<!DOCTYPE html>
2<html>
3  <!-- meta/link... -->
4  
5
6
7
8<head>
9  <meta http-equiv="content-type" content="text/html; charset=utf-8">
10<!-- This site is hosted on Netlify. Anyone can build and deploy a site
11     like this one for free: https://netlify.new/?utm_campaign=loops&utm_source=ai-legible&utm_medium=owned&utm_content=comment&utm_id=f9d215e3-e2b9-471d-8525-551449bc5772
12     Netlify hosting facts for this site: static/SSR served via Netlify Edge. -->
13  <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
14  <!-- Global site tag (gtag.js) - Google Analytics -->
15
16
17  <title>归档 | 青云博客-Hexo</title>
18
19  <link rel="icon" type="image/x-icon, image/vnd.microsoft.icon" href="/favicon.ico">
20  <link rel="stylesheet" href="https://at.alicdn.com/t/font_1911880_c1nvbyezg17.css">
21  <link href="https://cdn.jsdmirror.com/npm/@fortawesome/fontawesome-free/css/all.min.css" rel="stylesheet">
22  <link href="/js/swiper/[email protected]" rel="stylesheet">
23  
24  
25  
26  
27<link rel="stylesheet" href="/css/animate.min.css">
28
29  
30<link rel="stylesheet" href="/css/style.css">
31
32  
33  
34    <link href="/css/fancybox.css" rel="stylesheet">
35  
36  
37    
38<link rel="stylesheet" href="/js/shareJs/share.min.css">
39
40  
41  <style>
42        @media (max-width: 992px) {
43            #waifu {
44                display: none;
45            }
46        }
47    </style>
48    
48<script defer src="//cdn.bootcss.com/pace/1.0.2/pace.min.js"></script>
48
49    <link href="//cdn.bootcss.com/pace/1.0.2/themes/pink/pace-theme-flash.css" rel="stylesheet">
50
51    
52        
52<script src="/js/valine/index.js"></script>
52
53    
54    
55    <!-- 依赖于jquery和vue -->
56    
57        
57<script src="https://cdn.jsdmirror.com/npm/[email protected]/dist/jquery.min.js"></script>
57
58    
59
60    
61        
61<script src="https://cdn.jsdmirror.com/npm/[email protected]/dist/vue.min.js"></script>
61
62    
63
64    <!-- import link -->
65    
66        
67            
68        
69            
70        
71    
72    <!-- import script -->
73    
74        
75            <div id="music" key="62c6977a7d8ac" api="https://music.xfyun.club"></div>
75<script defer id="xplayer" src="https://music.xfyun.club/Static/player8/js/player.js" ></script>
75
76        
77            
78        
79    
80
81<meta name="generator" content="Hexo 5.4.0"></head>
82
83  
84  <!-- 预加载动画 -->
85  <!-- 页面预加载动画 -->
86
87  <body>
88    <!-- 判断是否为暗黑风格 -->
89    <!-- 判断是否为黑夜模式 -->
90<script>
91  let isDark = JSON.parse(localStorage.getItem('dark')) || JSON.parse('false');
92
93  if (isDark) {
94    $(document.body).addClass('darkModel');
95  }
96</script>
96
97
98    <!-- 需要在上面加载的js -->
99    
99<script>
100  function loadScript(src, cb) {
101    return new Promise(resolve => {
102      setTimeout(function () {
103        var HEAD = document.getElementsByTagName("head")[0] || document.documentElement;
104        var script = document.createElement("script");
105        script.setAttribute("type", "text/javascript");
106        if (cb) {
107          if (JSON.stringify(cb)) {
108            for (let p in cb) {
109              if (p == "onload") {
110                script[p] = () => {
111                  cb[p]()
112                  resolve()
113                }
114              } else {
115                script[p] = cb[p]
116                script.onload = resolve
117              }
118            }
119          } else {
120            script.onload = () => {
121              cb()
122              resolve()
123            };
124          }
125        } else {
126          script.onload = resolve
127        }
128        script.setAttribute("src", src);
129        HEAD.appendChild(script);
130      });
131    });
132  }
133
134  //https://github.com/filamentgroup/loadCSS
135  var loadCSS = function (src) {
136    return new Promise(resolve => {
137      setTimeout(function () {
138        var link = document.createElement('link');
139        link.rel = "stylesheet";
140        link.href = src;
141        link.onload = resolve;
142        document.getElementsByTagName("head")[0].appendChild(link);
143      });
144    });
145  };
146
147</script>
147 
148
149<!-- 轮播图所需要的js -->
150<script src="/js/swiper/swiper.min.js"></script>
vendor: 1 bytes, line 150
150
151<script src="/js/swiper/vue-awesome-swiper.js"></script>
vendor: 1 bytes, line 151
151
152<script src="/js/swiper/swiper.animate1.0.3.min.js"></script>
152
153
154<script type="text/javascript">
155  Vue.use(window.VueAwesomeSwiper)
156</script>
156
157
158
159  
159<script src="/js/vue-typed-js/index.js"></script>
159
160
161
162<!-- 首页的公告滚动插件的js需要重新加载 -->
163<script src="/js/vue-seamless-scroll/index.js"></script>
163
164
165<!-- 打字机效果js -->
166<script src="https://cdn.jsdmirror.com/npm/[email protected]"></script>
166
167
168
169    <div id="safearea">
170      <main class="main" id="pjax-container">
171        <!-- 头部导航 -->
172        
173<header class="header  " 
174  id="navHeader"
175  style="position: fixed;
176  left: 0; top: 0; z-index: 10;width: 100%;"
177>
178  <div class="header-content">
179    <div class="bars">
180      <div id="appDrawer" class="sidebar-image">
181  <div class="drawer-box-icon">
182    <i class="fas fa-bars" aria-hidden="true" @click="showDialogDrawer"></i>
183  </div>
184  
185  <transition name="fade">
186    <div class="drawer-box_mask" v-cloak style="display: none;" v-show="visible" @click.self="cancelDialogDrawer">
187    </div>
188  </transition>
189  <div class="drawer-box" :class="{'active': visible}">
190    <div class="drawer-box-head bg-color">
191      <img class="drawer-box-head_logo lazyload placeholder" src="/medias/logo.png" class="lazyload placeholder" data-srcset="/medias/logo.png" srcset="https://pic1.zhimg.com/v2-cd38920285d125be80b3eb504052c550_b.webp" alt="logo">
192      <h3 class="drawer-box-head_title">青云博客-Hexo</h3>
193      <h5 class="drawer-box-head_desc">一个Hexo博客</h5>
194    </div>
195    
196    <div class="drawer-box-content">
197      <ul class="drawer-box-content_menu">
198        
199          
200            <li class="drawer-box-content_item" style="position: relative;">
201              
202                <a href="/" class="drawer-menu-item-link">
203                  
204                    <i class="fas fa-home" aria-hidden="true"></i>
205                  
206                  <span class="name">首页</span>
207                </a>
208              
209            </li>
210          
211            <li class="drawer-box-content_item" style="position: relative;">
212              
213                <a href="/archives" class="drawer-menu-item-link">
214                  
215                    <i class="fas fa-archive" aria-hidden="true"></i>
216                  
217                  <span class="name">文章</span>
218                </a>
219              
220            </li>
221          
222            <li class="drawer-box-content_item" style="position: relative;">
223              
224                <a href="/talks" class="drawer-menu-item-link">
225                  
226                    <i class="fas fa-comment-dots" aria-hidden="true"></i>
227                  
228                  <span class="name">说说</span>
229                </a>
230              
231            </li>
232          
233            <li class="drawer-box-content_item" style="position: relative;">
234              
235                <a href="/gallery" class="drawer-menu-item-link">
236                  
237                    <i class="fas fa-archive" aria-hidden="true"></i>
238                  
239                  <span class="name">相册</span>
240                </a>
241              
242            </li>
243          
244            <li class="drawer-box-content_item" style="position: relative;">
245              
246                <a href="/about" class="drawer-menu-item-link">
247                  
248                    <i class="fas fa-user" aria-hidden="true"></i>
249                  
250                  <span class="name">关于我</span>
251                </a>
252              
253            </li>
254          
255            <li class="drawer-box-content_item" style="position: relative;">
256              
257                <a href="/friends" class="drawer-menu-item-link">
258                  
259                    <i class="fas fa-film" aria-hidden="true"></i>
260                  
261                  <span class="name">友情链接</span>
262                </a>
263              
264            </li>
265          
266        
267        
268          <li class="drawer-box-content_item">
269            <a target="_blank" rel="noopener" href="https://github.com/1422756921">
270              <i class="fas fa-github" aria-hidden="true"></i>
271              <span>Github</span>
272            </a>
273          </li>
274        
275      </ul>
276    </div>
277  </div>
278</div>
279
280<script>
281  var body = document.body || document.documentElement || window;
282  var vm = new Vue({
283    el: '#appDrawer',
284    data: {
285      visible: false,
286      top: 0,
287      openArr: [],
288    },
289    computed: {
290    },
291    mounted() {
292    },
293    methods: {
294      isOpen(index) {
295        if (this.openArr.includes(index)) {
296          return true;
297        } else {
298          return false;
299        }
300      },
301      openOrCloseMenu(curIndex) {
302        const index = this.openArr.indexOf(curIndex);
303        if (index !== -1) {
304          this.openArr.splice(index, 1);
305        } else {
306          this.openArr.push(curIndex);
307        }
308      },
309      showDialogDrawer() {
310        this.visible = true;
311        // 防止页面滚动,只能让弹框滚动
312        this.top = $(document).scrollTop()
313        body.style.cssText = 'width: 100%; height: 100%;overflow: hidden;';
314      },
315      cancelDialogDrawer() {
316        this.visible = false;
317        body.removeAttribute('style');
318        $(document).scrollTop(this.top)
319      }
320    },
321    created() {}
322  })
323</script>
323
324
325    </div>
326    <div class="blog-title" id="author-avatar">
327      
328        <div class="avatar">
329          <img src="/medias/logo.png" class="lazyload placeholder" data-srcset="/medias/logo.png" srcset="https://pic1.zhimg.com/v2-cd38920285d125be80b3eb504052c550_b.webp" alt="logo">
330        </div>
331      
332      <a href="/" class="logo">青云博客-Hexo</a>
333    </div>
334    <nav class="navbar">
335      <ul class="menu">
336        
337          
338            <li class="menu-item" style="position: relative;">
339              
340                <a href="/" class="menu-item-link" title="首页">
341                  
342                    <i class="fas fa-home" aria-hidden="true"></i>
343                  
344                  <span class="name">首页</span>
345                </a>
346              
347            </li>
348          
349            <li class="menu-item" style="position: relative;">
350              
351                <a href="/archives" class="menu-item-link" title="文章">
352                  
353                    <i class="fas fa-archive" aria-hidden="true"></i>
354                  
355                  <span class="name">文章</span>
356                </a>
357              
358            </li>
359          
360            <li class="menu-item" style="position: relative;">
361              
362                <a href="/talks" class="menu-item-link" title="说说">
363                  
364                    <i class="fas fa-comment-dots" aria-hidden="true"></i>
365                  
366                  <span class="name">说说</span>
367                </a>
368              
369            </li>
370          
371            <li class="menu-item" style="position: relative;">
372              
373                <a href="/gallery" class="menu-item-link" title="相册">
374                  
375                    <i class="fas fa-archive" aria-hidden="true"></i>
376                  
377                  <span class="name">相册</span>
378                </a>
379              
380            </li>
381          
382            <li class="menu-item" style="position: relative;">
383              
384                <a href="/about" class="menu-item-link" title="关于我">
385                  
386                    <i class="fas fa-user" aria-hidden="true"></i>
387                  
388                  <span class="name">关于我</span>
389                </a>
390              
391            </li>
392          
393            <li class="menu-item" style="position: relative;">
394              
395                <a href="/friends" class="menu-item-link" title="友情链接">
396                  
397                    <i class="fas fa-film" aria-hidden="true"></i>
398                  
399                  <span class="name">友情链接</span>
400                </a>
401              
402            </li>
403          
404        
405      </ul>
406      
407      
408        <div id="appSearch">
409  <div class="search"  @click="showDialog()"><i class="fas fa-search" aria-hidden="true"></i></div>
410  <transition name="fade">
411    <div class="message-box_wrapper" style="display: none;" v-cloak v-show="dialogVisible" @click.self="cancelDialogVisible()">
412      <div class="message-box animated bounceInDown">
413        <h2>
414          <span>
415            <i class="fas fa-search" aria-hidden="true"></i>
416            <span class="title">本地搜索</span>
417          </span>
418          <i class="fas fa-times close" pointer style="float:right;" aria-hidden="true" @click.self="cancelDialogVisible()"></i>
419        </h2>
420        <form class="site-search-form">
421          <input type="text"
422            placeholder="请输入关键字"
423            id="local-search-input" 
424            @click="getSearchFile()"
425            class="st-search-input"
426            v-model="searchInput"
427          />
428        </form>
429        <div class="result-wrapper">
430          <div id="local-search-result" class="local-search-result-cls"></div>
431        </div>
432      </div>
433    </div>
434  </transition>
435</div>
436<script src="/js/local_search.js"></script>
vendor: 1 bytes, line 436
436
437<script>
438  var body = document.body || document.documentElement || window;
439  var vm = new Vue({
440    el: '#appSearch',
441    data: {
442      dialogVisible: false,
443      searchInput: '',
444      top: 0,
445    },
446    computed: {
447    },
448    mounted() {
449      window.addEventListener('pjax:complete', () => {
450        this.cancelDialogVisible();
451      })
452    },
453    methods: {
454      showDialog() {
455        this.dialogVisible = true;
456        // 防止页面滚动,只能让弹框滚动
457        this.top = $(document).scrollTop()
458        body.style.cssText = 'overflow: hidden;';
459      },
460      getSearchFile() {
461        if (!this.searchInput) {
462          getSearchFile("/search.xml");
463        }
464      },
465      cancelDialogVisible() {
466        this.dialogVisible = false;
467        body.removeAttribute('style');
468        $(document).scrollTop(this.top)
469      },
470    },
471    created() {}
472  })
473</script>
473
474<!-- 解决刷新页面闪烁问题,可以在元素上添加display: none, 或者用vue.extend方法,详情:https://blog.csdn.net/qq_31393401/article/details/81017912 -->
475<!-- 下面是搜索基本写法 -->
476<!-- 
476<script type="text/javascript" id="local.search.active">
477  var inputArea = document.querySelector("#local-search-input");
478  inputArea.onclick   = function(){ getSearchFile(); this.onclick = null }
479  inputArea.onkeydown = function(){ if(event.keyCode == 13) return false }
480</script>
480 -->
481
482      
483
484    </nav>
485  </div>
486  
487    <a target="_blank" rel="noopener" href="https://github.com/1422756921" class="github-corner color-primary" aria-label="View source on GitHub"><svg width="60" height="60" viewBox="0 0 250 250" style="fill:#fff; position: absolute; top: 0; border: 0; right: 0;" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>
488  
489  
490    <div id="he-plugin-simple"></div>
491    
491<script>
492      WIDGET = {
493        CONFIG: {
494          "modules": "012",
495          "background": 5,
496          "tmpColor": "4A4A4A",
497          "tmpSize": 16,
498          "cityColor": "4A4A4A",
499          "citySize": 16,
500          "aqiSize": 16,
501          "weatherIconSize": 24,
502          "alertIconSize": 18,
503          "padding": "10px 10px 10px 10px",
504          "shadow": "1",
505          "language": "auto",
506          "borderRadius": 5,
507          "fixed": "false",
508          "vertical": "middle",
509          "horizontal": "center",
510          "key": "2784dd3fcb1e4f0f9a9b579bf69641f2"
511        }
512      }
513    </script>
513
514    
514<script defer src="/"></script>
514 
515    
516</header>
517        <!-- 内容区域 -->
518        <div class="bg-dark-floor" style="position: fixed;left: 0;top: 0;width: 100%;height: 100%;z-index: -2;"></div>
519<div class="bg-light-floor-archive" style="position: fixed;left: 0;top: 0;width: 100%;height: 100%;z-index: -3;"></div>
520<div class="archive-header" style="background-image:url('https://pic1.zhimg.com/80/v2-1414b3a4b205e19060db18a20d08723a_1440w.jpg?source=1940ef5c')">
521  <div class="archive-header-title">
522    文章
523  </div>
524  <div class="archive-header-desc">
525  
526  <span class="title" id="archive-header-desc"></span>
527  
527<script>
528  function typedFn() {
529    const el = '#archive-header-desc';
530    const type = 'archive';
531    let desc = '愿你如风,被人温柔以待'
532    var typed = new Typed(el, {
533      strings: [desc],
534      startDelay: 100,
535      typeSpeed: 100,
536      loop: true,
537      backSpeed: 50,
538      showCursor: true
539    });
540  }
541  typedFn();
542</script>
542
543  
544  </div>
545  <div class="mask-box"></div>
546</div>
547
548<div class="archive-video">
549  <video class="full-video" autoplay loop muted>
550      <source style="width: 100%;height: 100vh;" src="/">
551  </video>
552  <div class="video-header-title">
553    文章
554  </div>
555  <div class="video-header-desc">
556  
557      <span class="title" id="archive-video-header-desc"></span>
558      
558<script>
559  function typedFn() {
560    const el = '#archive-video-header-desc';
561    const type = 'archive';
562    let desc = '愿你如风,被人温柔以待'
563    var typed = new Typed(el, {
564      strings: [desc],
565      startDelay: 100,
566      typeSpeed: 100,
567      loop: true,
568      backSpeed: 50,
569      showCursor: true
570    });
571  }
572  typedFn();
573</script>
573
574      
575  </div>
576  <div class="mask-box"></div>
577</div>
578
579<!-- hash算法 -->
580
581
582<div class="archive-main">
583  <section class="archive">
584    <div class="archive-content">
585      <ul class="post-archive">
586        
587        
588          
589            
590            <div class="year" data-aos="zoom-in-up">
591                <div class="bullet"></div>
592                <a href="/archives/2025">2025</a>
593            </div>
594          
595          <li class="post-item" data-aos="fade-left">
596            
597            <div class="post-img-box">
598              <a href="/2025/07/12/%E5%A6%82%E4%BD%95%E6%90%AD%E5%BB%BA%E4%B8%AD%E8%BD%AC%E6%9C%8D%E5%8A%A1%E5%99%A8/" class="post-img " style="background-size: cover; 
599                background-position: center center;">
600                <img class="lazyload lazyload placeholder" src="https://pica.zhimg.com/80/v2-573ac3e25de03fad9c32add5a05e5cfc_1440w.webp" class="lazyload placeholder" data-srcset="https://pica.zhimg.com/80/v2-573ac3e25de03fad9c32add5a05e5cfc_1440w.webp" srcset="https://pic1.zhimg.com/v2-cd38920285d125be80b3eb504052c550_b.webp" alt="">
601              </a>
602            </div>
603            <div class="post-date-title">
604              <div>
605                <span class="post-date">07-12</span>
606              </div>
607              <a class="post-title" href="/2025/07/12/%E5%A6%82%E4%BD%95%E6%90%AD%E5%BB%BA%E4%B8%AD%E8%BD%AC%E6%9C%8D%E5%8A%A1%E5%99%A8/">如何搭建中转服务器</a>
608            </div>
609          </li>
610        
611          
612          <li class="post-item" data-aos="fade-left">
613            
614            <div class="post-img-box">
615              <a href="/2025/07/12/%E5%A6%82%E4%BD%95%E5%9C%A83-ui%E9%9D%A2%E6%9D%BF%E6%B7%BB%E5%8A%A0%E4%BD%8F%E5%AE%85IP/" class="post-img " style="background-size: cover; 
616                background-position: center center;">
617                <img class="lazyload lazyload placeholder" src="https://pica.zhimg.com/80/v2-573ac3e25de03fad9c32add5a05e5cfc_1440w.webp" class="lazyload placeholder" data-srcset="https://pica.zhimg.com/80/v2-573ac3e25de03fad9c32add5a05e5cfc_1440w.webp" srcset="https://pic1.zhimg.com/v2-cd38920285d125be80b3eb504052c550_b.webp" alt="">
618              </a>
619            </div>
620            <div class="post-date-title">
621              <div>
622                <span class="post-date">07-12</span>
623              </div>
624              <a class="post-title" href="/2025/07/12/%E5%A6%82%E4%BD%95%E5%9C%A83-ui%E9%9D%A2%E6%9D%BF%E6%B7%BB%E5%8A%A0%E4%BD%8F%E5%AE%85IP/">如何在3-ui面板添加住宅IP</a>
625            </div>
626          </li>
627        
628          
629          <li class="post-item" data-aos="fade-left">
630            
631            <div class="post-img-box">
632              <a href="/2025/07/08/%E7%94%A83x-ui%E6%90%AD%E5%BB%BAreality/" class="post-img " style="background-size: cover; 
633                background-position: center center;">
634                <img class="lazyload lazyload placeholder" src="https://pic3.zhimg.com/v2-a5267dfbf175991d4b3a69b41f3f678a_b.jpg" class="lazyload placeholder" data-srcset="https://pic3.zhimg.com/v2-a5267dfbf175991d4b3a69b41f3f678a_b.jpg" srcset="https://pic1.zhimg.com/v2-cd38920285d125be80b3eb504052c550_b.webp" alt="">
635              </a>
636            </div>
637            <div class="post-date-title">
638              <div>
639                <span class="post-date">07-08</span>
640              </div>
641              <a class="post-title" href="/2025/07/08/%E7%94%A83x-ui%E6%90%AD%E5%BB%BAreality/">用3x-ui搭建reality</a>
642            </div>
643          </li>
644        
645          
646            
647            <div class="year" data-aos="zoom-in-up">
648                <div class="bullet"></div>
649                <a href="/archives/2023">2023</a>
650            </div>
651          
652          <li class="post-item" data-aos="fade-left">
653            
654            <div class="post-img-box">
655              <a href="/2023/12/08/Windows%E6%90%AD%E5%BB%BAv2%E6%9C%8D%E5%8A%A1%E7%AB%AF/" class="post-img " style="background-size: cover; 
656                background-position: center center;">
657                <img class="lazyload lazyload placeholder" src="https://pic3.zhimg.com/v2-a5267dfbf175991d4b3a69b41f3f678a_b.jpg" class="lazyload placeholder" data-srcset="https://pic3.zhimg.com/v2-a5267dfbf175991d4b3a69b41f3f678a_b.jpg" srcset="https://pic1.zhimg.com/v2-cd38920285d125be80b3eb504052c550_b.webp" alt="">
658              </a>
659            </div>
660            <div class="post-date-title">
661              <div>
662                <span class="post-date">12-08</span>
663              </div>
664              <a class="post-title" href="/2023/12/08/Windows%E6%90%AD%E5%BB%BAv2%E6%9C%8D%E5%8A%A1%E7%AB%AF/">Windows搭建v2服务端</a>
665            </div>
666          </li>
667        
668          
669          <li class="post-item" data-aos="fade-left">
670            
671            <div class="post-img-box">
672              <a href="/2023/07/13/%E6%8E%A8%E8%8D%90%E5%87%A0%E4%B8%AA%E5%85%8D%E8%B4%B9%E5%9B%BE%E5%BA%8A/" class="post-img " style="background-size: cover; 
673                background-position: center center;">
674                <img class="lazyload lazyload placeholder" src="https://pic2.zhimg.com/80/v2-e22aaad20d20634f506f57fff0fcbc17_1440w.webp" class="lazyload placeholder" data-srcset="https://pic2.zhimg.com/80/v2-e22aaad20d20634f506f57fff0fcbc17_1440w.webp" srcset="https://pic1.zhimg.com/v2-cd38920285d125be80b3eb504052c550_b.webp" alt="">
675              </a>
676            </div>
677            <div class="post-date-title">
678              <div>
679                <span class="post-date">07-13</span>
680              </div>
681              <a class="post-title" href="/2023/07/13/%E6%8E%A8%E8%8D%90%E5%87%A0%E4%B8%AA%E5%85%8D%E8%B4%B9%E5%9B%BE%E5%BA%8A/">推荐几个免费图床</a>
682            </div>
683          </li>
684        
685          
686          <li class="post-item" data-aos="fade-left">
687            
688            <div class="post-img-box">
689              <a href="/2023/07/11/%E4%B8%80%E4%B8%AAhexo%E5%8D%9A%E5%AE%A2%E5%90%8E%E5%8F%B0%E2%80%93Qexo/" class="post-img " style="background-size: cover; 
690                background-position: center center;">
691                <img class="lazyload lazyload placeholder" src="https://pic3.zhimg.com/80/v2-5f7cb7e900b9dcf5354c3d4d2c5cc3c2_1440w.webp" class="lazyload placeholder" data-srcset="https://pic3.zhimg.com/80/v2-5f7cb7e900b9dcf5354c3d4d2c5cc3c2_1440w.webp" srcset="https://pic1.zhimg.com/v2-cd38920285d125be80b3eb504052c550_b.webp" alt="">
692              </a>
693            </div>
694            <div class="post-date-title">
695              <div>
696                <span class="post-date">07-11</span>
697              </div>
698              <a class="post-title" href="/2023/07/11/%E4%B8%80%E4%B8%AAhexo%E5%8D%9A%E5%AE%A2%E5%90%8E%E5%8F%B0%E2%80%93Qexo/">一个hexo博客后台–Qexo</a>
699            </div>
700          </li>
701        
702          
703          <li class="post-item" data-aos="fade-left">
704            
705            <div class="post-img-box">
706              <a href="/2023/07/11/%E5%88%A9%E7%94%A8Github%20Actions%E8%87%AA%E5%8A%A8%E5%8C%96%E9%83%A8%E7%BD%B2%20Hexo%E5%8D%9A%E5%AE%A2/" class="post-img " style="background-size: cover; 
707                background-position: center center;">
708                <img class="lazyload lazyload placeholder" src="https://pic2.zhimg.com/80/v2-e22aaad20d20634f506f57fff0fcbc17_1440w.webp" class="lazyload placeholder" data-srcset="https://pic2.zhimg.com/80/v2-e22aaad20d20634f506f57fff0fcbc17_1440w.webp" srcset="https://pic1.zhimg.com/v2-cd38920285d125be80b3eb504052c550_b.webp" alt="">
709              </a>
710            </div>
711            <div class="post-date-title">
712              <div>
713                <span class="post-date">07-11</span>
714              </div>
715              <a class="post-title" href="/2023/07/11/%E5%88%A9%E7%94%A8Github%20Actions%E8%87%AA%E5%8A%A8%E5%8C%96%E9%83%A8%E7%BD%B2%20Hexo%E5%8D%9A%E5%AE%A2/">利用Github Actions自动化部署 Hexo博客</a>
716            </div>
717          </li>
718        
719          
720            
721            <div class="year" data-aos="zoom-in-up">
722                <div class="bullet"></div>
723                <a href="/archives/2021">2021</a>
724            </div>
725          
726          <li class="post-item" data-aos="fade-left">
727            
728            <div class="post-img-box">
729              <a href="/2021/11/24/Hexo%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/" class="post-img " style="background-size: cover; 
730                background-position: center center;">
731                <img class="lazyload lazyload placeholder" src="https://pic4.zhimg.com/80/v2-e434e3a2888fb4efb1844845b8791d1f_1440w.webp" class="lazyload placeholder" data-srcset="https://pic4.zhimg.com/80/v2-e434e3a2888fb4efb1844845b8791d1f_1440w.webp" srcset="https://pic1.zhimg.com/v2-cd38920285d125be80b3eb504052c550_b.webp" alt="">
732              </a>
733            </div>
734            <div class="post-date-title">
735              <div>
736                <span class="post-date">11-24</span>
737              </div>
738              <a class="post-title" href="/2021/11/24/Hexo%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/">Hexo博客搭建</a>
739            </div>
740          </li>
741        
742          
743          <li class="post-item" data-aos="fade-left">
744            
745            <div class="post-img-box">
746              <a href="/2021/11/22/%E6%8A%8A%E5%8D%9A%E5%AE%A2%E4%BB%8EGitHub%E8%BF%81%E7%A7%BB%E5%88%B0Gitee/" class="post-img " style="background-size: cover; 
747                background-position: center center;">
748                <img class="lazyload lazyload placeholder" src="https://pic2.zhimg.com/80/v2-e22aaad20d20634f506f57fff0fcbc17_1440w.webp" class="lazyload placeholder" data-srcset="https://pic2.zhimg.com/80/v2-e22aaad20d20634f506f57fff0fcbc17_1440w.webp" srcset="https://pic1.zhimg.com/v2-cd38920285d125be80b3eb504052c550_b.webp" alt="">
749              </a>
750            </div>
751            <div class="post-date-title">
752              <div>
753                <span class="post-date">11-22</span>
754              </div>
755              <a class="post-title" href="/2021/11/22/%E6%8A%8A%E5%8D%9A%E5%AE%A2%E4%BB%8EGitHub%E8%BF%81%E7%A7%BB%E5%88%B0Gitee/">把博客从GitHub迁移到Gitee</a>
756            </div>
757          </li>
758        
759          
760          <li class="post-item" data-aos="fade-left">
761            
762            <div class="post-img-box">
763              <a href="/2021/11/20/%E5%85%B3%E4%BA%8E%E5%8D%9A%E5%AE%A2%E7%9A%84%E4%BA%8B/" class="post-img " style="background-size: cover; 
764                background-position: center center;">
765                <img class="lazyload lazyload placeholder" src="https://pic4.zhimg.com/80/v2-e434e3a2888fb4efb1844845b8791d1f_1440w.webp" class="lazyload placeholder" data-srcset="https://pic4.zhimg.com/80/v2-e434e3a2888fb4efb1844845b8791d1f_1440w.webp" srcset="https://pic1.zhimg.com/v2-cd38920285d125be80b3eb504052c550_b.webp" alt="">
766              </a>
767            </div>
768            <div class="post-date-title">
769              <div>
770                <span class="post-date">11-20</span>
771              </div>
772              <a class="post-title" href="/2021/11/20/%E5%85%B3%E4%BA%8E%E5%8D%9A%E5%AE%A2%E7%9A%84%E4%BA%8B/">关于博客的事</a>
773            </div>
774          </li>
775        
776      </ul>
777    </div>
778  </section>
779  <div class="w-70">
780    
781  <!-- <nav class="page-nav">
782    <span class="page-number current">1</span><a class="page-number" href="/archives/page/2/">2</a><a class="extend next" rel="next" href="/archives/page/2/">下一页</a>
783  </nav> -->
784  <div class="page-nav">
785    
786    <div class="page-info">
787        <div class="page-info-text">1 / 2</div>
788    </div>
789    
790      <a href="/archives/page/2/"
791         class="page-nav-next">
792          <span class="mr-5">下一页</span><i class="fas fa-angle-right"></i>
793      </a>
794      
795  </div>
796
797  </div>
798</div>
799
800      </main>
801    </div>
802
803    <!-- 页脚 -->
804    
805  
806  
807    <!-- 底部鱼儿跳动效果,依赖于jquery-->
808<div id="j-fish-skip" style=" position: relative;height: 153px;width: auto;"></div>
809<script>
810  var RENDERER = {
811    POINT_INTERVAL: 5,
812    FISH_COUNT: 3,
813    MAX_INTERVAL_COUNT: 50,
814    INIT_HEIGHT_RATE: .5,
815    THRESHOLD: 50,
816    FISH_COLOR: '',
817    init: function () {
818      this.setFishColor(); this.setParameters(), this.reconstructMethods(), this.setup(), this.bindEvent(), this.render()
819    },
820    setFishColor: function () {
821      let isDark = JSON.parse(localStorage.getItem('dark')) || JSON.parse('false');
822      if (isDark) {
823        this.FISH_COLOR = '#222'; // 暗黑色,有时间把这整成一个变量
824      } else {
825        this.FISH_COLOR = '' || 'rgba(66, 185, 133, 0.8)';
826      }
827    },
828    setParameters: function () {
829      this.$window = $(window), this.$container = $("#j-fish-skip"), this.$canvas = $("<canvas />"), this.context = this.$canvas.appendTo(this.$container).get(0).getContext("2d"), this.points = [], this.fishes = [], this.watchIds = []
830    },
831    createSurfacePoints: function () {
832      var t = Math.round(this.width / this.POINT_INTERVAL);
833      this.pointInterval = this.width / (t - 1), this.points.push(new SURFACE_POINT(this, 0));
834      for (var i = 1; i < t; i++) {
835        var e = new SURFACE_POINT(this, i * this.pointInterval),
836          h = this.points[i - 1];
837        e.setPreviousPoint(h), h.setNextPoint(e), this.points.push(e)
838      }
839    },
840    reconstructMethods: function () {
841      this.watchWindowSize = this.watchWindowSize.bind(this), this.jdugeToStopResize = this.jdugeToStopResize.bind(this), this.startEpicenter = this.startEpicenter.bind(this), this.moveEpicenter = this.moveEpicenter.bind(this), this.reverseVertical = this.reverseVertical.bind(this), this.render = this.render.bind(this)
842    },
843    setup: function () {
844      this.points.length = 0, this.fishes.length = 0, this.watchIds.length = 0, this.intervalCount = this.MAX_INTERVAL_COUNT, this.width = this.$container.width(), this.height = this.$container.height(), this.fishCount = this.FISH_COUNT * this.width / 500 * this.height / 500, this.$canvas.attr({
845        width: this.width,
846        height: this.height
847      }), this.reverse = !1, this.fishes.push(new FISH(this)), this.createSurfacePoints()
848    },
849    watchWindowSize: function () {
850      this.clearTimer(), this.tmpWidth = this.$window.width(), this.tmpHeight = this.$window.height(), this.watchIds.push(setTimeout(this.jdugeToStopResize, this.WATCH_INTERVAL))
851    },
852    clearTimer: function () {
853      for (; this.watchIds.length > 0;) clearTimeout(this.watchIds.pop())
854    },
855    jdugeToStopResize: function () {
856      var t = this.$window.width(),
857        i = this.$window.height(),
858        e = t == this.tmpWidth && i == this.tmpHeight;
859      this.tmpWidth = t, this.tmpHeight = i, e && this.setup()
860    },
861    bindEvent: function () {
862      this.$window.on("resize", this.watchWindowSize), this.$container.on("mouseenter", this.startEpicenter), this.$container.on("mousemove", this.moveEpicenter)
863    },
864    getAxis: function (t) {
865      var i = this.$container.offset();
866      return {
867        x: t.clientX - i.left + this.$window.scrollLeft(),
868        y: t.clientY - i.top + this.$window.scrollTop()
869      }
870    },
871    startEpicenter: function (t) {
872      this.axis = this.getAxis(t)
873    },
874    moveEpicenter: function (t) {
875      var i = this.getAxis(t);
876      this.axis || (this.axis = i), this.generateEpicenter(i.x, i.y, i.y - this.axis.y), this.axis = i
877    },
878    generateEpicenter: function (t, i, e) {
879      if (!(i < this.height / 2 - this.THRESHOLD || i > this.height / 2 + this.THRESHOLD)) {
880        var h = Math.round(t / this.pointInterval);
881        h < 0 || h >= this.points.length || this.points[h].interfere(i, e)
882      }
883    },
884    reverseVertical: function () {
885      this.reverse = !this.reverse;
886      for (var t = 0, i = this.fishes.length; t < i; t++) this.fishes[t].reverseVertical()
887    },
888    controlStatus: function () {
889      for (var t = 0, i = this.points.length; t < i; t++) this.points[t].updateSelf();
890      for (t = 0, i = this.points.length; t < i; t++) this.points[t].updateNeighbors();
891      this.fishes.length < this.fishCount && 0 == --this.intervalCount && (this.intervalCount = this.MAX_INTERVAL_COUNT, this.fishes.push(new FISH(this)))
892    },
893    render: function () {
894      requestAnimationFrame(this.render), this.controlStatus(), this.context.clearRect(0, 0, this.width, this.height), this.context.fillStyle = this.FISH_COLOR;
895      for (var t = 0, i = this.fishes.length; t < i; t++) this.fishes[t].render(this.context);
896      this.context.save(), this.context.globalCompositeOperation = "xor", this.context.beginPath(), this.context.moveTo(0, this.reverse ? 0 : this.height);
897      for (t = 0, i = this.points.length; t < i; t++) this.points[t].render(this.context);
898      this.context.lineTo(this.width, this.reverse ? 0 : this.height), this.context.closePath(), this.context.fill(), this.context.restore(
vendor: 4,264 bytes, lines 898-952
898)
899    }
900  },
901  SURFACE_POINT = function (t, i) {
902    this.renderer = t, this.x = i, this.init()
903  };
904  SURFACE_POINT.prototype = {
905    SPRING_CONSTANT: .03,
906    SPRING_FRICTION: .9,
907    WAVE_SPREAD: .3,
908    ACCELARATION_RATE: .01,
909    init: function () {
910      this.initHeight = this.renderer.height * this.renderer.INIT_HEIGHT_RATE, this.height = this.initHeight, this.fy = 0, this.force = {
911        previous: 0,
912        next: 0
913      }
914    },
915    setPreviousPoint: function (t) {
916      this.previous = t
917    },
918    setNextPoint: function (t) {
919      this.next = t
920    },
921    interfere: function (t, i) {
922      this.fy = this.renderer.height * this.ACCELARATION_RATE * (this.renderer.height - this.height - t >= 0 ? -1 : 1) * Math.abs(i)
923    },
924    updateSelf: function () {
925      this.fy += this.SPRING_CONSTANT * (this.initHeight - this.height), this.fy *= this.SPRING_FRICTION, this.height += this.fy
926    },
927    updateNeighbors: function () {
928      this.previous && (this.force.previous = this.WAVE_SPREAD * (this.height - this.previous.height)), this.next && (this.force.next = this.WAVE_SPREAD * (this.height - this.next.height))
929    },
930    render: function (t) {
931      this.previous && (this.previous.height += this.force.previous, this.previous.fy += this.force.previous), this.next && (this.next.height += this.force.next, this.next.fy += this.force.next), t.lineTo(this.x, this.renderer.height - this.height)
932    }
933  };
934  var FISH = function (t) {
935    this.renderer = t, this.init()
936  };
937  FISH.prototype = {
938    GRAVITY: .4,
939    init: function () {
940      this.direction = Math.random() < .5, this.x = this.direction ? this.renderer.width + this.renderer.THRESHOLD : -this.renderer.THRESHOLD, this.previousY = this.y, this.vx = this.getRandomValue(4, 10) * (this.direction ? -1 : 1), this.renderer.reverse ? (this.y = this.getRandomValue(1 * this.renderer.height / 10, 4 * this.renderer.height / 10), this.vy = this.getRandomValue(2, 5), this.ay = this.getRandomValue(.05, .2)) : (this.y = this.getRandomValue(6 * this.renderer.height / 10, 9 * this.renderer.height / 10), this.vy = this.getRandomValue(-5, -2), this.ay = this.getRandomValue(-.2, -.05)), this.isOut = !1, this.theta = 0, this.phi = 0
941    },
942    getRandomValue: function (t, i) {
943      return t + (i - t) * Math.random()
944    },
945    reverseVertical: function () {
946      this.isOut = !this.isOut, this.ay *= -1
947    },
948    controlStatus: function (t) {
949      this.previousY = this.y, this.x += this.vx, this.y += this.vy, this.vy += this.ay, this.renderer.reverse ? this.y > this.renderer.height * this.renderer.INIT_HEIGHT_RATE ? (this.vy -= this.GRAVITY, this.isOut = !0) : (this.isOut && (this.ay = this.getRandomValue(.05, .2)), this.isOut = !1) : this.y < this.renderer.height * this.renderer.INIT_HEIGHT_RATE ? (this.vy += this.GRAVITY, this.isOut = !0) : (this.isOut && (this.ay = this.getRandomValue(-.2, -.05)), this.isOut = !1), this.isOut || (this.theta += Math.PI / 20, this.theta %= 2 * Math.PI, this.phi += Math.PI / 30, this.phi %= 2 * Math.PI), this.renderer.generateEpicenter(this.x + (this.direction ? -1 : 1) * this.renderer.THRESHOLD, this.y, this.y - this.previousY), (this.vx > 0 && this.x > this.renderer.width + this.renderer.THRESHOLD || this.vx < 0 && this.x < -this.renderer.THRESHOLD) && this.init()
950    },
951    render: function (t) {
952      t.save(), t.translate(this.x, this.y), t.rotate(Math.PI + Math.atan2(this.vy, this.vx)), t.scale(1, this.direction ? 1 : -1), t.beginPath(), t.moveTo(-30, 0), t.bezierCurveTo(-20, 15, 15, 10, 40, 0), t.bezierCurveTo(15, -10, -20, -15, -30, 0), t.fill(), t.save(), t.translate(40, 0), t.scale(.9 + .2 * Math.sin(this.theta), 1), t.beginPath(), t.moveTo(0, 0), t.quadraticCurveTo(5, 10, 20, 8), t.quadraticCurveTo(12, 5, 10, 0), t.quadraticCurveTo(12, -5, 20, -8), t.quadraticCurveTo(5, -10, 0, 0), t.fill(), t.restore(), t.save(), t.translate(-3, 0), t.rotate((Math.PI / 3 + Math.PI / 10 * Math.sin(this.phi)) * (this.renderer.reverse ? -1 : 1)), t.beginPath(), this.renderer.reverse ? (t.moveTo(5, 0), t.bezierCurveTo(10, 10, 10, 30, 0, 40), t.bezierCurveTo(-12, 25, -8, 10, 0, 0)) : (t.moveTo(-5, 0), t.bezierCurveTo(-10, -10, -10, -30, 0, -40), t.bezierCurveTo(12, -25, 8, -10, 0, 0)), t.closePath(), t.fill(), t.restore(
952), t.restore(), this.controlStatus(t)
953    }
954  }, $(function () {
955    RENDERER.init()
956    $('.dark').click(function () {
957      setTimeout(() => {
958        RENDERER.setFishColor();
959        RENDERER.context.fill();
960      });
961    })
962  });
963</script>
963
964  
965  <div class="footer bg-color">
966    <div class="footer-main">
967      
968        
969          <div class="link">
970            
971          </div>
972        
973      
974        
975          <div class="footer-copyright">
976            <p>Copyright © 2021 - 2023 <a target="_blank" rel="noopener" href="https://blog.aerr.cn">青云依兮</a> |  Theme <a target="_blank" rel="noopener" href="https://github.com/yuang01/theme">Bamboo</a> </p>
977
978          </div>
979        
980      
981        
982          
983            <!-- 不蒜子统计 -->
984            <!-- 不蒜子统计 -->
985<span id="busuanzi_container_site_pv">
986      <i class="fas fa-eye" aria-hidden="true"></i>本站总访问量:<span id="busuanzi_value_site_pv"></span> 次
987</span>
988<span class="post-meta-divider">|</span>
989<span id="busuanzi_container_site_uv" style='display:none'>
990      <i class="fas fa-users" aria-hidden="true"></i>本站访客数:<span id="busuanzi_value_site_uv"></span> 人
991</span>
992
993          
994        
995      
996        
997          <div class="footer-custom">
998            
999          </div>
1000        
1001      
1002    </div>
1003  </div>
1004
1005
1006
1007    <!-- 渲染暗黑按钮 -->
1008    
1009      <div class="dark">
1010  <div class="dark-content">
1011    <i class="fas fa-moon" aria-hidden="true"></i>
1012    <!-- <span>关灯</span> -->
1013  </div>
1014  
1015</div>
1016
1017<script>
1018  $(function() {
1019    let isDark = JSON.parse(localStorage.getItem('dark'))  || JSON.parse('false');
1020    if (isDark) {
1021      $(".dark-content").replaceWith(
1022          `
1023          <div class='dark-content'>
1024            <i class="fas fa-lightbulb" aria-hidden="true"></i>
1025          </div>
1026          `
1027        );
1028    }
1029    $('.dark').click(function() {
1030      if ($(document.body).is('.darkModel')) {
1031        $(document.body).removeClass('darkModel');
1032        localStorage.setItem('dark', false);
1033        $(".dark-content").replaceWith(
1034          `
1035          <div class='dark-content'>
1036            <i class="fas fa-moon" aria-hidden="true"></i>
1037          </div>
1038          `
1039        );
1040      } else {
1041        $(document.body).addClass('darkModel');
1042        localStorage.setItem('dark', true);
1043        $(".dark-content").replaceWith(
1044          `
1045          <div class='dark-content'>
1046            <i class="fas fa-lightbulb" aria-hidden="true"></i>
1047          </div>
1048          `
1049        );
1050      }
1051    })
1052  })
1053</script>
1053
1054    
1055    <!-- 渲染回到顶部按钮 -->
1056    
1057      <div class="goTop top-btn-color" pointer>
1058  <i class="fas fa-arrow-up" aria-hidden="true"></i>
1059</div>
1060<script src="/js/goTop.js"></script>
1060
1061
1062    
1063    <!-- 渲染左下角音乐播放器 -->
1064    
1065
1066    <!-- 图片放大 -->
1067    
1068      
1068<script src="/js/fancybox.umd.js"></script>
1068
1069    
1070
1071    <!-- 百度解析 -->
1072    <!-- Baidu Analytics -->
1073
1074    <!-- Baidu Push -->
1075
1076<script>
1077    (function () {
1078        var bp = document.createElement('script');
1079        var curProtocol = window.location.protocol.split(':')[0];
1080        if (curProtocol === 'https') {
1081            bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
1082        } else {
1083            bp.src = 'http://push.zhanzhang.baidu.com/push.js';
1084        }
1085        var s = document.getElementsByTagName("script")[0];
1086        s.parentNode.insertBefore(bp, s);
1087    })();
1088</script>
1088
1089
1090    
1091    <!-- 背景彩带 -->
1092    
1093      
1093<script type="text/javascript" size="100" alpha='0.4' zIndex="-1" src="/js/ribbon.min.js"></script>
1093
1094    
1095
1096    
1096<script src="/js/utils/index.js"></script>
1096
1097    
1097<script src="/js/app.js"></script>
1097
1098    
1099    <!-- 文章目录所需js -->
1100<!-- <link href="/js/tocbot/tocbot.css" rel="stylesheet">
1101<script src="/js/tocbot/tocbot.min.js"></script>
1101 -->
1102
1103<script src="/js/tocbot.min.js"></script>
1103
1104
1105
1106<link rel="stylesheet" href="/css/tocbot.css">
1107
1108<script>
1109  var headerEl = 'h2, h3, h4',  //headers 
1110    content = '.post-detail',//文章容器
1111    idArr = {};  //标题数组以确定是否增加索引id
1112  //add #id
1113  var option = {
1114    // Where to render the table of contents.
1115    tocSelector: '.toc',
1116    // Where to grab the headings to build the table of contents.
1117    contentSelector: content,
1118    // Which headings to grab inside of the contentSelector element.
1119    headingSelector: headerEl,
1120    scrollSmooth: true,
1121    scrollSmoothOffset: -70,
1122    // headingsOffset: -($(window).height() * 0.4 - 45),
1123    headingsOffset: -($(window).height() * 0.4 - 70),
1124    // positionFixedSelector: '.toc-main',
1125    // positionFixedClass: 'is-position-fixed',
1126    fixedSidebarOffset: 'auto',
1127    activeLinkClass: 'is-active-link',
1128    orderedList: true,
1129    collapseDepth: 20,
1130    // onClick: function (e) {},
1131  }
1132  if ($('.toc').length > 0) {
1133
1134    $(content).children(headerEl).each(function () {
1135      //去除空格以及多余标点
1136      var headerId = $(this).text().replace(/[\s|\~|`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\_|\+|\=|\||\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\<|\.|\>|\/|\?|\:|\,|\。]/g, '');
1137
1138      headerId = headerId.toLowerCase();
1139      if (idArr[headerId]) {
1140        //id已经存在
1141        $(this).attr('id', headerId + '-' + idArr[headerId]);
1142        idArr[headerId]++;
1143      }
1144      else {
1145        //id未存在
1146        idArr[headerId] = 1;
1147        $(this).attr('id', headerId);
1148      }
1149    });
1150
1151    document.addEventListener("DOMContentLoaded", function () {
1152      tocbot.init(option);
1153      mobileTocClick();
1154    });
1155
1156  }
1157
1158  window.tocScrollFn = function () {
1159    return bamboo.throttle(function () {
1160      findHeadPosition();
1161    }, 100)()
1162  }
1163  window.addEventListener('scroll', tocScrollFn);
1164
1165  const findHeadPosition = function (top) {
1166    if ($('.toc-list').length <= 0) {
1167      return false;
1168    }
1169    setTimeout(() => {  // or DOMContentLoaded 
1170      autoScrollToc();
1171    }, 0);
1172  }
1173
1174  const autoScrollToc = function () {
1175    const $activeItem = document.querySelector('.is-active-link');
1176    const $cardToc = document.querySelector('.toc-content');
1177    const activePosition = $activeItem.getBoundingClientRect().top
1178    const sidebarScrollTop = $cardToc.scrollTop
1179    if (activePosition > (document.documentElement.clientHeight - 100)) {
1180      $cardToc.scrollTop = sidebarScrollTop + 150
1181    }
1182    if (activePosition < 150) {
1183      $cardToc.scrollTop = sidebarScrollTop - 150
1184    }
1185  }
1186
1187  document.addEventListener('pjax:send', function () {
1188    if ($('.toc').length) {
1189      tocbot.destroy();
1190    }
1191  });
1192
1193  document.addEventListener('pjax:complete', function () {
1194    if ($('.toc').length) {
1195      tocbot.init(option);
1196      mobileTocClick();
1197    }
1198  });
1199  
1200  // 手机端toc按钮点击出现目录
1201  const mobileTocClick = function () {
1202    const $cardTocLayout = document.getElementsByClassName('side_toc')[0];
1203    const $cardToc = $cardTocLayout.getElementsByClassName('toc-content')[0];
1204    let right = '45px';
1205    if (window.innerWidth >= 551 && window.innerWidth <= 992) {
1206      right = '100px'
1207    }
1208    const mobileToc = {
1209      open: () => {
1210        $cardTocLayout.style.cssText = 'animation: toc-open .3s; opacity: 1; right: ' + right
1211      },
1212
1213      close: () => {
1214        $cardTocLayout.style.animation = 'toc-close .2s'
1215        setTimeout(() => {
1216          $cardTocLayout.style.cssText = "opacity:''; animation: ''; right: ''"
1217        }, 100)
1218      }
1219    }
1220    document.getElementById('toc-mobile-btn').addEventListener('click', () => {
1221      if (window.getComputedStyle($cardTocLayout).getPropertyValue('opacity') === '0') mobileToc.open()
1222      else mobileToc.close()
1223    })
1224
1225    $cardToc.addEventListener('click', (e) => {
1226      if (window.innerWidth < 992) { // 小于992px的时候
1227        mobileToc.close()
1228      }
1229    })
1230  }
1231</script>
1231
1232
1233<style>
1234  /* .is-position-fixed {
1235    position: sticky !important;
1236    top: 74px;
1237  }
1238
1239  .toc-main ul {
1240    counter-reset: show-list;
1241  }
1242
1243  .toc-main ul li::before {
1244    content: counter(item)".";
1245    display: block;
1246    position: absolute;
1247    left: 12px;
1248    top: 0;
1249  } */
1250</style>
1251 
1252
1253<!-- 设置导航背景 -->
1254<script>
1255  let setHeaderClass = () => {
1256    const nav = $('#navHeader');
1257    const navTop = nav.outerHeight();
1258    const winTop = $(window).scrollTop();
1259    if(winTop > navTop) {
1260      nav.addClass('header-bg-color');
1261    }
1262    else {
1263      nav.removeClass('header-bg-color');
1264    }
1265  };
1266
1267  let scrollCollect = () => {
1268    return bamboo.throttle(function (e) {
1269      setHeaderClass();
1270    }, 200)()
1271  }
1272
1273  let initHeaderBg = () => {
1274    setHeaderClass();
1275  }
1276
1277  setHeaderClass();
1278  window.addEventListener('scroll', scrollCollect);
1279
1280  document.addEventListener('pjax:send', function () {
1281    window.removeEventListener('scroll', scrollCollect)
1282  })
1283  document.addEventListener('pjax:complete', function () {
1284    window.addEventListener('scroll', scrollCollect);
1285    setHeaderClass();
1286  })
1287</script>
1287 
1288
1289<!-- 渲染issues标签里的内容 -->
1290<script>
1291  function loadIssuesJS() {
1292    if ($(".post-detail").find(".issues-api").length == 0) {
1293      return;
1294    } 
1295    loadScript('/js/issues/index.js');
1296  };
1297  $(function () {
1298    loadIssuesJS();
1299  });
1300  document.addEventListener('pjax:complete', function () {
1301    if (typeof IssuesAPI == "undefined") {
1302      loadIssuesJS();
1303    }
1304  })
1305</script>
1305
1306
1307<!-- 渲染远程json加载的图片标签(getPhotoOnline)里的内容 -->
1308<script>
1309  function loadPhotoOnlineJS() {
1310    if ($(".post-detail").find(".getJsonPhoto-api").length == 0) {
1311      return;
1312    } 
1313    loadScript('/js/getPhotoOnline/index.js');
1314  };
1315  $(function () {
1316    loadPhotoOnlineJS();
1317  });
1318  document.addEventListener('pjax:complete', function () {
1319    if (typeof getPhotoJson == "undefined") {
1320      loadPhotoOnlineJS();
1321    }
1322  })
1323</script>
1323
1324
1325<!-- 渲染远程json加载的talk标签(getTalkOnline)里的内容 -->
1326<script>
1327  function loadTalkOnlineJS() {
1328    if ($(".post-detail").find(".getJsonTalk-api").length == 0) {
1329      return;
1330    } 
1331    loadScript('https://cdnjs.cloudflare.com/ajax/libs/waterfall.js/1.0.2/waterfall.min.js'); // 瀑布流插件,https://raphamorim.io/waterfall.js/
1332    loadScript('/js/getTalkOnline/index.js');
1333  };
1334  $(function () {
1335    loadTalkOnlineJS();
1336  });
1337  document.addEventListener('pjax:complete', function () {
1338    if (typeof getTalkJson == "undefined") {
1339      loadTalkOnlineJS();
1340    }
1341  })
1342</script>
1342
1343
1344<!-- 渲染远程json加载的site-card标签(getSiteOnline)里的内容 -->
1345<script>
1346  function loadSiteOnlineJS() {
1347    if ($(".post-detail").find(".getJsonSite-api").length == 0) {
1348      return;
1349    } 
1350    loadScript('/js/getSiteOnline/index.js');
1351  };
1352  $(function () {
1353    loadSiteOnlineJS();
1354  });
1355  document.addEventListener('pjax:complete', function () {
1356    if (typeof getSiteJson == "undefined") {
1357      loadSiteOnlineJS();
1358    }
1359  })
1360</script>
1360
1361
1362<!-- 输入框打字特效 -->
1363<!-- 输入框打字特效 -->
1364
1365  
1365<script src="/js/activate-power-mode.js"></script>
1365
1366  
1366<script>
1367    POWERMODE.colorful = true;  // 打开随机颜色特效
1368    POWERMODE.shake = false;    // 关闭输入框抖动
1369    document.body.addEventListener('input', POWERMODE);//监听打字事件
1370  </script>
1370
1371
1372
1373<!-- markdown代码一键复制功能 -->
1374
1375  <link rel="stylesheet" href="https://cdn.jsdmirror.com/npm/v-plugs-ayu/lib/ayu.css">
1376  
1376<script src="https://cdn.jsdmirror.com/npm/v-plugs-ayu/lib/ayu.umd.min.js"></script>
1376
1377  
1377<script src="/js/clipboard/clipboard.min.js"></script>
1377
1378  <div id="appCopy">
1379  </div>
1380  
1380<script data-pjax>
1381    var vm = new Vue({
1382      el: '#appCopy',
1383      data: {
1384      },
1385      computed: {
1386      },
1387      mounted() {
1388        const that = this;
1389        var copy = '复制';
1390        /* code */
1391        var initCopyCode = function () {
1392          var copyHtml = '';
1393          copyHtml += '<button class="btn-copy" data-clipboard-snippet="" style="position:absolute;top:0;right:0;z-index:1;">';
1394          copyHtml += '<i class="fas fa-copy"></i><span>' + copy + '</span>';
1395          copyHtml += '</button>';
1396          $(".post-detail pre").not('.gutter pre').wrap("<div class='codeBox' style='position:relative;width:100%;'></div>")
1397          $(".post-detail pre").not('.gutter pre').before(copyHtml);
1398          new ClipboardJS('.btn-copy', {
1399            target: function (trigger) {
1400              return trigger.nextElementSibling;
1401            }
1402          });
1403        }
1404        initCopyCode();
1405        $('.btn-copy').unbind('click').bind('click', function () {
1406          doSomething();
1407        })
1408        $(document).unbind('keypress').bind('keypress', function (e) {
1409          if (e.ctrlKey && e.keyCode == 67) {
1410            doSomething();
1411          }
1412        })
1413
1414        function doSomething() {
1415          that.$notify({
1416            title: "成功",
1417            content: "代码已复制,请遵守相关授权协议。--青云依兮",
1418            type: 'success'
1419          })
1420        }
1421      },
1422      methods: {
1423      },
1424      created() { }
1425    })
1426  </script>
1426
1427  
1428
1429<!-- 图片懒加载 -->
1430<script defer src="https://cdn.jsdmirror.com/npm/[email protected]/dist/lazyload.min.js"></script>
vendor: 1 bytes, line 1430
1430
1431<script>
1432  // https://www.npmjs.com/package/vanilla-lazyload
1433  // Set the options globally
1434  // to make LazyLoad self-initialize
1435  window.lazyLoadOptions = {
1436    elements_selector: ".lazyload",
1437    threshold: 0
1438  };
1439  // Listen to the initialization event
1440  // and get the instance of LazyLoad
1441  window.addEventListener(
1442    "LazyLoad::Initialized",
1443    function (event) {
1444      window.lazyLoadInstance = event.detail.instance;
1445    },
1446    false
1447  );
1448  document.addEventListener('DOMContentLoaded', function () {
1449    lazyLoadInstance.update();
1450  });
1451  document.addEventListener('pjax:complete', function () {
1452    lazyLoadInstance.update();
1453  });
1454</script>
1454
1455
1456
1457<!-- 卡片滚动动画 -->
1458   
1459
1460<!-- 评论所需js -->
1461
1462  
1463    <!-- 弹幕所需的css和js -->
1464    
1465  <!-- 弹幕插件 -->
1466  <link href="/js/danmu/barrager.css" rel="stylesheet">
1467  
1467<script src="/js/danmu/jquery.barrager.js"></script>
1467
1468
1469<!-- 具体js,请前往valine/script.ejs查看 -->
1470
1471    
1471<script>
1472  var requiredFields = '';
1473  requiredFields = requiredFields.split(',');
1474  comment_el = '.comment';
1475  let looperValine = null;
1476  load_valine = function () {
1477    if ($(comment_el).length) {
1478      var valine = new Valine({
1479        el: '#vcomment',
1480        path: window.location.pathname,
1481        notify: false,
1482        verify: false,
1483        app_id: "8M0jKEDHJ9lR1j8WhakihSbv-gzGzoHsz",
1484        app_key: "6KkhQq0feQa6GF4iL11paa5H",
1485        placeholder: "请输入评论内容",
1486        avatar: "",
1487        master: "d72e6625d8e1e44d5dc721a27fc08508",   //博主邮箱md5
1488        tagMeta: ["博主","小伙伴","访客"],     //标识字段名
1489        friends: "",
1490        metaPlaceholder: { "nick": "昵称/QQ号", "mail": "邮箱" },
1491        requiredFields: requiredFields,
1492        enableQQ: true,
1493      });
1494      function debounce(fn) {
1495        var timerID = null
1496        return function () {
1497          var arg = arguments[0]   //获取事件
1498          if (timerID) {
1499            clearTimeout(timerID)
1500          }
1501          timerID = setTimeout(function () {
1502            fn(arg)              //事件传入函数
1503          }, 200)
1504        }
1505      }
1506      //查询评论 valine.Q('*').limit(7) -- 查询所有,限制7条, 下面的的代码是查询当前页面
1507      var themeDanmu = eval('true');
1508      var themeLoop = eval('false');
1509      var themeLooperTime = '5000' || 5000;
1510      var speed = '40' || 20;
1511      var isBarrager = true;
1512      if (themeDanmu == true) {
1513        do_barrager();
1514        if ($('.danmuBox').length <= 0) {
1515          $('.navbar').append('<div class="danmuBox"><div class="danmuBtn open"><span class="danmuCircle"></span><span class="danmuText">弹幕</span></div></div>');
1516        }
1517        $('.danmuBtn').on('click', debounce(
1518          function () {
1519            if ($('.danmuBtn').hasClass('open')) {
1520              $('.danmuBtn').removeClass('open')
1521              clearInterval(looperValine);
1522              $.fn.barrager.removeAll();
1523            } else {
1524              $('.danmuBtn').addClass("open");
1525              do_barrager();
1526            }
1527          }
1528        ))
1529      }
1530      function do_barrager() {
1531        isBarrager && valine.Q(window.location.pathname).find().then(function (comments) {
1532          // var num = 0; // 可以记录条数,循环调用的时候只取最新的评论放入弹幕中
1533          var run_once = true;
1534          var looper_time = themeLooperTime;
1535          var total = comments.length;
1536          // var looper = null;
1537          var index = 0;
1538          if (total > 0) {
1539            barrager();
1540          } else {
1541            // 当评论数为0的时候,自动关闭弹幕
1542            // $('.danmuBtn').removeClass('open');
1543          }
1544          function barrager() {
1545            if (run_once) {
1546              //如果是首次执行,则设置一个定时器,并且把首次执行置为false
1547              looperValine = setInterval(barrager, looper_time);
1548              run_once = false;
1549            }
1550            var content = comments[index]._serverData.comment;
1551            var email = comments[index]._serverData.mail;
1552            var link = comments[index]._serverData.link;
1553            var newcontent = content.substring(0, 50).replace(/<[^>]+>/g, "");
1554            //发布一个弹幕
1555            const item = {
1556              img: `https://q1.qlogo.cn/g?b=qq&nk=${email}&s=640`, //图片 
1557              info: newcontent, //文字 
1558              href: link, //链接 
1559              close: true, //显示关闭按钮 
1560              speed: speed, //延迟,单位秒,默认6 
1561              color: '#fff', //颜色,默认白色 
1562              old_ie_color: '#000000', //ie低版兼容色,不能与网页背景相同,默认黑色
1563            }
1564            $('body').barrager(item);
1565            //索引自增
1566            index++;
1567            //所有弹幕发布完毕,清除计时器。
1568            if (index == total) {
1569              clearInterval(looperValine);
1570              if (themeLoop === true) {
1571                setTimeout(function () {
1572                  do_barrager();
1573                }, 5000);
1574              } else {
1575                $('.danmuBtn').removeClass('open');
1576              }
1577              return false;
1578            }
1579
1580          }
1581        })
1582      }
1583    }
1584  };
1585  $(document).ready(load_valine);
1586  document.addEventListener('pjax:send', function (e) {
1587    
1588      $('.danmuBox').length > 0 && $('.danmuBox').remove()
1589      looperValine && clearInterval(looperValine);
1590      $.fn.barrager.removeAll();
1591    
1592  })
1593  document.addEventListener('pjax:complete', function () {
1594    load_valine();
1595  });
1596</script>
1596
1597
1598  
1599
1600
1601<!-- 鼠标点击特效 -->
1602<!-- 爱心点击 -->
1603
1604  
1605    <canvas class="fireworks" style="position: fixed;left: 0;top: 0;z-index: 999; pointer-events: none;" ></canvas>
1606    
1606<script src="//cdn.bootcss.com/animejs/2.2.0/anime.min.js"></script>
1606
1607    
1607<script src="/js/cursor/explosion.min.js"></script>
1607
1608  
1609
1610
1611
1612
1613  
1613<script async src="/js/busuanzi.pure.mini.js" data-pjax></script>
1613
1614
1615
1616<!-- 轮播图标签 -->
1617<script>
1618  var bambooSwiperTag = {};
1619  function load_swiper() {
1620    if (!document.querySelectorAll(".post-swiper-container")[0]) return;
1621    loadCSS("https://cdn.jsdmirror.com/npm/swiper@6/swiper-bundle.min.css")
1622    loadScript("https://cdn.jsdmirror.com/npm/swiper@6/swiper-bundle.min.js").then(() => {
1623      pjax_swiper();
1624    });
1625  }
1626
1627  load_swiper();
1628
1629  function pjax_swiper() {
1630    bambooSwiperTag.swiper = new Swiper('.post-swiper-container', {
1631      slidesPerView: 'auto',
1632      spaceBetween: 8,
1633      centeredSlides: true,
1634      loop: true,
1635      autoplay: true ? {
1636        delay: 3000,
1637        stopOnLastSlide: false,
1638        disableOnInteraction: false,
1639      } : false,
1640      pagination: {
1641        el: '.swiper-pagination',
1642        clickable: true,
1643      },
1644      navigation: {
1645        nextEl: '.swiper-button-next',
1646        prevEl: '.swiper-button-prev',
1647      },
1648      on:{
1649        init: function(){
1650          swiperAnimateCache(this); //隐藏动画元素 
1651          swiperAnimate(this); //初始化完成开始动画
1652        }, 
1653        slideChangeTransitionEnd: function(){ 
1654          swiperAnimate(this); //每个slide切换结束时也运行当前slide动画
1655          //this.slides.eq(this.activeIndex).find('.ani').removeClass('ani'); 动画只展现一次,去除ani类名
1656        } 
1657      }
1658    });
1659  }
1660
1661  document.addEventListener('pjax:complete', function () {
1662    if (!document.querySelectorAll(".post-swiper-container")[0]) return;
1663    if (typeof bambooSwiperTag.swiper === "undefined") {
1664      load_swiper();
1665    } else {
1666      pjax_swiper();
1667    }
1668  });
1669</script>
1669
1670    <!-- pjax -->
1671    
1672
1673<!-- pjax -->
1674
1675
1676  
1676<script src="/js/[email protected]/index.js"></script>
1676
1677  
1678    <!-- 样式位于:source/css/_third-party/pjaxanimate.styl -->
1679
1680<div class="pjax-animate">
1681  
1682    <div class="loading-circle"><div id="loader-circle"></div></div>
1683    
1683<script>
1684      window.ShowLoading = function() {
1685        $(".loading-circle").css("display", "block");
1686      };
1687      window.HideLoading = function() {
1688        $(".loading-circle").css("display", "none");
1689      }
1690    </script>
1690
1691  
1692	
1692<script>
1693    document.addEventListener('pjax:complete', function () {
1694      window.HideLoading();
1695    })
1696    document.addEventListener('pjax:send', function () {
1697      window.ShowLoading();
1698    })
1699    document.addEventListener('pjax:error', function () {
1700      window.HideLoading();
1701    })
1702	</script>
1702
1703</div>
1704
1705  
1706
1707  
1707<script>
1708    var pjax = new Pjax({
1709      elements: 'a[href]:not([href^="#"]):not([href="javascript:void(0)"]):not([no-pjax])',   // 拦截正常带链接的 a 标签
1710      selectors: ["#pjax-container","title"],                                   // 根据实际需要确认重载区域
1711      cacheBust: false,   // url 地址追加时间戳,用以避免浏览器缓存
1712      timeout: 5000
1713    });
1714
1715    document.addEventListener('pjax:send', function (e) {
1716
1717      try {
1718        var currentUrl = window.location.pathname;
1719        var targetUrl = e.triggerElement.href;
1720        var banUrl = [""];
1721        if (banUrl[0] != "") {
1722          banUrl.forEach(item => {
1723            if(currentUrl.indexOf(item) != -1 || targetUrl.indexOf(item) != -1) {
1724              window.location.href = targetUrl;
1725            }
1726          });
1727        }
1728      } catch (error) {}
1729
1730      $(window).unbind('resize');
1731      $(window).unbind('scroll');
1732      $(document).unbind('scroll');
1733      $(document).unbind('click');
1734      $('body').unbind('click');
1735
1736    })
1737    
1738    document.addEventListener('pjax:complete', function () {
1739      $('script[data-pjax], .pjax-reload script').each(function () {
1740        $(this).parent().append($(this).remove());
1741      });
1742    });
1743
1744    document.addEventListener('pjax:error', function (e) {
1745      window.location.href = e.triggerElement.href;
1746    })
1747    
1748    // 刷新不从顶部开始
1749    document.addEventListener("DOMContentLoaded", function () {
1750      history.scrollRestoration = 'auto';
1751    })
1752  </script>
1752
1753
1754
1755
1756  </body>
1757</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.