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.