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 519 <!-- prismjs 代ç é«äº® --> 520 521 522 523<div class="bg-dark-floor" style="position: fixed;left: 0;top: 0;width: 100%;height: 100%;z-index: -1;"></div> 524 525 526 <!-- æç« 详æ 页顶é¨å¾çåæ é¢ --> 527 528 529 530 531<div class="post-detail-header" id="thumbnail_canvas" style="background-repeat: no-repeat; background-size: cover; 532 background-position: center center;position: relative;background-image:url('https://picx.zhimg.com/80/v2-b44931ea513e5f7b3b06f2703f79653c_1440w.webp')"> 533 <div class="post-detail-header-mask"></div> 534 <canvas id="header_canvas"style="position:absolute;bottom:0;pointer-events:none;"></canvas> 535 536 <div class="post-detail-header_info-box"> 537 <div class="title-box"> 538 <span class="title"> 539 说说 540 </span> 541 </div> 542 543 544 </div> 545 546 547
547<script src="/js/bubble/bubble.js"></script>
547 548 549</div> 550 551 552 553 554 555<div class="post-detail-content post-row" 556 style="padding-top: 0px;"> 557 <div class="main-content"> 558 <article class="post post-detail"> 559 <div class="post-content"> 560 <head> 561 562 563 <!-- ... --> 564</head> 565<body> 566 567 568 <div id="qexoDaoDao"></div> 569
569<script> 570if (typeof qexoDaodao === "undefined") { 571 const script = document.createElement("script"); 572 script.type = "text/javascript" 573 script.async = "async"; 574 script.src = "/js/qexo-dao.min.js"; 575 script.onload = function(){ 576 qexoDaodao.init({ 577 el: "#qexoDaoDao", 578 avatar: "https://q1.qlogo.cn/g?b=qq&nk=1422756921&s=640", 579 title: "说说", 580 name: "éäºä¾å ®", 581 limit: 20, 582 useLoadingImg: false, 583 baseURL: "https://hexo.tencent.cf/", 584 }); 585 }; 586 document.head.appendChild(script) 587} else { 588 qexoDaodao.init({ 589 el: "#qexoDaoDao", 590 avatar: "https://q1.qlogo.cn/g?b=qq&nk=1422756921&s=640", 591 title: "说说", 592 name: "éäºä¾å ®", 593 limit: 20, 594 useLoadingImg: false, 595 baseURL: "https://hexo.tencent.cf/", 596 }) 597} 598 </script>
598 599</body> 600 601 602 603 </div> 604 <div class="post-tags-categories"> 605 606 </div> 607 608 <div class="copyright"> 609 <ul class="post-copyright"> 610 <li class="post-copyright-author"> 611 <strong>ä½è : </strong>éäºä¾å ®</a> 612 </li> 613 <li class="post-copyright-link"> 614 <strong>æç« 龿¥: </strong> 615 <a href='/talks/' target='_blank' title='说说'>https://1422756921.github.io/talks/index.html</a> 616 </li> 617 <li class="post-copyright-license"> 618 <strong>çæå£°æ: </strong> 619 æ¬ç½ç«æææç« é¤ç¹å«å£°æå¤,åéç¨ <a rel="license" href="https://creativecommons.org/licenses/by-nc-nd/4.0/" target="_blank" title="Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)">CC BY-NC-ND 4.0</a> 620 许å¯åè®®ã转载请注æåºå¤! 621 </li> 622 </ul> 623<div> 624 625 </article> 626 <!-- ä¸ä¸ç¯æç« åä¸ä¸ç¯æç« --> 627 628 <!-- æç« 详æ 页çä¸ä¸é¡µåä¸ä¸é¡µ --> 629<div class="post-nav"> 630 631 632 633 634 635</div> 636 637 638 639 640 <!-- æèµ --> 641 642 <div id="appDonate" class="post-donate"> 643 <div id="donate_board" class="donate_bar center" ref="donate"> 644 <a id="btn_donate" class="btn_donate" href="javascript:;" title="æèµ" @click="showDialogDrawer()"></a> 645 </div> 646 <transition name="fade"> 647 <div 648 class="donate-box-mask" 649 v-cloak 650 v-show="visible" 651 @click="cancelDialogDrawer()" 652 > 653 </div> 654 </transition> 655 <transition name="bounce"> 656 <div class="donate-box" v-cloak v-show="visible"> 657 <div class="donate-box_close"> 658 <i class="fas fa-times" aria-hidden="true" @click="cancelDialogDrawer" pointer></i> 659 </div> 660 <div class="donate-box_title"> 661 <h4> 662 ä½ çèµè¯æ¯æåè¿çå¨å 663 </h4> 664 </div> 665 <div class="donate-box_tab"> 666 <div class="Alipay" pointer :class="{'active': tabActive === 'Alipay'}" @click="changeTabActive('Alipay')"> 667 æ¯ä»å® 668 </div> 669 <div class="WeChatpay" pointer :class="{'active': tabActive === 'WeChatpay'}" @click="changeTabActive('WeChatpay')"> 670 微信 671 </div> 672 </div> 673 <div class="donate-box_img"> 674 <div class="AlipayImg" v-show="tabActive === 'Alipay'"> 675 <img src="/medias/zfb.jpg" class="lazyload placeholder" data-srcset="/medias/zfb.jpg" srcset="https://pic1.zhimg.com/v2-cd38920285d125be80b3eb504052c550_b.webp" alt="æ¯ä»å®æèµ" /> 676 </div> 677 <div class="WeChatpayImg" v-show="tabActive === 'WeChatpay'"> 678 <img src="/medias/wx.jpg" class="lazyload placeholder" data-srcset="/medias/wx.jpg" srcset="https://pic1.zhimg.com/v2-cd38920285d125be80b3eb504052c550_b.webp" alt="微信æèµ" /> 679 </div> 680 </div> 681 </div> 682 </transition> 683</div> 684
685<script> 686 var body = document.body || document.documentElement || window; 687 var vm = new Vue({ 688 el: '#appDonate', 689 data: { 690 visible: false, 691 tabActive: 'Alipay', 692 top: 0, 693 }, 694 computed: { 695 }, 696 mounted() { 697 }, 698 methods: { 699 showDialogDrawer() { 700 this.visible = true; 701 // 鲿¢é¡µé¢æ»å¨ï¼åªè½è®©å¼¹æ¡æ»å¨ 702 // function getScroll() { 703 // return { 704 // left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0, 705 // top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0 706 // }; 707 // } 708 this.top = $(document).scrollTop() // or getScroll().top 709 // console.log('aa', $('.main-content')); 710 body.style.cssText = 'overflow: hidden;'; 711 }, 712 cancelDialogDrawer() { 713 this.visible = false; 714 body.removeAttribute('style'); 715 $(document).scrollTop(this.top) 716 }, 717 changeTabActive(name) { 718 this.tabActive = name; 719 } 720 }, 721 created() {} 722 }) 723</script>
723 724 725 726 <!-- å享 --> 727 728 <!-- https://github.com/overtrue/share.js --> 729<!-- æç« 详æ 页çå享 --> 730<div class="social-share" data-sites="twitter,facebook,google,qq,qzone,wechat,weibo,douban,linkedin" data-wechat-qrcode-helper="<p>微信æ«ä¸æ«å³å¯å享ï¼</p>"></div> 731
732<script src="/js/shareJs/social-share.min.js"></script>
732 733</script>
733 734 735<style> 736 .social-share { 737 margin: 20px 0; 738 } 739</style> 740 741 742 743 744 <!-- è¯è®º --> 745 <!-- è¯è®º --> 746 747 <div id="myComment"> 748 749 750<section id="comments" style="padding: 1em;" 751 class="animated bounceInUp"> 752 <div id="vcomment" class="comment"></div> 753</section> 754<style> 755 #comments { 756 background: rgb(206 255 224 / 81%); 757 } 758 #veditor { 759 background-image: url('/'); 760 background-size: contain; 761 background-repeat: no-repeat; 762 background-position: right; 763 background-color: rgba(255, 255, 255, 0); 764 resize: vertical; 765 } 766 #veditor:focus{ 767 background-position-y: 200px; 768 transition: all 0.2s ease-in-out 0s; 769 } 770 #vcomment .vcards .vcard .vh .vhead .vtag.vvisitor { 771 background-color: #42b983; 772 } 773 .v[data-class=v] .vbtn:active, .v[data-class=v] .vbtn:hover { 774 color: #42b983; 775 border-color: #42b983; 776 } 777 #vcomment .vcards .vcard .vhead .vsys i { 778 display: none; 779 } 780 /* åºé¨valine龿¥ */ 781 #vcomment .vpower { 782 display: none; 783 } 784 785 /* åºä¸æ³¨éæ¯ä¿®æ¹ åç§°åé®ç®±åç½åè¾å ¥æ¡çæ ·å¼ */ 786 /* #vcomment .vheader { 787 display: flex; 788 justify-content: space-around; 789 } 790 791 #vcomment .vheader .vnick { 792 width: 31%; 793 border: 2px solid #dedede; 794 padding-left: 10px; 795 padding-right: 10px; 796 border-radius: 5px 797 } 798 799 #vcomment .vheader .vmail { 800 width: 31%; 801 border: 2px solid #dedede; 802 padding-left: 10px; 803 padding-right: 10px; 804 border-radius: 5px 805 } 806 807 #vcomment .vheader .vlink { 808 width: 31%; 809 border: 2px solid #dedede; 810 padding-left: 10px; 811 padding-right: 10px; 812 border-radius: 5px 813 } */ 814 815 img.vimg { 816 transition: all 1s; 817 /* 头åæè½¬æ¶é´ä¸º 1s */ 818 } 819 820 img.vimg:hover { 821 transform: rotate(360deg); 822 -webkit-transform: rotate(360deg); 823 -moz-transform: rotate(360deg); 824 -o-transform: rotate(360deg); 825 -ms-transform: rotate(360deg); 826 } 827 828 #vcomment .vcards .vcard { 829 padding: 15px 20px 0 20px; 830 border-radius: 10px; 831 margin-bottom: 15px; 832 box-shadow: 0 0 4px 1px rgba(0, 0, 0, .12); 833 transition: all .3s 834 } 835 836 #vcomment .vcards .vcard:hover { 837 box-shadow: 0 0 8px 3px rgba(0, 0, 0, .12) 838 } 839 840 #vcomment .vcards .vcard .vh .vcard { 841 border: none; 842 box-shadow: none; 843 } 844</style> 845 846 </div> 847 848<!-- comment script in themes\hexo-theme-bamboo\layout\_partial\scripts\index.ejs --> 849 850 851 </div> 852 853 <!-- ç®å½ --> 854 <aside id='l_side'> 855 856 857 <section class="widget side_blogger"> 858 <div class='content'> 859 860 861 <a class='avatar flat-box rectangle' href='/about/'> 862 <img src='http://q1.qlogo.cn/g?b=qq&nk=1422756921&s=160'/> 863 </a> 864 865 866 867 <div class='text'> 868 869 <h2>éäºä¾å ®</h2> 870 871 872 <p>Hexo</p> 873 874 875 876 <p><span id="jinrishici-sentence">éäºå客-Hexo</span></p> 877
877<script src="https://sdk.jinrishici.com/v2/browser/jinrishici.js" charset="utf-8"></script>
877 878 879 </div> 880 881 882 <div class="social-wrapper"> 883 884 885 886 887 <a href="mailto:[email protected]" 888 class="social fas fa-envelope flat-btn" 889 target="_blank" 890 rel="external nofollow noopener noreferrer"> 891 892 </a> 893 894 895 896 <a href="https://github.com/1422756921" 897 class="social fab fa-github flat-btn" 898 target="_blank" 899 rel="external nofollow noopener noreferrer"> 900 901 </a> 902 903 904 905 <a href="http://wpa.qq.com/msgrd?v=3&uin=1422756921&site=qq&menu=yes" 906 class="social fab fa-qq flat-btn" 907 target="_blank" 908 rel="external nofollow noopener noreferrer"> 909 910 </a> 911 912 913 </div> 914 915 </div> 916</section> 917 918 919 920 921 922 923 924 925 <div class="layout_sticky"> 926 927 928 929 930 931 932 933 934 935 936 <section class="widget side_recent_post"> 937 938 <header> 939 940 <a style="color: " href='/tags/'><i class="fas fa-book fa-fw" aria-hidden="true"></i><span class='name'>ææ°æç« </span></a> 941 942 </header> 943 944 945 <div class='content'> 946 947 <!-- hashç®æ³ --> 948 949 <div class="aside-list"> 950 951 <div class="aside-list-item"> 952 953 954 955 956 <div class="post-img-box"> 957 <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; 958 background-position: center center;"> 959 <img class="lazyload lazyload placeholder" style="width:100%;height:100%;object-fit:cover;" data-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=""> 960 </a> 961 </div> 962 <div class="post-date-title"> 963 <div> 964 965 <span class="post-date">07-12</span> 966 967 </div> 968 <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> 969 </div> 970 </div> 971 972 <div class="aside-list-item"> 973 974 975 976 977 <div class="post-img-box"> 978 <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; 979 background-position: center center;"> 980 <img class="lazyload lazyload placeholder" style="width:100%;height:100%;object-fit:cover;" data-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=""> 981 </a> 982 </div> 983 <div class="post-date-title"> 984 <div> 985 986 <span class="post-date">07-12</span> 987 988 </div> 989 <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> 990 </div> 991 </div> 992 993 <div class="aside-list-item"> 994 995 996 997 998 <div class="post-img-box"> 999 <a href="/2025/07/08/%E7%94%A83x-ui%E6%90%AD%E5%BB%BAreality/" class="post-img " style="background-size: cover; 1000 background-position: center center;"> 1001 <img class="lazyload lazyload placeholder" style="width:100%;height:100%;object-fit:cover;" data-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=""> 1002 </a> 1003 </div> 1004 <div class="post-date-title"> 1005 <div> 1006
1007 <span class="post-date">07-08</span> 1008 1009 </div> 1010 <a class="post-title" href="/2025/07/08/%E7%94%A83x-ui%E6%90%AD%E5%BB%BAreality/">ç¨3x-uiæå»ºreality</a> 1011 </div> 1012 </div> 1013 1014 <div class="aside-list-item"> 1015 1016 1017 1018 1019 <div class="post-img-box"> 1020 <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; 1021 background-position: center center;"> 1022 <img class="lazyload lazyload placeholder" style="width:100%;height:100%;object-fit:cover;" data-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=""> 1023 </a> 1024 </div> 1025 <div class="post-date-title"> 1026 <div> 1027 1028 <span class="post-date">12-08</span> 1029 1030 </div> 1031 <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> 1032 </div> 1033 </div> 1034 1035 <div class="aside-list-item"> 1036 1037 1038 1039 1040 <div class="post-img-box"> 1041 <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; 1042 background-position: center center;"> 1043 <img class="lazyload lazyload placeholder" style="width:100%;height:100%;object-fit:cover;" data-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=""> 1044 </a> 1045 </div> 1046 <div class="post-date-title"> 1047 <div> 1048 1049 <span class="post-date">07-13</span> 1050 1051 </div> 1052 <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> 1053 </div> 1054 </div> 1055 1056 </div> 1057 </div> 1058 </section> 1059 1060 1061 <section class="widget side_archives"> 1062 1063 <header><a style="color: red" href='/archives/'><i class="fas fa-archive fa-fw" aria-hidden="true"></i><span class='name'>彿¡£</span></a></header><div class="content"><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2025/07/"><span class="card-archive-list-date">䏿 2025</span><span class="card-archive-list-count">3</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2023/12/"><span class="card-archive-list-date">åäºæ 2023</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2023/07/"><span class="card-archive-list-date">䏿 2023</span><span class="card-archive-list-count">3</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2021/11/"><span class="card-archive-list-date">å䏿 2021</span><span class="card-archive-list-count">4</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2021/09/"><span class="card-archive-list-date">乿 2021</span><span class="card-archive-list-count">1</span></a></li></ul></div> 1064 </section> 1065 1066 <section class="widget side_webinfo"> 1067 1068 <header> 1069 1070 <i style="color: " class="fas fa-chart-line fa-fw" aria-hidden="true"></i><span class='name' style="color: ">ç«ç¹ä¿¡æ¯</span> 1071 1072 </header> 1073 1074 1075 <div class='content'> 1076 <div class="webinfo"> 1077 1078 <div class="webinfo-item"> 1079 <div>æç« æ°ç®ï¼</div> 1080 <div>12 ç¯</div> 1081 </div> 1082 1083 1084 1085 <div class="webinfo-item"> 1086 <div>å·²è¿è¡æ¶é´ï¼</div> 1087 <div id="webinfo-runtime-count" publish_date="03/24/2020 21:34:09"></div> 1088 </div> 1089
1089<script> 1090 var BirthDay = new Date(new Date('2021/11/18')); 1091 var today = new Date(); 1092 var timeold = (today.getTime() - BirthDay.getTime()); 1093 var daysold = Math.floor(timeold / (24 * 60 * 60 * 1000)); 1094 document.getElementById('webinfo-runtime-count').innerHTML = daysold + ' 天'; 1095 </script>
1095 1096 1097 1098 1099 1100 1101 1102 <div class="webinfo-item"> 1103 <div>æ¬ç«è®¿å®¢æ°ï¼</div> 1104 1105 <div><span id="busuanzi_value_site_uv"><i class="fas fa-fan fa-spin fa-fw" aria-hidden="true"></i></span> 人</div> 1106 1107 </div> 1108 1109 1110 1111 <div class="webinfo-item"> 1112 <div>æ¬ç«æ»è®¿é®éï¼</div> 1113 1114 <div><span id="busuanzi_value_site_pv"><i class="fas fa-fan fa-spin fa-fw" aria-hidden="true"></i></span> 次</div> 1115 1116 </div> 1117 1118 1119 1120 <div class="webinfo-item"> 1121 <div>æåæ´»å¨æ¶é´ï¼</div> 1122 1123 <div id="last-update" style="display: none;">Sat Jan 31 2026 05:51:00 GMT+0000 (Coordinated Universal Time)</div> 1124 <div id="last-update-show">2026-01-31 æ¥</div> 1125 1126 </div> 1127 1128
1128<script> 1129 function timeago(dateTimeStamp) { 1130 var minute = 1000 * 60; //æåï¼æ¶ï¼å¤©ï¼å¨ï¼å个æï¼ä¸ä¸ªæç¨æ¯«ç§è¡¨ç¤º 1131 var hour = minute * 60; 1132 var day = hour * 24; 1133 var week = day * 7; 1134 var month = day * 30; 1135 var now = new Date().getTime(); //è·åå½åæ¶é´æ¯«ç§ 1136 var diffValue = now - dateTimeStamp; //æ¶é´å·® 1137 if (diffValue < 0) { 1138 return; 1139 } 1140 var minC = diffValue / minute; //è®¡ç®æ¶é´å·®çåï¼æ¶ï¼å¤©ï¼å¨ï¼æ 1141 var hourC = diffValue / hour; 1142 var dayC = diffValue / day; 1143 var weekC = diffValue / week; 1144 var monthC = diffValue / month; 1145 if (monthC >= 1 && monthC <= 3) { 1146 result = " " + parseInt(monthC) + " æå" 1147 } else if (weekC >= 1 && weekC <= 3) { 1148 result = " " + parseInt(weekC) + " å¨å" 1149 } else if (dayC >= 1 && dayC <= 6) { 1150 result = " " + parseInt(dayC) + " 天å" 1151 } else if (hourC >= 1 && hourC <= 23) { 1152 result = " " + parseInt(hourC) + " å°æ¶å" 1153 } else if (minC >= 1 && minC <= 59) { 1154 result = " " + parseInt(minC) + " åéå" 1155 } else if (diffValue >= 0 && diffValue <= minute) { 1156 result = "åå" 1157 } else { 1158 var datetime = new Date(); 1159 datetime.setTime(dateTimeStamp); 1160 var Nyear = datetime.getFullYear(); 1161 var Nmonth = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1; 1162 var Ndate = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate(); 1163 var Nhour = datetime.getHours() < 10 ? "0" + datetime.getHours() : datetime.getHours(); 1164 var Nminute = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes(); 1165 var Nsecond = datetime.getSeconds() < 10 ? "0" + datetime.getSeconds() : datetime.getSeconds(); 1166 result = Nyear + "-" + Nmonth + "-" + Ndate 1167 } 1168 return result; 1169 } 1170 var lastUpDate = document.getElementById('last-update').innerHTML; 1171 try { 1172 document.getElementById('last-update-show').innerHTML = timeago(new Date(lastUpDate)); 1173 } catch (error) { 1174 document.getElementById('last-update-show').innerHTML = '2026-01-31 æ¥'; 1175 } 1176 </script>
1176 1177 1178 1179 </div> 1180 </div> 1181</section> 1182 1183 1184 1185 1186 </div> 1187</aside> 1188 1189 <!-- å¾çæ¾å¤§ Wrap images with fancybox support --> 1190
1190<script src="/js/wrapImage.js"></script>
1190 1191</div> 1192 1193<!-- æç« 详æ é¡µèæ¯å¾ --> 1194<div id="appBgSwiper" style="position: fixed;left: 0;top: 0;width: 100%;height: 100%;z-index: -2;" 1195 :style="{'background-color': bgColor ? bgColor : 'transparent'}"> 1196 <transition-group tag="ul" :name="names"> 1197 <li v-for='(image,index) in img' :key='index' v-show="index === mark" class="bg-swiper-box"> 1198 <img :src="image" class="bg-swiper-img no-lazy"> 1199 </li> 1200 </transition-group> 1201</div>
1202<script> 1203 var vm = new Vue({ 1204 el: '#appBgSwiper', 1205 data: { 1206 names: '' || 'fade' || 'fade', // translate-fade fade 1207 mark: 0, 1208 img: [], 1209 bgColor: '', 1210 time: null 1211 }, 1212 methods: { //æ·»å æ¹æ³ 1213 change(i, m) { 1214 if (i > m) { 1215 // this.names = 'fade'; 1216 } else if (i < m) { 1217 // this.names = 'fade'; 1218 } else { 1219 return; 1220 } 1221 this.mark = i; 1222 }, 1223 prev() { 1224 // this.names = 'fade'; 1225 this.mark--; 1226 if (this.mark === -1) { 1227 this.mark = 3; 1228 return 1229 } 1230 }, 1231 next() { 1232 // this.names = 'fade'; 1233 this.mark++; 1234 if (this.mark === this.img.length) { 1235 this.mark = 0; 1236 return 1237 } 1238 }, 1239 autoPlay() { 1240 // this.names = 'fade'; 1241 this.mark++; 1242 if (this.mark === this.img.length) { 1243 this.mark = 0; 1244 return 1245 } 1246 }, 1247 play() { 1248 let bgImgDelay = '' || '180000' 1249 let delay = parseInt(bgImgDelay) || 180000; 1250 this.time = setInterval(this.autoPlay, delay); 1251 }, 1252 enter() { 1253 clearInterval(this.time); 1254 }, 1255 leave() { 1256 this.play(); 1257 } 1258 }, 1259 created() { 1260 this.play() 1261 }, 1262 beforeDestroy() { 1263 clearInterval(this.time); 1264 }, 1265 mounted() { 1266 let prop = 'https://picx.zhimg.com/80/v2-85c31120acff76826ab53ea8934ef4bb_1440w.webp' || ''; 1267 let isImg = prop.includes('.bmp') || prop.includes('.jpg') || prop.includes('.png') || prop.includes('.tif') || prop.includes('.gif') || prop.includes('.pcx') || prop.includes('.tga') || prop.includes('.exif') || prop.includes('.fpx') || prop.includes('.psd') || prop.includes('.cdr') || prop.includes('.pcd') || prop.includes('.dxf') || prop.includes('.ufo') || prop.includes('.eps') || prop.includes('.ai') || prop.includes('.raw') || prop.includes('.WMF') || prop.includes('.webp') || prop.includes('.jpeg') || prop.includes('http://') || prop.includes('https://') 1268 if (isImg) { 1269 let img = prop.split(','); 1270 let configRoot = '/' 1271 let arrImg = []; 1272 img.forEach(el => { 1273 var Expression = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/; 1274 var objExp = new RegExp(Expression); 1275 1276 if (objExp.test(el)) { 1277 // http or https 1278 arrImg.push(el); 1279 } else { 1280 // éhttp or httpså¼å¤´ 1281 // æ¬å°æä»¶ 1282 let firstStr = el.charAt(0); 1283 if (firstStr == '/') { 1284 el = el.substr(1); // å é¤ç¬¬ä¸ä¸ªå符 '/',å 为 configRootæåä¸ä¸ªå符为 / 1285 } 1286 el = configRoot + el; 1287 arrImg.push(el); 1288 } 1289 }) 1290 this.img = arrImg; 1291 } else { 1292 this.bgColor = prop; 1293 } 1294 } 1295 }) 1296</script>
1296 1297 1298<style> 1299 .bg-swiper-box { 1300 position: absolute; 1301 display: block; 1302 width: 100%; 1303 height: 100%; 1304 } 1305 1306 .bg-swiper-img { 1307 object-fit: cover; 1308 width: 100%; 1309 height: 100%; 1310 } 1311</style> 1312 1313 1314 1315 1316
1316<script> 1317 function loadMermaid() { 1318 if (document.getElementsByClassName('mermaid').length) { 1319 if (window.mermaidJsLoad) mermaid.init() 1320 else { 1321 loadScript('https://cdn.jsdmirror.com/npm/mermaid/dist/mermaid.min.js').then(() => { 1322 window.mermaidJsLoad = true 1323 mermaid.initialize({ 1324 theme: 'default', 1325 }) 1326 if ('true') { 1327 mermaid.init(); 1328 } 1329 }) 1330 } 1331 } 1332 }; 1333 document.addEventListener("DOMContentLoaded", function () { 1334 loadMermaid(); 1335 }) 1336 1337 document.addEventListener('pjax:complete', function () { 1338 loadMermaid(); 1339 }) 1340 1341</script>
1341 1342 1343 1344 </main> 1345 </div> 1346 1347 <!-- 页è --> 1348 1349 1350 1351 <!-- åºé¨é±¼å¿è·³å¨ææï¼ä¾èµäºjquery--> 1352<div id="j-fish-skip" style=" position: relative;height: 153px;width: auto;"></div>
1353<script> 1354 var RENDERER = { 1355 POINT_INTERVAL: 5, 1356 FISH_COUNT: 3, 1357 MAX_INTERVAL_COUNT: 50, 1358 INIT_HEIGHT_RATE: .5, 1359 THRESHOLD: 50, 1360 FISH_COLOR: '', 1361 init: function () { 1362 this.setFishColor(); this.setParameters(), this.reconstructMethods(), this.setup(), this.bindEvent(), this.render() 1363 }, 1364 setFishColor: function () { 1365 let isDark = JSON.parse(localStorage.getItem('dark')) || JSON.parse('false'); 1366 if (isDark) { 1367 this.FISH_COLOR = '#222'; // æé»è²ï¼ææ¶é´æè¿æ´æä¸ä¸ªåé 1368 } else { 1369 this.FISH_COLOR = '' || 'rgba(66, 185, 133, 0.8)'; 1370 } 1371 }, 1372 setParameters: function () { 1373 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 = [] 1374 }, 1375 createSurfacePoints: function () { 1376 var t = Math.round(this.width / this.POINT_INTERVAL); 1377 this.pointInterval = this.width / (t - 1), this.points.push(new SURFACE_POINT(this, 0)); 1378 for (var i = 1; i < t; i++) { 1379 var e = new SURFACE_POINT(this, i * this.pointInterval), 1380 h = this.points[i - 1]; 1381 e.setPreviousPoint(h), h.setNextPoint(e), this.points.push(e) 1382 } 1383 }, 1384 reconstructMethods: function () { 1385 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) 1386 }, 1387 setup: function () { 1388 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({ 1389 width: this.width, 1390 height: this.height 1391 }), this.reverse = !1, this.fishes.push(new FISH(this)), this.createSurfacePoints() 1392 }, 1393 watchWindowSize: function () { 1394 this.clearTimer(), this.tmpWidth = this.$window.width(), this.tmpHeight = this.$window.height(), this.watchIds.push(setTimeout(this.jdugeToStopResize, this.WATCH_INTERVAL)) 1395 }, 1396 clearTimer: function () { 1397 for (; this.watchIds.length > 0;) clearTimeout(this.watchIds.pop()) 1398 }, 1399 jdugeToStopResize: function () { 1400 var t = this.$window.width(), 1401 i = this.$window.height(), 1402 e = t == this.tmpWidth && i == this.tmpHeight; 1403 this.tmpWidth = t, this.tmpHeight = i, e && this.setup() 1404 }, 1405 bindEvent: function () { 1406 this.$window.on("resize", this.watchWindowSize), this.$container.on("mouseenter", this.startEpicenter), this.$container.on("mousemove", this.moveEpicenter) 1407 }, 1408 getAxis: function (t) { 1409 var i = this.$container.offset(); 1410 return { 1411 x: t.clientX - i.left + this.$window.scrollLeft(), 1412 y: t.clientY - i.top + this.$window.scrollTop() 1413 } 1414 }, 1415 startEpicenter: function (t) { 1416 this.axis = this.getAxis(t) 1417 }, 1418 moveEpicenter: function (t) { 1419 var i = this.getAxis(t); 1420 this.axis || (this.axis = i), this.generateEpicenter(i.x, i.y, i.y - this.axis.y), this.axis = i 1421 }, 1422 generateEpicenter: function (t, i, e) { 1423 if (!(i < this.height / 2 - this.THRESHOLD || i > this.height / 2 + this.THRESHOLD)) { 1424 var h = Math.round(t / this.pointInterval); 1425 h < 0 || h >= this.points.length || this.points[h].interfere(i, e) 1426 } 1427 }, 1428 reverseVertical: function () { 1429 this.reverse = !this.reverse; 1430 for (var t = 0, i = this.fishes.length; t < i; t++) this.fishes[t].reverseVertical() 1431 }, 1432 controlStatus: function () { 1433 for (var t = 0, i = this.points.length; t < i; t++) this.points[t].updateSelf(); 1434 for (t = 0, i = this.points.length; t < i; t++) this.points[t].updateNeighbors(); 1435 this.fishes.length < this.fishCount && 0 == --this.intervalCount && (this.intervalCount = this.MAX_INTERVAL_COUNT, this.fishes.push(new FISH(this))) 1436 }, 1437 render: function () { 1438 requestAnimationFrame(this.render), this.controlStatus(), this.context.clearRect(0, 0, this.width, this.height), this.context.fillStyle = this.FISH_COLOR; 1439 for (var t = 0, i = this.fishes.length; t < i; t++) this.fishes[t].render(this.context); 1440 this.context.save(), this.context.globalCompositeOperation = "xor", this.context.beginPath(), this.context.moveTo(0, this.reverse ? 0 : this.height); 1441 for (t = 0, i = this.points.length; t < i; t++) this.points[t].render(this.context); 1442 this.context.lineTo(this.width, this.reverse ? 0 : this.height), this.context.closePath(), this.context.fill(), this.context.restore(
vendor: 4,264 bytes, lines 1442-1496
1442) 1443 } 1444 }, 1445 SURFACE_POINT = function (t, i) { 1446 this.renderer = t, this.x = i, this.init() 1447 }; 1448 SURFACE_POINT.prototype = { 1449 SPRING_CONSTANT: .03, 1450 SPRING_FRICTION: .9, 1451 WAVE_SPREAD: .3, 1452 ACCELARATION_RATE: .01, 1453 init: function () { 1454 this.initHeight = this.renderer.height * this.renderer.INIT_HEIGHT_RATE, this.height = this.initHeight, this.fy = 0, this.force = { 1455 previous: 0, 1456 next: 0 1457 } 1458 }, 1459 setPreviousPoint: function (t) { 1460 this.previous = t 1461 }, 1462 setNextPoint: function (t) { 1463 this.next = t 1464 }, 1465 interfere: function (t, i) { 1466 this.fy = this.renderer.height * this.ACCELARATION_RATE * (this.renderer.height - this.height - t >= 0 ? -1 : 1) * Math.abs(i) 1467 }, 1468 updateSelf: function () { 1469 this.fy += this.SPRING_CONSTANT * (this.initHeight - this.height), this.fy *= this.SPRING_FRICTION, this.height += this.fy 1470 }, 1471 updateNeighbors: function () { 1472 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)) 1473 }, 1474 render: function (t) { 1475 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) 1476 } 1477 }; 1478 var FISH = function (t) { 1479 this.renderer = t, this.init() 1480 }; 1481 FISH.prototype = { 1482 GRAVITY: .4, 1483 init: function () { 1484 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 1485 }, 1486 getRandomValue: function (t, i) { 1487 return t + (i - t) * Math.random() 1488 }, 1489 reverseVertical: function () { 1490 this.isOut = !this.isOut, this.ay *= -1 1491 }, 1492 controlStatus: function (t) { 1493 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() 1494 }, 1495 render: function (t) { 1496 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(
1496), t.restore(), this.controlStatus(t) 1497 } 1498 }, $(function () { 1499 RENDERER.init() 1500 $('.dark').click(function () { 1501 setTimeout(() => { 1502 RENDERER.setFishColor(); 1503 RENDERER.context.fill(); 1504 }); 1505 }) 1506 }); 1507</script>
1507 1508 1509 <div class="footer bg-color"> 1510 <div class="footer-main"> 1511 1512 1513 <div class="link"> 1514 1515 </div> 1516 1517 1518 1519 <div class="footer-copyright"> 1520 <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> 1521 1522 </div> 1523 1524 1525 1526 1527 <!-- ä¸èåç»è®¡ --> 1528 <!-- ä¸èåç»è®¡ --> 1529<span id="busuanzi_container_site_pv"> 1530 <i class="fas fa-eye" aria-hidden="true"></i>æ¬ç«æ»è®¿é®éï¼<span id="busuanzi_value_site_pv"></span> 次 1531</span> 1532<span class="post-meta-divider">|</span> 1533<span id="busuanzi_container_site_uv" style='display:none'> 1534 <i class="fas fa-users" aria-hidden="true"></i>æ¬ç«è®¿å®¢æ°ï¼<span id="busuanzi_value_site_uv"></span> 人 1535</span> 1536 1537 1538 1539 1540 1541 <div class="footer-custom"> 1542 1543 </div> 1544 1545 1546 </div> 1547 </div> 1548 1549 1550 1551 <!-- 渲ææé»æé® --> 1552 1553 <div class="dark"> 1554 <div class="dark-content"> 1555 <i class="fas fa-moon" aria-hidden="true"></i> 1556 <!-- <span>å ³ç¯</span> --> 1557 </div> 1558 1559</div> 1560
1561<script> 1562 $(function() { 1563 let isDark = JSON.parse(localStorage.getItem('dark')) || JSON.parse('false'); 1564 if (isDark) { 1565 $(".dark-content").replaceWith( 1566 ` 1567 <div class='dark-content'> 1568 <i class="fas fa-lightbulb" aria-hidden="true"></i> 1569 </div> 1570 ` 1571 ); 1572 } 1573 $('.dark').click(function() { 1574 if ($(document.body).is('.darkModel')) { 1575 $(document.body).removeClass('darkModel'); 1576 localStorage.setItem('dark', false); 1577 $(".dark-content").replaceWith( 1578 ` 1579 <div class='dark-content'> 1580 <i class="fas fa-moon" aria-hidden="true"></i> 1581 </div> 1582 ` 1583 ); 1584 } else { 1585 $(document.body).addClass('darkModel'); 1586 localStorage.setItem('dark', true); 1587 $(".dark-content").replaceWith( 1588 ` 1589 <div class='dark-content'> 1590 <i class="fas fa-lightbulb" aria-hidden="true"></i> 1591 </div> 1592 ` 1593 ); 1594 } 1595 }) 1596 }) 1597</script>
1597 1598 1599 <!-- 渲æåå°é¡¶é¨æé® --> 1600 1601 <div class="goTop top-btn-color" pointer> 1602 <i class="fas fa-arrow-up" aria-hidden="true"></i> 1603</div>
1604<script src="/js/goTop.js"></script>
1604 1605 1606 1607 <!-- 渲æå·¦ä¸è§é³ä¹ææ¾å¨ --> 1608 1609 1610 <!-- å¾çæ¾å¤§ --> 1611 1612
1612<script src="/js/fancybox.umd.js"></script>
1612 1613 1614 1615 <!-- ç¾åº¦è§£æ --> 1616 <!-- Baidu Analytics --> 1617 1618 <!-- Baidu Push --> 1619
1620<script> 1621 (function () { 1622 var bp = document.createElement('script'); 1623 var curProtocol = window.location.protocol.split(':')[0]; 1624 if (curProtocol === 'https') { 1625 bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; 1626 } else { 1627 bp.src = 'http://push.zhanzhang.baidu.com/push.js'; 1628 } 1629 var s = document.getElementsByTagName("script")[0]; 1630 s.parentNode.insertBefore(bp, s); 1631 })(); 1632</script>
1632 1633 1634 1635 <!-- èæ¯å½©å¸¦ --> 1636 1637
1637<script type="text/javascript" size="100" alpha='0.4' zIndex="-1" src="/js/ribbon.min.js"></script>
1637 1638 1639 1640
1640<script src="/js/utils/index.js"></script>
1640 1641
1641<script src="/js/app.js"></script>
1641 1642 1643 <!-- æç« ç®å½æéjs --> 1644<!-- <link href="/js/tocbot/tocbot.css" rel="stylesheet">
1645<script src="/js/tocbot/tocbot.min.js"></script>
1645 --> 1646
1647<script src="/js/tocbot.min.js"></script>
1647 1648 1649 1650<link rel="stylesheet" href="/css/tocbot.css"> 1651
1652<script> 1653 var headerEl = 'h2, h3, h4', //headers 1654 content = '.post-detail',//æç« å®¹å¨ 1655 idArr = {}; //æ 颿°ç»ä»¥ç¡®å®æ¯å¦å¢å ç´¢å¼id 1656 //add #id 1657 var option = { 1658 // Where to render the table of contents. 1659 tocSelector: '.toc', 1660 // Where to grab the headings to build the table of contents. 1661 contentSelector: content, 1662 // Which headings to grab inside of the contentSelector element. 1663 headingSelector: headerEl, 1664 scrollSmooth: true, 1665 scrollSmoothOffset: -70, 1666 // headingsOffset: -($(window).height() * 0.4 - 45), 1667 headingsOffset: -($(window).height() * 0.4 - 70), 1668 // positionFixedSelector: '.toc-main', 1669 // positionFixedClass: 'is-position-fixed', 1670 fixedSidebarOffset: 'auto', 1671 activeLinkClass: 'is-active-link', 1672 orderedList: true, 1673 collapseDepth: 20, 1674 // onClick: function (e) {}, 1675 } 1676 if ($('.toc').length > 0) { 1677 1678 $(content).children(headerEl).each(function () { 1679 //å»é¤ç©ºæ ¼ä»¥åå¤ä½æ ç¹ 1680 var headerId = $(this).text().replace(/[\s|\~|`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\_|\+|\=|\||\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\<|\.|\>|\/|\?|\ï¼|\ï¼|\ã]/g, ''); 1681 1682 headerId = headerId.toLowerCase(); 1683 if (idArr[headerId]) { 1684 //idå·²ç»åå¨ 1685 $(this).attr('id', headerId + '-' + idArr[headerId]); 1686 idArr[headerId]++; 1687 } 1688 else { 1689 //idæªåå¨ 1690 idArr[headerId] = 1; 1691 $(this).attr('id', headerId); 1692 } 1693 }); 1694 1695 document.addEventListener("DOMContentLoaded", function () { 1696 tocbot.init(option); 1697 mobileTocClick(); 1698 }); 1699 1700 } 1701 1702 window.tocScrollFn = function () { 1703 return bamboo.throttle(function () { 1704 findHeadPosition(); 1705 }, 100)() 1706 } 1707 window.addEventListener('scroll', tocScrollFn); 1708 1709 const findHeadPosition = function (top) { 1710 if ($('.toc-list').length <= 0) { 1711 return false; 1712 } 1713 setTimeout(() => { // or DOMContentLoaded 1714 autoScrollToc(); 1715 }, 0); 1716 } 1717 1718 const autoScrollToc = function () { 1719 const $activeItem = document.querySelector('.is-active-link'); 1720 const $cardToc = document.querySelector('.toc-content'); 1721 const activePosition = $activeItem.getBoundingClientRect().top 1722 const sidebarScrollTop = $cardToc.scrollTop 1723 if (activePosition > (document.documentElement.clientHeight - 100)) { 1724 $cardToc.scrollTop = sidebarScrollTop + 150 1725 } 1726 if (activePosition < 150) { 1727 $cardToc.scrollTop = sidebarScrollTop - 150 1728 } 1729 } 1730 1731 document.addEventListener('pjax:send', function () { 1732 if ($('.toc').length) { 1733 tocbot.destroy(); 1734 } 1735 }); 1736 1737 document.addEventListener('pjax:complete', function () { 1738 if ($('.toc').length) { 1739 tocbot.init(option); 1740 mobileTocClick(); 1741 } 1742 }); 1743 1744 // ææºç«¯tocæé®ç¹å»åºç°ç®å½ 1745 const mobileTocClick = function () { 1746 const $cardTocLayout = document.getElementsByClassName('side_toc')[0]; 1747 const $cardToc = $cardTocLayout.getElementsByClassName('toc-content')[0]; 1748 let right = '45px'; 1749 if (window.innerWidth >= 551 && window.innerWidth <= 992) { 1750 right = '100px' 1751 } 1752 const mobileToc = { 1753 open: () => { 1754 $cardTocLayout.style.cssText = 'animation: toc-open .3s; opacity: 1; right: ' + right 1755 }, 1756 1757 close: () => { 1758 $cardTocLayout.style.animation = 'toc-close .2s' 1759 setTimeout(() => { 1760 $cardTocLayout.style.cssText = "opacity:''; animation: ''; right: ''" 1761 }, 100) 1762 } 1763 } 1764 document.getElementById('toc-mobile-btn').addEventListener('click', () => { 1765 if (window.getComputedStyle($cardTocLayout).getPropertyValue('opacity') === '0') mobileToc.open() 1766 else mobileToc.close() 1767 }) 1768 1769 $cardToc.addEventListener('click', (e) => { 1770 if (window.innerWidth < 992) { // å°äº992pxçæ¶å 1771 mobileToc.close() 1772 } 1773 }) 1774 } 1775</script>
1775 1776 1777<style> 1778 /* .is-position-fixed { 1779 position: sticky !important; 1780 top: 74px; 1781 } 1782 1783 .toc-main ul { 1784 counter-reset: show-list; 1785 } 1786 1787 .toc-main ul li::before { 1788 content: counter(item)"."; 1789 display: block; 1790 position: absolute; 1791 left: 12px; 1792 top: 0; 1793 } */ 1794</style> 1795 1796 1797<!-- 设置导èªèæ¯ -->
1798<script> 1799 let setHeaderClass = () => { 1800 const nav = $('#navHeader'); 1801 const navTop = nav.outerHeight(); 1802 const winTop = $(window).scrollTop(); 1803 if(winTop > navTop) { 1804 nav.addClass('header-bg-color'); 1805 } 1806 else { 1807 nav.removeClass('header-bg-color'); 1808 } 1809 }; 1810 1811 let scrollCollect = () => { 1812 return bamboo.throttle(function (e) { 1813 setHeaderClass(); 1814 }, 200)() 1815 } 1816 1817 let initHeaderBg = () => { 1818 setHeaderClass(); 1819 } 1820 1821 setHeaderClass(); 1822 window.addEventListener('scroll', scrollCollect); 1823 1824 document.addEventListener('pjax:send', function () { 1825 window.removeEventListener('scroll', scrollCollect) 1826 }) 1827 document.addEventListener('pjax:complete', function () { 1828 window.addEventListener('scroll', scrollCollect); 1829 setHeaderClass(); 1830 }) 1831</script>
1831 1832 1833<!-- 渲æissuesæ ç¾éçå 容 -->
1834<script> 1835 function loadIssuesJS() { 1836 if ($(".post-detail").find(".issues-api").length == 0) { 1837 return; 1838 } 1839 loadScript('/js/issues/index.js'); 1840 }; 1841 $(function () { 1842 loadIssuesJS(); 1843 }); 1844 document.addEventListener('pjax:complete', function () { 1845 if (typeof IssuesAPI == "undefined") { 1846 loadIssuesJS(); 1847 } 1848 }) 1849</script>
1849 1850 1851<!-- 渲æè¿ç¨jsonå è½½çå¾çæ ç¾(getPhotoOnline)éçå 容 -->
1852<script> 1853 function loadPhotoOnlineJS() { 1854 if ($(".post-detail").find(".getJsonPhoto-api").length == 0) { 1855 return; 1856 } 1857 loadScript('/js/getPhotoOnline/index.js'); 1858 }; 1859 $(function () { 1860 loadPhotoOnlineJS(); 1861 }); 1862 document.addEventListener('pjax:complete', function () { 1863 if (typeof getPhotoJson == "undefined") { 1864 loadPhotoOnlineJS(); 1865 } 1866 }) 1867</script>
1867 1868 1869<!-- 渲æè¿ç¨jsonå è½½çtalkæ ç¾(getTalkOnline)éçå 容 -->
1870<script> 1871 function loadTalkOnlineJS() { 1872 if ($(".post-detail").find(".getJsonTalk-api").length == 0) { 1873 return; 1874 } 1875 loadScript('https://cdnjs.cloudflare.com/ajax/libs/waterfall.js/1.0.2/waterfall.min.js'); // ç叿µæä»¶ï¼https://raphamorim.io/waterfall.js/ 1876 loadScript('/js/getTalkOnline/index.js'); 1877 }; 1878 $(function () { 1879 loadTalkOnlineJS(); 1880 }); 1881 document.addEventListener('pjax:complete', function () { 1882 if (typeof getTalkJson == "undefined") { 1883 loadTalkOnlineJS(); 1884 } 1885 }) 1886</script>
1886 1887 1888<!-- 渲æè¿ç¨jsonå è½½çsite-cardæ ç¾(getSiteOnline)éçå 容 -->
1889<script> 1890 function loadSiteOnlineJS() { 1891 if ($(".post-detail").find(".getJsonSite-api").length == 0) { 1892 return; 1893 } 1894 loadScript('/js/getSiteOnline/index.js'); 1895 }; 1896 $(function () { 1897 loadSiteOnlineJS(); 1898 }); 1899 document.addEventListener('pjax:complete', function () { 1900 if (typeof getSiteJson == "undefined") { 1901 loadSiteOnlineJS(); 1902 } 1903 }) 1904</script>
1904 1905 1906<!-- è¾å ¥æ¡æåç¹æ --> 1907<!-- è¾å ¥æ¡æåç¹æ --> 1908 1909
1909<script src="/js/activate-power-mode.js"></script>
1909 1910
1910<script> 1911 POWERMODE.colorful = true; // æå¼éæºé¢è²ç¹æ 1912 POWERMODE.shake = false; // å ³éè¾å ¥æ¡æå¨ 1913 document.body.addEventListener('input', POWERMODE);//ç嬿åäºä»¶ 1914 </script>
1914 1915 1916 1917<!-- markdown代ç ä¸é®å¤å¶åè½ --> 1918 1919 <link rel="stylesheet" href="https://cdn.jsdmirror.com/npm/v-plugs-ayu/lib/ayu.css"> 1920
1920<script src="https://cdn.jsdmirror.com/npm/v-plugs-ayu/lib/ayu.umd.min.js"></script>
1920 1921
1921<script src="/js/clipboard/clipboard.min.js"></script>
1921 1922 <div id="appCopy"> 1923 </div> 1924
1924<script data-pjax> 1925 var vm = new Vue({ 1926 el: '#appCopy', 1927 data: { 1928 }, 1929 computed: { 1930 }, 1931 mounted() { 1932 const that = this; 1933 var copy = 'å¤å¶'; 1934 /* code */ 1935 var initCopyCode = function () { 1936 var copyHtml = ''; 1937 copyHtml += '<button class="btn-copy" data-clipboard-snippet="" style="position:absolute;top:0;right:0;z-index:1;">'; 1938 copyHtml += '<i class="fas fa-copy"></i><span>' + copy + '</span>'; 1939 copyHtml += '</button>'; 1940 $(".post-detail pre").not('.gutter pre').wrap("<div class='codeBox' style='position:relative;width:100%;'></div>") 1941 $(".post-detail pre").not('.gutter pre').before(copyHtml); 1942 new ClipboardJS('.btn-copy', { 1943 target: function (trigger) { 1944 return trigger.nextElementSibling; 1945 } 1946 }); 1947 } 1948 initCopyCode(); 1949 $('.btn-copy').unbind('click').bind('click', function () { 1950 doSomething(); 1951 }) 1952 $(document).unbind('keypress').bind('keypress', function (e) { 1953 if (e.ctrlKey && e.keyCode == 67) { 1954 doSomething(); 1955 } 1956 }) 1957 1958 function doSomething() { 1959 that.$notify({ 1960 title: "æå", 1961 content: "代ç å·²å¤å¶ï¼è¯·éµå®ç¸å ³ææåè®®ã--éäºä¾å ®", 1962 type: 'success' 1963 }) 1964 } 1965 }, 1966 methods: { 1967 }, 1968 created() { } 1969 }) 1970 </script>
1970 1971 1972 1973<!-- å¾çæå è½½ -->
1974<script defer src="https://cdn.jsdmirror.com/npm/[email protected]/dist/lazyload.min.js"></script>
vendor: 1 bytes, line 1974
1974
1975<script> 1976 // https://www.npmjs.com/package/vanilla-lazyload 1977 // Set the options globally 1978 // to make LazyLoad self-initialize 1979 window.lazyLoadOptions = { 1980 elements_selector: ".lazyload", 1981 threshold: 0 1982 }; 1983 // Listen to the initialization event 1984 // and get the instance of LazyLoad 1985 window.addEventListener( 1986 "LazyLoad::Initialized", 1987 function (event) { 1988 window.lazyLoadInstance = event.detail.instance; 1989 }, 1990 false 1991 ); 1992 document.addEventListener('DOMContentLoaded', function () { 1993 lazyLoadInstance.update(); 1994 }); 1995 document.addEventListener('pjax:complete', function () { 1996 lazyLoadInstance.update(); 1997 }); 1998</script>
1998 1999 2000 2001<!-- å¡çæ»å¨å¨ç» --> 2002 2003 2004<!-- è¯è®ºæéjs --> 2005 2006 2007 <!-- 弹广éçcssåjs --> 2008 2009 <!-- 弹广件 --> 2010 <link href="/js/danmu/barrager.css" rel="stylesheet"> 2011
2011<script src="/js/danmu/jquery.barrager.js"></script>
2011 2012 2013<!-- å ·ä½jsï¼è¯·åå¾valine/script.ejsæ¥ç --> 2014 2015
2015<script> 2016 var requiredFields = ''; 2017 requiredFields = requiredFields.split(','); 2018 comment_el = '.comment'; 2019 let looperValine = null; 2020 load_valine = function () { 2021 if ($(comment_el).length) { 2022 var valine = new Valine({ 2023 el: '#vcomment', 2024 path: window.location.pathname, 2025 notify: false, 2026 verify: false, 2027 app_id: "8M0jKEDHJ9lR1j8WhakihSbv-gzGzoHsz", 2028 app_key: "6KkhQq0feQa6GF4iL11paa5H", 2029 placeholder: "请è¾å ¥è¯è®ºå 容", 2030 avatar: "", 2031 master: "d72e6625d8e1e44d5dc721a27fc08508", //å主é®ç®±md5 2032 tagMeta: ["å主","å°ä¼ä¼´","访客"], //æ è¯å段å 2033 friends: "", 2034 metaPlaceholder: { "nick": "æµç§°/QQå·", "mail": "é®ç®±" }, 2035 requiredFields: requiredFields, 2036 enableQQ: true, 2037 }); 2038 function debounce(fn) { 2039 var timerID = null 2040 return function () { 2041 var arg = arguments[0] //è·åäºä»¶ 2042 if (timerID) { 2043 clearTimeout(timerID) 2044 } 2045 timerID = setTimeout(function () { 2046 fn(arg) //äºä»¶ä¼ å ¥å½æ° 2047 }, 200) 2048 } 2049 } 2050 //æ¥è¯¢è¯è®º valine.Q('*').limit(7) -- æ¥è¯¢ææï¼éå¶7æ¡, ä¸é¢ççä»£ç æ¯æ¥è¯¢å½åé¡µé¢ 2051 var themeDanmu = eval('true'); 2052 var themeLoop = eval('false'); 2053 var themeLooperTime = '5000' || 5000; 2054 var speed = '40' || 20; 2055 var isBarrager = true; 2056 if (themeDanmu == true) { 2057 do_barrager(); 2058 if ($('.danmuBox').length <= 0) { 2059 $('.navbar').append('<div class="danmuBox"><div class="danmuBtn open"><span class="danmuCircle"></span><span class="danmuText">å¼¹å¹</span></div></div>'); 2060 } 2061 $('.danmuBtn').on('click', debounce( 2062 function () { 2063 if ($('.danmuBtn').hasClass('open')) { 2064 $('.danmuBtn').removeClass('open') 2065 clearInterval(looperValine); 2066 $.fn.barrager.removeAll(); 2067 } else { 2068 $('.danmuBtn').addClass("open"); 2069 do_barrager(); 2070 } 2071 } 2072 )) 2073 } 2074 function do_barrager() { 2075 isBarrager && valine.Q(window.location.pathname).find().then(function (comments) { 2076 // var num = 0; // å¯ä»¥è®°å½æ¡æ°ï¼å¾ªç¯è°ç¨çæ¶ååªåææ°çè¯è®ºæ¾å ¥å¼¹å¹ä¸ 2077 var run_once = true; 2078 var looper_time = themeLooperTime; 2079 var total = comments.length; 2080 // var looper = null; 2081 var index = 0; 2082 if (total > 0) { 2083 barrager(); 2084 } else { 2085 // å½è¯è®ºæ°ä¸º0çæ¶åï¼èªå¨å ³éå¼¹å¹ 2086 // $('.danmuBtn').removeClass('open'); 2087 } 2088 function barrager() { 2089 if (run_once) { 2090 //妿æ¯é¦æ¬¡æ§è¡,å设置ä¸ä¸ªå®æ¶å¨,并䏿馿¬¡æ§è¡ç½®ä¸ºfalse 2091 looperValine = setInterval(barrager, looper_time); 2092 run_once = false; 2093 } 2094 var content = comments[index]._serverData.comment; 2095 var email = comments[index]._serverData.mail; 2096 var link = comments[index]._serverData.link; 2097 var newcontent = content.substring(0, 50).replace(/<[^>]+>/g, ""); 2098 //åå¸ä¸ä¸ªå¼¹å¹ 2099 const item = { 2100 img: `https://q1.qlogo.cn/g?b=qq&nk=${email}&s=640`, //å¾ç 2101 info: newcontent, //æå 2102 href: link, //龿¥ 2103 close: true, //æ¾ç¤ºå ³éæé® 2104 speed: speed, //å»¶è¿,åä½ç§,é»è®¤6 2105 color: '#fff', //é¢è²,é»è®¤ç½è² 2106 old_ie_color: '#000000', //ieä½çå ¼å®¹è²,ä¸è½ä¸ç½é¡µèæ¯ç¸å,é»è®¤é»è² 2107 } 2108 $('body').barrager(item); 2109 //ç´¢å¼èªå¢ 2110 index++; 2111 //ææå¼¹å¹åå¸å®æ¯ï¼æ¸ é¤è®¡æ¶å¨ã 2112 if (index == total) { 2113 clearInterval(looperValine); 2114 if (themeLoop === true) { 2115 setTimeout(function () { 2116 do_barrager(); 2117 }, 5000); 2118 } else { 2119 $('.danmuBtn').removeClass('open'); 2120 } 2121 return false;
2122 } 2123 2124 } 2125 }) 2126 } 2127 } 2128 }; 2129 $(document).ready(load_valine); 2130 document.addEventListener('pjax:send', function (e) { 2131 2132 $('.danmuBox').length > 0 && $('.danmuBox').remove() 2133 looperValine && clearInterval(looperValine); 2134 $.fn.barrager.removeAll(); 2135 2136 }) 2137 document.addEventListener('pjax:complete', function () { 2138 load_valine(); 2139 }); 2140</script>
2140 2141 2142 2143 2144 2145<!-- é¼ æ ç¹å»ç¹æ --> 2146<!-- ç±å¿ç¹å» --> 2147 2148 2149 <canvas class="fireworks" style="position: fixed;left: 0;top: 0;z-index: 999; pointer-events: none;" ></canvas> 2150
2150<script src="//cdn.bootcss.com/animejs/2.2.0/anime.min.js"></script>
2150 2151
2151<script src="/js/cursor/explosion.min.js"></script>
2151 2152 2153 2154 2155 2156 2157
2157<script async src="/js/busuanzi.pure.mini.js" data-pjax></script>
2157 2158 2159 2160<!-- è½®æå¾æ ç¾ -->
2161<script> 2162 var bambooSwiperTag = {}; 2163 function load_swiper() { 2164 if (!document.querySelectorAll(".post-swiper-container")[0]) return; 2165 loadCSS("https://cdn.jsdmirror.com/npm/swiper@6/swiper-bundle.min.css") 2166 loadScript("https://cdn.jsdmirror.com/npm/swiper@6/swiper-bundle.min.js").then(() => { 2167 pjax_swiper(); 2168 }); 2169 } 2170 2171 load_swiper(); 2172 2173 function pjax_swiper() { 2174 bambooSwiperTag.swiper = new Swiper('.post-swiper-container', { 2175 slidesPerView: 'auto', 2176 spaceBetween: 8, 2177 centeredSlides: true, 2178 loop: true, 2179 autoplay: true ? { 2180 delay: 3000, 2181 stopOnLastSlide: false, 2182 disableOnInteraction: false, 2183 } : false, 2184 pagination: { 2185 el: '.swiper-pagination', 2186 clickable: true, 2187 }, 2188 navigation: { 2189 nextEl: '.swiper-button-next', 2190 prevEl: '.swiper-button-prev', 2191 }, 2192 on:{ 2193 init: function(){ 2194 swiperAnimateCache(this); //éèå¨ç»å ç´ 2195 swiperAnimate(this); //åå§å宿å¼å§å¨ç» 2196 }, 2197 slideChangeTransitionEnd: function(){ 2198 swiperAnimate(this); //æ¯ä¸ªslideåæ¢ç»ææ¶ä¹è¿è¡å½åslideå¨ç» 2199 //this.slides.eq(this.activeIndex).find('.ani').removeClass('ani'); å¨ç»åªå±ç°ä¸æ¬¡ï¼å»é¤aniç±»å 2200 } 2201 } 2202 }); 2203 } 2204 2205 document.addEventListener('pjax:complete', function () { 2206 if (!document.querySelectorAll(".post-swiper-container")[0]) return; 2207 if (typeof bambooSwiperTag.swiper === "undefined") { 2208 load_swiper(); 2209 } else { 2210 pjax_swiper(); 2211 } 2212 }); 2213</script>
2213 2214 <!-- pjax --> 2215 2216 2217<!-- pjax --> 2218 2219 2220
2220<script src="/js/[email protected]/index.js"></script>
2220 2221 2222 <!-- æ ·å¼ä½äºï¼source/css/_third-party/pjaxanimate.styl --> 2223 2224<div class="pjax-animate"> 2225 2226 <div class="loading-circle"><div id="loader-circle"></div></div> 2227
2227<script> 2228 window.ShowLoading = function() { 2229 $(".loading-circle").css("display", "block"); 2230 }; 2231 window.HideLoading = function() { 2232 $(".loading-circle").css("display", "none"); 2233 } 2234 </script>
2234 2235 2236
2236<script> 2237 document.addEventListener('pjax:complete', function () { 2238 window.HideLoading(); 2239 }) 2240 document.addEventListener('pjax:send', function () { 2241 window.ShowLoading(); 2242 }) 2243 document.addEventListener('pjax:error', function () { 2244 window.HideLoading(); 2245 }) 2246 </script>
2246 2247</div> 2248 2249 2250 2251
2251<script> 2252 var pjax = new Pjax({ 2253 elements: 'a[href]:not([href^="#"]):not([href="javascript:void(0)"]):not([no-pjax])', // æ¦æªæ£å¸¸å¸¦é¾æ¥ç a æ ç¾ 2254 selectors: ["#pjax-container","title"], // æ ¹æ®å®é éè¦ç¡®è®¤éè½½åºå 2255 cacheBust: false, // url å°åè¿½å æ¶é´æ³ï¼ç¨ä»¥é¿å æµè§å¨ç¼å 2256 timeout: 5000 2257 }); 2258 2259 document.addEventListener('pjax:send', function (e) { 2260 2261 try { 2262 var currentUrl = window.location.pathname; 2263 var targetUrl = e.triggerElement.href; 2264 var banUrl = [""]; 2265 if (banUrl[0] != "") { 2266 banUrl.forEach(item => { 2267 if(currentUrl.indexOf(item) != -1 || targetUrl.indexOf(item) != -1) { 2268 window.location.href = targetUrl; 2269 } 2270 }); 2271 } 2272 } catch (error) {} 2273 2274 $(window).unbind('resize'); 2275 $(window).unbind('scroll'); 2276 $(document).unbind('scroll'); 2277 $(document).unbind('click'); 2278 $('body').unbind('click'); 2279 2280 }) 2281 2282 document.addEventListener('pjax:complete', function () { 2283 $('script[data-pjax], .pjax-reload script').each(function () { 2284 $(this).parent().append($(this).remove()); 2285 }); 2286 }); 2287 2288 document.addEventListener('pjax:error', function (e) { 2289 window.location.href = e.triggerElement.href; 2290 }) 2291 2292 // å·æ°ä¸ä»é¡¶é¨å¼å§ 2293 document.addEventListener("DOMContentLoaded", function () { 2294 history.scrollRestoration = 'auto'; 2295 }) 2296 </script>
2296 2297 2298 2299 2300 </body> 2301</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.