@mlikiowa/nanaeo 1.0.1702966759079 → 1.0.1702967656417

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. package/2022/08/04/NewBlog/index.html +3473 -0
  2. package/2022/08/13/GaussWave/index.html +3407 -0
  3. package/about/index.html +3236 -0
  4. package/archives/2022/08/index.html +3411 -0
  5. package/archives/2022/index.html +3411 -0
  6. package/archives/index.html +3308 -0
  7. package/asset/Sotheby.ttf +0 -0
  8. package/asset/backimg.png +0 -0
  9. package/atom.xml +171 -0
  10. package/categories/DevLog/index.html +3351 -0
  11. package/categories/SiteLog/index.html +3351 -0
  12. package/categories/index.html +3174 -0
  13. package/category/devlog/atom.xml +58 -0
  14. package/category/devlog/feed.json +19 -0
  15. package/category/devlog/rss.xml +62 -0
  16. package/category/sitelog/atom.xml +125 -0
  17. package/category/sitelog/feed.json +20 -0
  18. package/category/sitelog/rss.xml +129 -0
  19. package/content.json +1 -0
  20. package/css/Readme.html +9 -0
  21. package/css/first.css +1504 -0
  22. package/css/style.css +7106 -0
  23. package/favicon.ico +0 -0
  24. package/feed.json +31 -0
  25. package/friends/index.html +3661 -0
  26. package/index.html +3421 -0
  27. package/js/app.js +1223 -0
  28. package/js/plugins/aplayer.js +186 -0
  29. package/js/plugins/parallax.js +191 -0
  30. package/js/plugins/rightMenu.js +577 -0
  31. package/js/plugins/rightMenus.js +618 -0
  32. package/js/plugins/tags/contributors.js +92 -0
  33. package/js/plugins/tags/friends.js +93 -0
  34. package/js/plugins/tags/sites.js +96 -0
  35. package/js/search/hexo.js +192 -0
  36. package/package.json +1 -1
  37. package/rss.xml +175 -0
  38. package/tag/devlog/atom.xml +58 -0
  39. package/tag/devlog/feed.json +19 -0
  40. package/tag/devlog/rss.xml +62 -0
  41. package/tag/gauss/atom.xml +58 -0
  42. package/tag/gauss/feed.json +19 -0
  43. package/tag/gauss/rss.xml +62 -0
  44. package/tag/hexo/atom.xml +125 -0
  45. package/tag/hexo/feed.json +20 -0
  46. package/tag/hexo/rss.xml +129 -0
  47. package/tag/hexothemes/atom.xml +125 -0
  48. package/tag/hexothemes/feed.json +20 -0
  49. package/tag/hexothemes/rss.xml +129 -0
  50. package/tag/sitelog/atom.xml +125 -0
  51. package/tag/sitelog/feed.json +20 -0
  52. package/tag/sitelog/rss.xml +129 -0
  53. package/tags/DevLog/index.html +3351 -0
  54. package/tags/Gauss/index.html +3351 -0
  55. package/tags/Hexo/index.html +3351 -0
  56. package/tags/HexoThemes/index.html +3351 -0
  57. package/tags/SiteLog/index.html +3351 -0
  58. package/tags/index.html +3159 -0
  59. package/volantis-sw.js +797 -0
@@ -0,0 +1,3236 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN,en,default">
3
+ <head hexo-theme='https://github.com/volantis-x/hexo-theme-volantis/#5.8.0'>
4
+ <meta name="generator" content="Hexo 6.3.0">
5
+ <meta name="Volantis" content="5.8.0">
6
+ <meta charset="utf-8">
7
+ <!-- SEO相关 -->
8
+
9
+ <link rel="canonical" href="https://nanaeo.cn/about/"/>
10
+ <!-- 渲染优化 -->
11
+ <meta http-equiv='x-dns-prefetch-control' content='on' />
12
+ <link rel='dns-prefetch' href='https://unpkg.com'>
13
+ <link rel="preconnect" href="https://unpkg.com" crossorigin>
14
+ <meta name="renderer" content="webkit">
15
+ <meta name="force-rendering" content="webkit">
16
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
17
+ <meta http-equiv="Content-Security-Policy" content=" default-src 'self' https:; block-all-mixed-content; base-uri 'self' https:; form-action 'self' https:; worker-src 'self' https:; connect-src 'self' https: *; img-src 'self' data: https: *; media-src 'self' https: *; font-src 'self' data: https: *; frame-src 'self' https: *; manifest-src 'self' https: *; child-src https:; script-src 'self' https: 'unsafe-inline' *; style-src 'self' https: 'unsafe-inline' *; ">
18
+ <meta name="HandheldFriendly" content="True" >
19
+ <meta name="apple-mobile-web-app-capable" content="yes">
20
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5">
21
+ <meta content="black-translucent" name="apple-mobile-web-app-status-bar-style">
22
+ <meta content="telephone=no" name="format-detection">
23
+ <!-- import head_begin begin -->
24
+ <!-- import head_begin end -->
25
+ <!-- Custom Files headBegin begin-->
26
+
27
+ <!-- Custom Files headBegin end-->
28
+ <!-- front-matter head_begin begin -->
29
+ <!-- front-matter head_begin end -->
30
+ <link rel="preload" href="/css/style.css" as="style">
31
+ <link rel="preload" href="https://nanaeo.cn/asset/Sotheby.ttf" as="font" type="font/ttf" crossorigin="anonymous">
32
+ <link rel="preload" href="https://fastly.jsdelivr.net/gh/moieo/moieo@main/moieo.woff2" as="font" type="font/woff2" crossorigin="anonymous">
33
+
34
+ <!-- feed -->
35
+ <!-- 页面元数据 -->
36
+ <title>关于 - Village</title>
37
+ <meta name="keywords" content="null">
38
+ <meta desc name="description" content="It is a little blog~ - Mlikiowa - Village">
39
+
40
+ <meta property="og:type" content="website">
41
+ <meta property="og:title" content="Village">
42
+ <meta property="og:url" content="https://nanaeo.cn/about/index.html">
43
+ <meta property="og:site_name" content="Village">
44
+ <meta property="og:description" content="Hi, I’m Mlikiowa!是一位正在创作与做出改变的大学生,正在思考着知识与生活,并且为此刻而庆幸着… ExpPrevious 与Ghost在System游玩,Win酱还是Win7的样子。 2015 在Win10萌芽的时代,遇见CoolQ后咱变成了一位开发者. 2016 时间过去一年,我知道我不会一直待在这个圈子里面,于是很快我直接脱离了Plugins的开发,开始开发桌面软件,并尝试着运营">
45
+ <meta property="og:locale" content="zh_CN">
46
+ <meta property="og:image" content="https://fastly.jsdelivr.net/npm/volantis-static/media/org.volantis/blog/favicon/android-chrome-192x192.png">
47
+ <meta property="article:published_time" content="2023-12-19T06:33:48.885Z">
48
+ <meta property="article:modified_time" content="2023-12-19T06:33:48.885Z">
49
+ <meta property="article:author" content="Mlikiowa">
50
+ <meta name="twitter:card" content="summary">
51
+ <meta name="twitter:image" content="https://fastly.jsdelivr.net/npm/volantis-static/media/org.volantis/blog/favicon/android-chrome-192x192.png">
52
+ <style>
53
+ /* 首屏样式 */
54
+ #safearea {
55
+ display: none;
56
+ }
57
+ .post-story + .post-story {
58
+ content-visibility: auto;
59
+ contain-intrinsic-size: 10px 500px;
60
+ }
61
+ :root {
62
+ --color-site-body: #e0eeee;
63
+ --color-site-bg: #e0eeee;
64
+ --color-site-inner: #fff;
65
+ --color-site-footer: #666;
66
+ --color-card: #fff0f5;
67
+ --color-text: #eea9b8;
68
+ --color-block: #f6f6f6;
69
+ --color-inlinecode: #ec7bb6;
70
+ --color-codeblock: #e0eeee;
71
+ --color-h1: #3a3a3a;
72
+ --color-h2: #3a3a3a;
73
+ --color-h3: #23464f;
74
+ --color-h4: #23464f;
75
+ --color-h5: #23464f;
76
+ --color-h6: #23464f;
77
+ --color-p: #23464f;
78
+ --color-list: #eea9b8;
79
+ --color-list-hl: #f7cdd4;
80
+ --color-meta: #888;
81
+ --color-read-bkg: #e0d8c8;
82
+ --color-read-post: #f8f1e2;
83
+ --color-copyright-bkg: #f5f5f5;
84
+ }
85
+ * {
86
+ box-sizing: border-box;
87
+ -webkit-box-sizing: border-box;
88
+ -moz-box-sizing: border-box;
89
+ outline: none;
90
+ margin: 0;
91
+ padding: 0;
92
+ }
93
+ *::-webkit-scrollbar {
94
+ height: 4px;
95
+ width: 4px;
96
+ }
97
+ *::-webkit-scrollbar-track-piece {
98
+ background: transparent;
99
+ }
100
+ *::-webkit-scrollbar-thumb {
101
+ background: #fcc;
102
+ cursor: pointer;
103
+ border-radius: 2px;
104
+ -webkit-border-radius: 2px;
105
+ }
106
+ *::-webkit-scrollbar-thumb:hover {
107
+ background: #ff5722;
108
+ }
109
+ html {
110
+ color: var(--color-text);
111
+ width: 100%;
112
+ height: 100%;
113
+ font-family: Dosis, "PingFang SC", "Microsoft YaHei", Helvetica, Arial, Menlo, Monaco, monospace, sans-serif;
114
+ font-size: 16px;
115
+ }
116
+ html >::-webkit-scrollbar {
117
+ height: 4px;
118
+ width: 4px;
119
+ }
120
+ html >::-webkit-scrollbar-track-piece {
121
+ background: transparent;
122
+ }
123
+ html >::-webkit-scrollbar-thumb {
124
+ background: #54b5a0 linear-gradient(45deg, rgba(255,255,255,0.4) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.4) 50%, rgba(255,255,255,0.4) 75%, transparent 75%, transparent);
125
+ cursor: pointer;
126
+ border-radius: 2px;
127
+ -webkit-border-radius: 2px;
128
+ }
129
+ html >::-webkit-scrollbar-thumb:hover {
130
+ background: #54b5a0 linear-gradient(45deg, rgba(255,255,255,0.4) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.4) 50%, rgba(255,255,255,0.4) 75%, transparent 75%, transparent);
131
+ }
132
+ body {
133
+ background-color: var(--color-site-body);
134
+ text-rendering: optimizelegibility;
135
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
136
+ line-height: 1.6;
137
+ -webkit-text-size-adjust: 100%;
138
+ -ms-text-size-adjust: 100%;
139
+ }
140
+ body.modal-active {
141
+ overflow: hidden;
142
+ }
143
+ @media screen and (max-width: 680px) {
144
+ body.modal-active {
145
+ position: fixed;
146
+ top: 0;
147
+ right: 0;
148
+ bottom: 0;
149
+ left: 0;
150
+ }
151
+ }
152
+ a {
153
+ color: #ec7bb6;
154
+ cursor: pointer;
155
+ text-decoration: none;
156
+ transition: all 0.28s ease;
157
+ -webkit-transition: all 0.28s ease;
158
+ -khtml-transition: all 0.28s ease;
159
+ -moz-transition: all 0.28s ease;
160
+ -o-transition: all 0.28s ease;
161
+ -ms-transition: all 0.28s ease;
162
+ }
163
+ a:hover {
164
+ color: #ff5722;
165
+ }
166
+ a:active,
167
+ a:hover {
168
+ outline: 0;
169
+ }
170
+ ul,
171
+ ol {
172
+ padding-left: 0;
173
+ }
174
+ ul li,
175
+ ol li {
176
+ list-style: none;
177
+ }
178
+ header {
179
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
180
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
181
+ display: block;
182
+ }
183
+ img {
184
+ border: 0;
185
+ background: none;
186
+ max-width: 100%;
187
+ }
188
+ svg:not(:root) {
189
+ overflow: hidden;
190
+ }
191
+ hr {
192
+ -moz-box-sizing: content-box;
193
+ box-sizing: content-box;
194
+ -webkit-box-sizing: content-box;
195
+ -moz-box-sizing: content-box;
196
+ height: 0;
197
+ border: 0;
198
+ border-radius: 1px;
199
+ -webkit-border-radius: 1px;
200
+ border-bottom: 1px solid rgba(238,169,184,0.1);
201
+ }
202
+ button,
203
+ input {
204
+ color: inherit;
205
+ font: inherit;
206
+ margin: 0;
207
+ }
208
+ button {
209
+ overflow: visible;
210
+ text-transform: none;
211
+ -webkit-appearance: button;
212
+ cursor: pointer;
213
+ }
214
+ @supports (backdrop-filter: blur(20px)) {
215
+ .blur {
216
+ background: rgba(255,240,245,0.9) !important;
217
+ backdrop-filter: saturate(200%) blur(20px);
218
+ }
219
+ }
220
+ .shadow {
221
+ box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);
222
+ -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);
223
+ }
224
+ .shadow.floatable {
225
+ transition: all 0.28s ease;
226
+ -webkit-transition: all 0.28s ease;
227
+ -khtml-transition: all 0.28s ease;
228
+ -moz-transition: all 0.28s ease;
229
+ -o-transition: all 0.28s ease;
230
+ -ms-transition: all 0.28s ease;
231
+ }
232
+ .shadow.floatable:hover {
233
+ box-shadow: 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1);
234
+ -webkit-box-shadow: 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1);
235
+ }
236
+ #l_cover {
237
+ min-height: 64px;
238
+ }
239
+ .cover-wrapper {
240
+ top: 0;
241
+ left: 0;
242
+ max-width: 100%;
243
+ height: 100vh;
244
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
245
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
246
+ display: -ms-flexbox /* TWEENER - IE 10 */;
247
+ display: -webkit-flex /* NEW - Chrome */;
248
+ display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;
249
+ display: flex;
250
+ flex-wrap: nowrap;
251
+ -webkit-flex-wrap: nowrap;
252
+ -khtml-flex-wrap: nowrap;
253
+ -moz-flex-wrap: nowrap;
254
+ -o-flex-wrap: nowrap;
255
+ -ms-flex-wrap: nowrap;
256
+ -webkit-box-direction: normal;
257
+ -moz-box-direction: normal;
258
+ -webkit-box-orient: vertical;
259
+ -moz-box-orient: vertical;
260
+ -webkit-flex-direction: column;
261
+ -ms-flex-direction: column;
262
+ flex-direction: column;
263
+ align-items: center;
264
+ align-self: center;
265
+ align-content: center;
266
+ color: var(--color-site-inner);
267
+ padding: 0 16px;
268
+ user-select: none;
269
+ -webkit-user-select: none;
270
+ -moz-user-select: none;
271
+ -ms-user-select: none;
272
+ position: relative;
273
+ overflow: hidden;
274
+ margin-bottom: -100px;
275
+ }
276
+ .cover-wrapper .cover-bg {
277
+ position: absolute;
278
+ width: 100%;
279
+ height: 100%;
280
+ background-position: center;
281
+ background-size: cover;
282
+ -webkit-background-size: cover;
283
+ -moz-background-size: cover;
284
+ }
285
+ .cover-wrapper .cover-bg.lazyload:not(.loaded) {
286
+ opacity: 0;
287
+ -webkit-opacity: 0;
288
+ -moz-opacity: 0;
289
+ }
290
+ .cover-wrapper .cover-bg.lazyload.loaded {
291
+ animation-delay: 0s;
292
+ animation-duration: 0.5s;
293
+ animation-fill-mode: forwards;
294
+ animation-timing-function: ease-out;
295
+ animation-name: fadeIn;
296
+ }
297
+ @-moz-keyframes fadeIn {
298
+ 0% {
299
+ opacity: 0;
300
+ -webkit-opacity: 0;
301
+ -moz-opacity: 0;
302
+ filter: blur(12px);
303
+ transform: scale(1.02);
304
+ -webkit-transform: scale(1.02);
305
+ -khtml-transform: scale(1.02);
306
+ -moz-transform: scale(1.02);
307
+ -o-transform: scale(1.02);
308
+ -ms-transform: scale(1.02);
309
+ }
310
+ 100% {
311
+ opacity: 1;
312
+ -webkit-opacity: 1;
313
+ -moz-opacity: 1;
314
+ }
315
+ }
316
+ @-webkit-keyframes fadeIn {
317
+ 0% {
318
+ opacity: 0;
319
+ -webkit-opacity: 0;
320
+ -moz-opacity: 0;
321
+ filter: blur(12px);
322
+ transform: scale(1.02);
323
+ -webkit-transform: scale(1.02);
324
+ -khtml-transform: scale(1.02);
325
+ -moz-transform: scale(1.02);
326
+ -o-transform: scale(1.02);
327
+ -ms-transform: scale(1.02);
328
+ }
329
+ 100% {
330
+ opacity: 1;
331
+ -webkit-opacity: 1;
332
+ -moz-opacity: 1;
333
+ }
334
+ }
335
+ @-o-keyframes fadeIn {
336
+ 0% {
337
+ opacity: 0;
338
+ -webkit-opacity: 0;
339
+ -moz-opacity: 0;
340
+ filter: blur(12px);
341
+ transform: scale(1.02);
342
+ -webkit-transform: scale(1.02);
343
+ -khtml-transform: scale(1.02);
344
+ -moz-transform: scale(1.02);
345
+ -o-transform: scale(1.02);
346
+ -ms-transform: scale(1.02);
347
+ }
348
+ 100% {
349
+ opacity: 1;
350
+ -webkit-opacity: 1;
351
+ -moz-opacity: 1;
352
+ }
353
+ }
354
+ @keyframes fadeIn {
355
+ 0% {
356
+ opacity: 0;
357
+ -webkit-opacity: 0;
358
+ -moz-opacity: 0;
359
+ filter: blur(12px);
360
+ transform: scale(1.02);
361
+ -webkit-transform: scale(1.02);
362
+ -khtml-transform: scale(1.02);
363
+ -moz-transform: scale(1.02);
364
+ -o-transform: scale(1.02);
365
+ -ms-transform: scale(1.02);
366
+ }
367
+ 100% {
368
+ opacity: 1;
369
+ -webkit-opacity: 1;
370
+ -moz-opacity: 1;
371
+ }
372
+ }
373
+ .cover-wrapper .cover-body {
374
+ z-index: 1;
375
+ position: relative;
376
+ width: 100%;
377
+ height: 100%;
378
+ }
379
+ .cover-wrapper#full {
380
+ height: calc(100vh + 100px);
381
+ padding-bottom: 100px;
382
+ }
383
+ .cover-wrapper#half {
384
+ max-height: 640px;
385
+ min-height: 400px;
386
+ height: calc(36vh - 64px + 200px);
387
+ }
388
+ .cover-wrapper #scroll-down {
389
+ width: 100%;
390
+ height: 64px;
391
+ position: absolute;
392
+ bottom: 100px;
393
+ text-align: center;
394
+ cursor: pointer;
395
+ }
396
+ .cover-wrapper #scroll-down .scroll-down-effects {
397
+ color: #fff;
398
+ font-size: 24px;
399
+ line-height: 64px;
400
+ position: absolute;
401
+ width: 24px;
402
+ left: calc(50% - 12px);
403
+ text-shadow: 0 1px 2px rgba(0,0,0,0.1);
404
+ animation: scroll-down-effect 1.5s infinite;
405
+ -webkit-animation: scroll-down-effect 1.5s infinite;
406
+ -khtml-animation: scroll-down-effect 1.5s infinite;
407
+ -moz-animation: scroll-down-effect 1.5s infinite;
408
+ -o-animation: scroll-down-effect 1.5s infinite;
409
+ -ms-animation: scroll-down-effect 1.5s infinite;
410
+ }
411
+ @-moz-keyframes scroll-down-effect {
412
+ 0% {
413
+ top: 0;
414
+ opacity: 1;
415
+ -webkit-opacity: 1;
416
+ -moz-opacity: 1;
417
+ }
418
+ 50% {
419
+ top: -16px;
420
+ opacity: 0.4;
421
+ -webkit-opacity: 0.4;
422
+ -moz-opacity: 0.4;
423
+ }
424
+ 100% {
425
+ top: 0;
426
+ opacity: 1;
427
+ -webkit-opacity: 1;
428
+ -moz-opacity: 1;
429
+ }
430
+ }
431
+ @-webkit-keyframes scroll-down-effect {
432
+ 0% {
433
+ top: 0;
434
+ opacity: 1;
435
+ -webkit-opacity: 1;
436
+ -moz-opacity: 1;
437
+ }
438
+ 50% {
439
+ top: -16px;
440
+ opacity: 0.4;
441
+ -webkit-opacity: 0.4;
442
+ -moz-opacity: 0.4;
443
+ }
444
+ 100% {
445
+ top: 0;
446
+ opacity: 1;
447
+ -webkit-opacity: 1;
448
+ -moz-opacity: 1;
449
+ }
450
+ }
451
+ @-o-keyframes scroll-down-effect {
452
+ 0% {
453
+ top: 0;
454
+ opacity: 1;
455
+ -webkit-opacity: 1;
456
+ -moz-opacity: 1;
457
+ }
458
+ 50% {
459
+ top: -16px;
460
+ opacity: 0.4;
461
+ -webkit-opacity: 0.4;
462
+ -moz-opacity: 0.4;
463
+ }
464
+ 100% {
465
+ top: 0;
466
+ opacity: 1;
467
+ -webkit-opacity: 1;
468
+ -moz-opacity: 1;
469
+ }
470
+ }
471
+ @keyframes scroll-down-effect {
472
+ 0% {
473
+ top: 0;
474
+ opacity: 1;
475
+ -webkit-opacity: 1;
476
+ -moz-opacity: 1;
477
+ }
478
+ 50% {
479
+ top: -16px;
480
+ opacity: 0.4;
481
+ -webkit-opacity: 0.4;
482
+ -moz-opacity: 0.4;
483
+ }
484
+ 100% {
485
+ top: 0;
486
+ opacity: 1;
487
+ -webkit-opacity: 1;
488
+ -moz-opacity: 1;
489
+ }
490
+ }
491
+ .cover-wrapper .cover-body {
492
+ margin-top: 64px;
493
+ margin-bottom: 100px;
494
+ }
495
+ .cover-wrapper .cover-body,
496
+ .cover-wrapper .cover-body .top,
497
+ .cover-wrapper .cover-body .bottom {
498
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
499
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
500
+ display: -ms-flexbox /* TWEENER - IE 10 */;
501
+ display: -webkit-flex /* NEW - Chrome */;
502
+ display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;
503
+ display: flex;
504
+ -webkit-box-direction: normal;
505
+ -moz-box-direction: normal;
506
+ -webkit-box-orient: vertical;
507
+ -moz-box-orient: vertical;
508
+ -webkit-flex-direction: column;
509
+ -ms-flex-direction: column;
510
+ flex-direction: column;
511
+ align-items: center;
512
+ justify-content: center;
513
+ -webkit-justify-content: center;
514
+ -khtml-justify-content: center;
515
+ -moz-justify-content: center;
516
+ -o-justify-content: center;
517
+ -ms-justify-content: center;
518
+ max-width: 100%;
519
+ }
520
+ .cover-wrapper .cover-body .bottom {
521
+ margin-top: 32px;
522
+ }
523
+ .cover-wrapper .cover-body .title {
524
+ font-family: Sotheby, Helvetica, monospace;
525
+ font-size: 3.125rem;
526
+ line-height: 1.2;
527
+ text-shadow: 0 1px 2px rgba(0,0,0,0.1);
528
+ }
529
+ .cover-wrapper .cover-body .subtitle {
530
+ font-size: 20px;
531
+ }
532
+ .cover-wrapper .cover-body .logo {
533
+ max-height: 120px;
534
+ max-width: calc(100% - 4 * 16px);
535
+ }
536
+ @media screen and (min-height: 1024px) {
537
+ .cover-wrapper .cover-body .title {
538
+ font-size: 3rem;
539
+ }
540
+ .cover-wrapper .cover-body .subtitle {
541
+ font-size: 1.05rem;
542
+ }
543
+ .cover-wrapper .cover-body .logo {
544
+ max-height: 150px;
545
+ }
546
+ }
547
+ .cover-wrapper .cover-body .m_search {
548
+ position: relative;
549
+ max-width: calc(100% - 16px);
550
+ width: 320px;
551
+ vertical-align: middle;
552
+ }
553
+ .cover-wrapper .cover-body .m_search .form {
554
+ position: relative;
555
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
556
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
557
+ display: block;
558
+ width: 100%;
559
+ }
560
+ .cover-wrapper .cover-body .m_search .icon,
561
+ .cover-wrapper .cover-body .m_search .input {
562
+ transition: all 0.28s ease;
563
+ -webkit-transition: all 0.28s ease;
564
+ -khtml-transition: all 0.28s ease;
565
+ -moz-transition: all 0.28s ease;
566
+ -o-transition: all 0.28s ease;
567
+ -ms-transition: all 0.28s ease;
568
+ }
569
+ .cover-wrapper .cover-body .m_search .icon {
570
+ position: absolute;
571
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
572
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
573
+ display: block;
574
+ line-height: 2.5rem;
575
+ width: 32px;
576
+ top: 0;
577
+ left: 5px;
578
+ color: rgba(35,70,79,0.75);
579
+ }
580
+ .cover-wrapper .cover-body .m_search .input {
581
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
582
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
583
+ display: block;
584
+ height: 2.5rem;
585
+ width: 100%;
586
+ box-shadow: none;
587
+ -webkit-box-shadow: none;
588
+ box-sizing: border-box;
589
+ -webkit-box-sizing: border-box;
590
+ -moz-box-sizing: border-box;
591
+ font-size: 0.875rem;
592
+ -webkit-appearance: none;
593
+ padding-left: 36px;
594
+ border-radius: 1.4rem;
595
+ -webkit-border-radius: 1.4rem;
596
+ background: rgba(255,240,245,0.6);
597
+ backdrop-filter: blur(10px);
598
+ border: none;
599
+ color: var(--color-text);
600
+ }
601
+ @media screen and (max-width: 500px) {
602
+ .cover-wrapper .cover-body .m_search .input {
603
+ padding-left: 36px;
604
+ }
605
+ }
606
+ .cover-wrapper .cover-body .m_search .input:hover {
607
+ background: rgba(255,240,245,0.8);
608
+ }
609
+ .cover-wrapper .cover-body .m_search .input:focus {
610
+ background: #fff0f5;
611
+ }
612
+ .cover-wrapper .list-h {
613
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
614
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
615
+ display: -ms-flexbox /* TWEENER - IE 10 */;
616
+ display: -webkit-flex /* NEW - Chrome */;
617
+ display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;
618
+ display: flex;
619
+ -webkit-box-direction: normal;
620
+ -moz-box-direction: normal;
621
+ -webkit-box-orient: horizontal;
622
+ -moz-box-orient: horizontal;
623
+ -webkit-flex-direction: row;
624
+ -ms-flex-direction: row;
625
+ flex-direction: row;
626
+ flex-wrap: wrap;
627
+ -webkit-flex-wrap: wrap;
628
+ -khtml-flex-wrap: wrap;
629
+ -moz-flex-wrap: wrap;
630
+ -o-flex-wrap: wrap;
631
+ -ms-flex-wrap: wrap;
632
+ align-items: stretch;
633
+ border-radius: 4px;
634
+ -webkit-border-radius: 4px;
635
+ user-select: none;
636
+ -webkit-user-select: none;
637
+ -moz-user-select: none;
638
+ -ms-user-select: none;
639
+ }
640
+ .cover-wrapper .list-h a {
641
+ -webkit-box-flex: 1;
642
+ -moz-box-flex: 1;
643
+ -webkit-flex: 1 0;
644
+ -ms-flex: 1 0;
645
+ flex: 1 0;
646
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
647
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
648
+ display: -ms-flexbox /* TWEENER - IE 10 */;
649
+ display: -webkit-flex /* NEW - Chrome */;
650
+ display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;
651
+ display: flex;
652
+ font-weight: 600;
653
+ }
654
+ .cover-wrapper .list-h a img {
655
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
656
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
657
+ display: block;
658
+ border-radius: 2px;
659
+ -webkit-border-radius: 2px;
660
+ margin: 4px;
661
+ min-width: 40px;
662
+ max-width: 44px;
663
+ }
664
+ @media screen and (max-width: 768px) {
665
+ .cover-wrapper .list-h a img {
666
+ min-width: 36px;
667
+ max-width: 40px;
668
+ }
669
+ }
670
+ @media screen and (max-width: 500px) {
671
+ .cover-wrapper .list-h a img {
672
+ margin: 2px 4px;
673
+ min-width: 32px;
674
+ max-width: 36px;
675
+ }
676
+ }
677
+ @media screen and (max-width: 375px) {
678
+ .cover-wrapper .list-h a img {
679
+ min-width: 28px;
680
+ max-width: 32px;
681
+ }
682
+ }
683
+ .cover-wrapper {
684
+ max-width: 100%;
685
+ }
686
+ .cover-wrapper.search .bottom .menu {
687
+ margin-top: 16px;
688
+ }
689
+ .cover-wrapper.search .bottom .menu .list-h a {
690
+ white-space: nowrap;
691
+ -webkit-box-direction: normal;
692
+ -moz-box-direction: normal;
693
+ -webkit-box-orient: horizontal;
694
+ -moz-box-orient: horizontal;
695
+ -webkit-flex-direction: row;
696
+ -ms-flex-direction: row;
697
+ flex-direction: row;
698
+ align-items: baseline;
699
+ padding: 2px;
700
+ margin: 4px;
701
+ color: var(--color-site-inner);
702
+ opacity: 0.75;
703
+ -webkit-opacity: 0.75;
704
+ -moz-opacity: 0.75;
705
+ text-shadow: 0 1px 2px rgba(0,0,0,0.05);
706
+ border-bottom: 2px solid transparent;
707
+ }
708
+ .cover-wrapper.search .bottom .menu .list-h a i {
709
+ margin-right: 4px;
710
+ }
711
+ .cover-wrapper.search .bottom .menu .list-h a p {
712
+ font-size: 0.9375rem;
713
+ }
714
+ .cover-wrapper.search .bottom .menu .list-h a:hover,
715
+ .cover-wrapper.search .bottom .menu .list-h a.active,
716
+ .cover-wrapper.search .bottom .menu .list-h a:active {
717
+ opacity: 1;
718
+ -webkit-opacity: 1;
719
+ -moz-opacity: 1;
720
+ border-bottom: 2px solid var(--color-site-inner);
721
+ }
722
+ @font-face {
723
+ font-family: 'Dosis';
724
+ src: url("https://fastly.jsdelivr.net/gh/moieo/moieo@main/moieo.woff2");
725
+ font-weight: 'normal';
726
+ font-style: 'normal';
727
+ font-display: swap;
728
+ }
729
+ @font-face {
730
+ font-family: 'Sotheby';
731
+ src: url("https://nanaeo.cn/asset/Sotheby.ttf");
732
+ font-weight: 'normal';
733
+ font-style: 'normal';
734
+ font-display: swap;
735
+ }
736
+ .l_header {
737
+ position: fixed;
738
+ z-index: 1000;
739
+ top: 0;
740
+ width: 100%;
741
+ height: 64px;
742
+ background: var(--color-card);
743
+ box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);
744
+ -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);
745
+ }
746
+ .l_header.auto {
747
+ transition: opacity 0.4s ease;
748
+ -webkit-transition: opacity 0.4s ease;
749
+ -khtml-transition: opacity 0.4s ease;
750
+ -moz-transition: opacity 0.4s ease;
751
+ -o-transition: opacity 0.4s ease;
752
+ -ms-transition: opacity 0.4s ease;
753
+ visibility: hidden;
754
+ }
755
+ .l_header.auto.show {
756
+ opacity: 1 !important;
757
+ -webkit-opacity: 1 !important;
758
+ -moz-opacity: 1 !important;
759
+ visibility: visible;
760
+ }
761
+ .l_header .container {
762
+ margin-left: 16px;
763
+ margin-right: 16px;
764
+ }
765
+ .l_header #wrapper {
766
+ height: 100%;
767
+ user-select: none;
768
+ -webkit-user-select: none;
769
+ -moz-user-select: none;
770
+ -ms-user-select: none;
771
+ }
772
+ .l_header #wrapper .nav-main,
773
+ .l_header #wrapper .nav-sub {
774
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
775
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
776
+ display: -ms-flexbox /* TWEENER - IE 10 */;
777
+ display: -webkit-flex /* NEW - Chrome */;
778
+ display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;
779
+ display: flex;
780
+ flex-wrap: nowrap;
781
+ -webkit-flex-wrap: nowrap;
782
+ -khtml-flex-wrap: nowrap;
783
+ -moz-flex-wrap: nowrap;
784
+ -o-flex-wrap: nowrap;
785
+ -ms-flex-wrap: nowrap;
786
+ justify-content: space-between;
787
+ -webkit-justify-content: space-between;
788
+ -khtml-justify-content: space-between;
789
+ -moz-justify-content: space-between;
790
+ -o-justify-content: space-between;
791
+ -ms-justify-content: space-between;
792
+ align-items: center;
793
+ }
794
+ .l_header #wrapper .nav-main {
795
+ transition: all 0.28s ease;
796
+ -webkit-transition: all 0.28s ease;
797
+ -khtml-transition: all 0.28s ease;
798
+ -moz-transition: all 0.28s ease;
799
+ -o-transition: all 0.28s ease;
800
+ -ms-transition: all 0.28s ease;
801
+ }
802
+ .l_header #wrapper.sub .nav-main {
803
+ transform: translateY(-64px);
804
+ -webkit-transform: translateY(-64px);
805
+ -khtml-transform: translateY(-64px);
806
+ -moz-transform: translateY(-64px);
807
+ -o-transform: translateY(-64px);
808
+ -ms-transform: translateY(-64px);
809
+ }
810
+ .l_header #wrapper .nav-sub {
811
+ transition: all 0.28s ease;
812
+ -webkit-transition: all 0.28s ease;
813
+ -khtml-transition: all 0.28s ease;
814
+ -moz-transition: all 0.28s ease;
815
+ -o-transition: all 0.28s ease;
816
+ -ms-transition: all 0.28s ease;
817
+ opacity: 0;
818
+ -webkit-opacity: 0;
819
+ -moz-opacity: 0;
820
+ height: 64px;
821
+ width: calc(100% - 2 * 16px);
822
+ position: absolute;
823
+ }
824
+ .l_header #wrapper .nav-sub ::-webkit-scrollbar {
825
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
826
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
827
+ display: none;
828
+ }
829
+ @media screen and (min-width: 2048px) {
830
+ .l_header #wrapper .nav-sub {
831
+ max-width: 55vw;
832
+ margin: auto;
833
+ }
834
+ }
835
+ .l_header #wrapper.sub .nav-sub {
836
+ opacity: 1;
837
+ -webkit-opacity: 1;
838
+ -moz-opacity: 1;
839
+ }
840
+ .l_header #wrapper .title {
841
+ position: relative;
842
+ color: var(--color-text);
843
+ padding-left: 24px;
844
+ max-height: 64px;
845
+ }
846
+ .l_header #wrapper .nav-main .title {
847
+ white-space: nowrap;
848
+ overflow: hidden;
849
+ text-overflow: ellipsis;
850
+ flex-shrink: 0;
851
+ line-height: 64px;
852
+ padding: 0 24px;
853
+ font-size: 1.25rem;
854
+ font-family: Sotheby, Helvetica, monospace;
855
+ }
856
+ .l_header #wrapper .nav-main .title img {
857
+ height: 64px;
858
+ }
859
+ .l_header .nav-sub {
860
+ max-width: 1080px;
861
+ margin: auto;
862
+ }
863
+ .l_header .nav-sub .title {
864
+ font-weight: bold;
865
+ font-family: Dosis, "PingFang SC", "Microsoft YaHei", Helvetica, Arial, Menlo, Monaco, monospace, sans-serif;
866
+ line-height: 1.2;
867
+ max-height: 64px;
868
+ white-space: normal;
869
+ flex-shrink: 1;
870
+ }
871
+ .l_header .switcher {
872
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
873
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
874
+ display: none;
875
+ line-height: 64px;
876
+ align-items: center;
877
+ }
878
+ .l_header .switcher .s-toc {
879
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
880
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
881
+ display: none;
882
+ }
883
+ @media screen and (max-width: 768px) {
884
+ .l_header .switcher .s-toc {
885
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
886
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
887
+ display: -ms-flexbox /* TWEENER - IE 10 */;
888
+ display: -webkit-flex /* NEW - Chrome */;
889
+ display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;
890
+ display: flex;
891
+ }
892
+ }
893
+ .l_header .switcher >li {
894
+ height: 48px;
895
+ transition: all 0.28s ease;
896
+ -webkit-transition: all 0.28s ease;
897
+ -khtml-transition: all 0.28s ease;
898
+ -moz-transition: all 0.28s ease;
899
+ -o-transition: all 0.28s ease;
900
+ -ms-transition: all 0.28s ease;
901
+ margin: 2px;
902
+ }
903
+ @media screen and (max-width: 500px) {
904
+ .l_header .switcher >li {
905
+ margin: 0 1px;
906
+ height: 48px;
907
+ }
908
+ }
909
+ .l_header .switcher >li >a {
910
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
911
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
912
+ display: -ms-flexbox /* TWEENER - IE 10 */;
913
+ display: -webkit-flex /* NEW - Chrome */;
914
+ display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;
915
+ display: flex;
916
+ justify-content: center;
917
+ -webkit-justify-content: center;
918
+ -khtml-justify-content: center;
919
+ -moz-justify-content: center;
920
+ -o-justify-content: center;
921
+ -ms-justify-content: center;
922
+ align-items: center;
923
+ width: 48px;
924
+ height: 48px;
925
+ padding: 0.85em 1.1em;
926
+ border-radius: 100px;
927
+ -webkit-border-radius: 100px;
928
+ border: none;
929
+ transition: all 0.28s ease;
930
+ -webkit-transition: all 0.28s ease;
931
+ -khtml-transition: all 0.28s ease;
932
+ -moz-transition: all 0.28s ease;
933
+ -o-transition: all 0.28s ease;
934
+ -ms-transition: all 0.28s ease;
935
+ color: #fcc;
936
+ }
937
+ .l_header .switcher >li >a:hover {
938
+ border: none;
939
+ }
940
+ .l_header .switcher >li >a.active,
941
+ .l_header .switcher >li >a:active {
942
+ border: none;
943
+ background: var(--color-site-bg);
944
+ }
945
+ @media screen and (max-width: 500px) {
946
+ .l_header .switcher >li >a {
947
+ width: 36px;
948
+ height: 48px;
949
+ }
950
+ }
951
+ .l_header .nav-sub .switcher {
952
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
953
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
954
+ display: -ms-flexbox /* TWEENER - IE 10 */;
955
+ display: -webkit-flex /* NEW - Chrome */;
956
+ display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;
957
+ display: flex;
958
+ }
959
+ .l_header .m_search {
960
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
961
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
962
+ display: -ms-flexbox /* TWEENER - IE 10 */;
963
+ display: -webkit-flex /* NEW - Chrome */;
964
+ display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;
965
+ display: flex;
966
+ height: 64px;
967
+ width: 240px;
968
+ transition: all 0.28s ease;
969
+ -webkit-transition: all 0.28s ease;
970
+ -khtml-transition: all 0.28s ease;
971
+ -moz-transition: all 0.28s ease;
972
+ -o-transition: all 0.28s ease;
973
+ -ms-transition: all 0.28s ease;
974
+ }
975
+ @media screen and (max-width: 1024px) {
976
+ .l_header .m_search {
977
+ width: 44px;
978
+ min-width: 44px;
979
+ }
980
+ .l_header .m_search input::placeholder {
981
+ opacity: 0;
982
+ -webkit-opacity: 0;
983
+ -moz-opacity: 0;
984
+ }
985
+ .l_header .m_search:hover {
986
+ width: 240px;
987
+ }
988
+ .l_header .m_search:hover input::placeholder {
989
+ opacity: 1;
990
+ -webkit-opacity: 1;
991
+ -moz-opacity: 1;
992
+ }
993
+ }
994
+ @media screen and (min-width: 500px) {
995
+ .l_header .m_search:hover .input {
996
+ width: 100%;
997
+ }
998
+ .l_header .m_search:hover .input::placeholder {
999
+ opacity: 1;
1000
+ -webkit-opacity: 1;
1001
+ -moz-opacity: 1;
1002
+ }
1003
+ }
1004
+ @media screen and (max-width: 500px) {
1005
+ .l_header .m_search {
1006
+ min-width: 0;
1007
+ }
1008
+ .l_header .m_search input::placeholder {
1009
+ opacity: 1;
1010
+ -webkit-opacity: 1;
1011
+ -moz-opacity: 1;
1012
+ }
1013
+ }
1014
+ .l_header .m_search .form {
1015
+ position: relative;
1016
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
1017
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
1018
+ display: -ms-flexbox /* TWEENER - IE 10 */;
1019
+ display: -webkit-flex /* NEW - Chrome */;
1020
+ display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;
1021
+ display: flex;
1022
+ width: 100%;
1023
+ align-items: center;
1024
+ }
1025
+ .l_header .m_search .icon {
1026
+ position: absolute;
1027
+ width: 36px;
1028
+ left: 5px;
1029
+ color: var(--color-meta);
1030
+ }
1031
+ @media screen and (max-width: 500px) {
1032
+ .l_header .m_search .icon {
1033
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
1034
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
1035
+ display: none;
1036
+ }
1037
+ }
1038
+ .l_header .m_search .input {
1039
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
1040
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
1041
+ display: block;
1042
+ padding-top: 8px;
1043
+ padding-bottom: 8px;
1044
+ line-height: 1.3;
1045
+ width: 100%;
1046
+ color: var(--color-text);
1047
+ background: #ffe6ee;
1048
+ box-shadow: none;
1049
+ -webkit-box-shadow: none;
1050
+ box-sizing: border-box;
1051
+ -webkit-box-sizing: border-box;
1052
+ -moz-box-sizing: border-box;
1053
+ padding-left: 40px;
1054
+ font-size: 0.875rem;
1055
+ border-radius: 8px;
1056
+ -webkit-border-radius: 8px;
1057
+ border: none;
1058
+ transition: all 0.28s ease;
1059
+ -webkit-transition: all 0.28s ease;
1060
+ -khtml-transition: all 0.28s ease;
1061
+ -moz-transition: all 0.28s ease;
1062
+ -o-transition: all 0.28s ease;
1063
+ -ms-transition: all 0.28s ease;
1064
+ }
1065
+ @media screen and (min-width: 500px) {
1066
+ .l_header .m_search .input:focus {
1067
+ box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1);
1068
+ -webkit-box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1);
1069
+ }
1070
+ }
1071
+ @media screen and (max-width: 500px) {
1072
+ .l_header .m_search .input {
1073
+ background: var(--color-block);
1074
+ padding-left: 8px;
1075
+ border: none;
1076
+ }
1077
+ .l_header .m_search .input:hover,
1078
+ .l_header .m_search .input:focus {
1079
+ border: none;
1080
+ }
1081
+ }
1082
+ @media (max-width: 500px) {
1083
+ .l_header .m_search {
1084
+ left: 0;
1085
+ width: 0;
1086
+ overflow: hidden;
1087
+ position: absolute;
1088
+ background: #fff;
1089
+ transition: all 0.28s ease;
1090
+ -webkit-transition: all 0.28s ease;
1091
+ -khtml-transition: all 0.28s ease;
1092
+ -moz-transition: all 0.28s ease;
1093
+ -o-transition: all 0.28s ease;
1094
+ -ms-transition: all 0.28s ease;
1095
+ }
1096
+ .l_header .m_search .input {
1097
+ border-radius: 32px;
1098
+ -webkit-border-radius: 32px;
1099
+ margin-left: 16px;
1100
+ padding-left: 16px;
1101
+ }
1102
+ .l_header.z_search-open .m_search {
1103
+ width: 100%;
1104
+ }
1105
+ .l_header.z_search-open .m_search .input {
1106
+ width: calc(100% - 120px);
1107
+ }
1108
+ }
1109
+ ul.m-pc >li>a {
1110
+ color: inherit;
1111
+ border-bottom: 2px solid transparent;
1112
+ }
1113
+ ul.m-pc >li>a:active,
1114
+ ul.m-pc >li>a.active {
1115
+ border-bottom: 2px solid #fcc;
1116
+ }
1117
+ ul.m-pc li:hover >ul.list-v,
1118
+ ul.list-v li:hover >ul.list-v {
1119
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
1120
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
1121
+ display: block;
1122
+ }
1123
+ ul.nav-list-h {
1124
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
1125
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
1126
+ display: -ms-flexbox /* TWEENER - IE 10 */;
1127
+ display: -webkit-flex /* NEW - Chrome */;
1128
+ display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;
1129
+ display: flex;
1130
+ align-items: stretch;
1131
+ }
1132
+ ul.nav-list-h>li {
1133
+ position: relative;
1134
+ justify-content: center;
1135
+ -webkit-justify-content: center;
1136
+ -khtml-justify-content: center;
1137
+ -moz-justify-content: center;
1138
+ -o-justify-content: center;
1139
+ -ms-justify-content: center;
1140
+ height: 100%;
1141
+ line-height: 2.4;
1142
+ border-radius: 4px;
1143
+ -webkit-border-radius: 4px;
1144
+ }
1145
+ ul.nav-list-h>li >a {
1146
+ -webkit-font-smoothing: antialiased;
1147
+ -moz-osx-font-smoothing: grayscale;
1148
+ font-weight: 600;
1149
+ }
1150
+ ul.list-v {
1151
+ z-index: 1;
1152
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
1153
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
1154
+ display: none;
1155
+ position: absolute;
1156
+ background: var(--color-card);
1157
+ box-shadow: 0 2px 4px 0px rgba(0,0,0,0.08), 0 4px 8px 0px rgba(0,0,0,0.08), 0 8px 16px 0px rgba(0,0,0,0.08);
1158
+ -webkit-box-shadow: 0 2px 4px 0px rgba(0,0,0,0.08), 0 4px 8px 0px rgba(0,0,0,0.08), 0 8px 16px 0px rgba(0,0,0,0.08);
1159
+ margin-top: -6px;
1160
+ border-radius: 4px;
1161
+ -webkit-border-radius: 4px;
1162
+ padding: 8px 0;
1163
+ }
1164
+ ul.list-v.show {
1165
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
1166
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
1167
+ display: block;
1168
+ }
1169
+ ul.list-v hr {
1170
+ margin-top: 8px;
1171
+ margin-bottom: 8px;
1172
+ }
1173
+ ul.list-v >li {
1174
+ white-space: nowrap;
1175
+ word-break: keep-all;
1176
+ }
1177
+ ul.list-v >li.header {
1178
+ font-size: 0.78125rem;
1179
+ font-weight: bold;
1180
+ line-height: 2em;
1181
+ color: var(--color-meta);
1182
+ margin: 8px 16px 4px;
1183
+ }
1184
+ ul.list-v >li.header i {
1185
+ margin-right: 8px;
1186
+ }
1187
+ ul.list-v >li ul {
1188
+ margin-left: 0;
1189
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
1190
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
1191
+ display: none;
1192
+ margin-top: -40px;
1193
+ }
1194
+ ul.list-v .aplayer-container {
1195
+ min-height: 64px;
1196
+ padding: 6px 16px;
1197
+ }
1198
+ ul.list-v >li>a {
1199
+ transition: all 0.28s ease;
1200
+ -webkit-transition: all 0.28s ease;
1201
+ -khtml-transition: all 0.28s ease;
1202
+ -moz-transition: all 0.28s ease;
1203
+ -o-transition: all 0.28s ease;
1204
+ -ms-transition: all 0.28s ease;
1205
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
1206
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
1207
+ display: block;
1208
+ color: var(--color-list);
1209
+ font-size: 0.875rem;
1210
+ font-weight: bold;
1211
+ line-height: 36px;
1212
+ padding: 0 20px 0 16px;
1213
+ text-overflow: ellipsis;
1214
+ margin: 0 4px;
1215
+ border-radius: 4px;
1216
+ -webkit-border-radius: 4px;
1217
+ }
1218
+ @media screen and (max-width: 1024px) {
1219
+ ul.list-v >li>a {
1220
+ line-height: 40px;
1221
+ }
1222
+ }
1223
+ ul.list-v >li>a >i {
1224
+ margin-right: 8px;
1225
+ }
1226
+ ul.list-v >li>a:active,
1227
+ ul.list-v >li>a.active {
1228
+ color: var(--color-list-hl);
1229
+ }
1230
+ ul.list-v >li>a:hover {
1231
+ color: var(--color-list-hl);
1232
+ background: var(--color-site-bg);
1233
+ }
1234
+ .l_header .menu >ul>li>a {
1235
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
1236
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
1237
+ display: block;
1238
+ padding: 0 8px;
1239
+ }
1240
+ .l_header .menu >ul>li>a >i {
1241
+ margin-right: 4px;
1242
+ }
1243
+ .l_header ul.nav-list-h>li {
1244
+ color: var(--color-list);
1245
+ line-height: 64px;
1246
+ }
1247
+ .l_header ul.nav-list-h>li >a {
1248
+ max-height: 64px;
1249
+ overflow: hidden;
1250
+ color: inherit;
1251
+ }
1252
+ .l_header ul.nav-list-h>li >a:active,
1253
+ .l_header ul.nav-list-h>li >a.active {
1254
+ color: #fcc;
1255
+ }
1256
+ .l_header ul.nav-list-h>li:hover>a {
1257
+ color: var(--color-list-hl);
1258
+ }
1259
+ .l_header ul.nav-list-h>li i.music {
1260
+ animation: rotate-effect 1.5s linear infinite;
1261
+ -webkit-animation: rotate-effect 1.5s linear infinite;
1262
+ -khtml-animation: rotate-effect 1.5s linear infinite;
1263
+ -moz-animation: rotate-effect 1.5s linear infinite;
1264
+ -o-animation: rotate-effect 1.5s linear infinite;
1265
+ -ms-animation: rotate-effect 1.5s linear infinite;
1266
+ }
1267
+ @-moz-keyframes rotate-effect {
1268
+ 0% {
1269
+ transform: rotate(0);
1270
+ -webkit-transform: rotate(0);
1271
+ -khtml-transform: rotate(0);
1272
+ -moz-transform: rotate(0);
1273
+ -o-transform: rotate(0);
1274
+ -ms-transform: rotate(0);
1275
+ }
1276
+ 25% {
1277
+ transform: rotate(90deg);
1278
+ -webkit-transform: rotate(90deg);
1279
+ -khtml-transform: rotate(90deg);
1280
+ -moz-transform: rotate(90deg);
1281
+ -o-transform: rotate(90deg);
1282
+ -ms-transform: rotate(90deg);
1283
+ }
1284
+ 50% {
1285
+ transform: rotate(180deg);
1286
+ -webkit-transform: rotate(180deg);
1287
+ -khtml-transform: rotate(180deg);
1288
+ -moz-transform: rotate(180deg);
1289
+ -o-transform: rotate(180deg);
1290
+ -ms-transform: rotate(180deg);
1291
+ }
1292
+ 75% {
1293
+ transform: rotate(270deg);
1294
+ -webkit-transform: rotate(270deg);
1295
+ -khtml-transform: rotate(270deg);
1296
+ -moz-transform: rotate(270deg);
1297
+ -o-transform: rotate(270deg);
1298
+ -ms-transform: rotate(270deg);
1299
+ }
1300
+ 100% {
1301
+ transform: rotate(360deg);
1302
+ -webkit-transform: rotate(360deg);
1303
+ -khtml-transform: rotate(360deg);
1304
+ -moz-transform: rotate(360deg);
1305
+ -o-transform: rotate(360deg);
1306
+ -ms-transform: rotate(360deg);
1307
+ }
1308
+ }
1309
+ @-webkit-keyframes rotate-effect {
1310
+ 0% {
1311
+ transform: rotate(0);
1312
+ -webkit-transform: rotate(0);
1313
+ -khtml-transform: rotate(0);
1314
+ -moz-transform: rotate(0);
1315
+ -o-transform: rotate(0);
1316
+ -ms-transform: rotate(0);
1317
+ }
1318
+ 25% {
1319
+ transform: rotate(90deg);
1320
+ -webkit-transform: rotate(90deg);
1321
+ -khtml-transform: rotate(90deg);
1322
+ -moz-transform: rotate(90deg);
1323
+ -o-transform: rotate(90deg);
1324
+ -ms-transform: rotate(90deg);
1325
+ }
1326
+ 50% {
1327
+ transform: rotate(180deg);
1328
+ -webkit-transform: rotate(180deg);
1329
+ -khtml-transform: rotate(180deg);
1330
+ -moz-transform: rotate(180deg);
1331
+ -o-transform: rotate(180deg);
1332
+ -ms-transform: rotate(180deg);
1333
+ }
1334
+ 75% {
1335
+ transform: rotate(270deg);
1336
+ -webkit-transform: rotate(270deg);
1337
+ -khtml-transform: rotate(270deg);
1338
+ -moz-transform: rotate(270deg);
1339
+ -o-transform: rotate(270deg);
1340
+ -ms-transform: rotate(270deg);
1341
+ }
1342
+ 100% {
1343
+ transform: rotate(360deg);
1344
+ -webkit-transform: rotate(360deg);
1345
+ -khtml-transform: rotate(360deg);
1346
+ -moz-transform: rotate(360deg);
1347
+ -o-transform: rotate(360deg);
1348
+ -ms-transform: rotate(360deg);
1349
+ }
1350
+ }
1351
+ @-o-keyframes rotate-effect {
1352
+ 0% {
1353
+ transform: rotate(0);
1354
+ -webkit-transform: rotate(0);
1355
+ -khtml-transform: rotate(0);
1356
+ -moz-transform: rotate(0);
1357
+ -o-transform: rotate(0);
1358
+ -ms-transform: rotate(0);
1359
+ }
1360
+ 25% {
1361
+ transform: rotate(90deg);
1362
+ -webkit-transform: rotate(90deg);
1363
+ -khtml-transform: rotate(90deg);
1364
+ -moz-transform: rotate(90deg);
1365
+ -o-transform: rotate(90deg);
1366
+ -ms-transform: rotate(90deg);
1367
+ }
1368
+ 50% {
1369
+ transform: rotate(180deg);
1370
+ -webkit-transform: rotate(180deg);
1371
+ -khtml-transform: rotate(180deg);
1372
+ -moz-transform: rotate(180deg);
1373
+ -o-transform: rotate(180deg);
1374
+ -ms-transform: rotate(180deg);
1375
+ }
1376
+ 75% {
1377
+ transform: rotate(270deg);
1378
+ -webkit-transform: rotate(270deg);
1379
+ -khtml-transform: rotate(270deg);
1380
+ -moz-transform: rotate(270deg);
1381
+ -o-transform: rotate(270deg);
1382
+ -ms-transform: rotate(270deg);
1383
+ }
1384
+ 100% {
1385
+ transform: rotate(360deg);
1386
+ -webkit-transform: rotate(360deg);
1387
+ -khtml-transform: rotate(360deg);
1388
+ -moz-transform: rotate(360deg);
1389
+ -o-transform: rotate(360deg);
1390
+ -ms-transform: rotate(360deg);
1391
+ }
1392
+ }
1393
+ @keyframes rotate-effect {
1394
+ 0% {
1395
+ transform: rotate(0);
1396
+ -webkit-transform: rotate(0);
1397
+ -khtml-transform: rotate(0);
1398
+ -moz-transform: rotate(0);
1399
+ -o-transform: rotate(0);
1400
+ -ms-transform: rotate(0);
1401
+ }
1402
+ 25% {
1403
+ transform: rotate(90deg);
1404
+ -webkit-transform: rotate(90deg);
1405
+ -khtml-transform: rotate(90deg);
1406
+ -moz-transform: rotate(90deg);
1407
+ -o-transform: rotate(90deg);
1408
+ -ms-transform: rotate(90deg);
1409
+ }
1410
+ 50% {
1411
+ transform: rotate(180deg);
1412
+ -webkit-transform: rotate(180deg);
1413
+ -khtml-transform: rotate(180deg);
1414
+ -moz-transform: rotate(180deg);
1415
+ -o-transform: rotate(180deg);
1416
+ -ms-transform: rotate(180deg);
1417
+ }
1418
+ 75% {
1419
+ transform: rotate(270deg);
1420
+ -webkit-transform: rotate(270deg);
1421
+ -khtml-transform: rotate(270deg);
1422
+ -moz-transform: rotate(270deg);
1423
+ -o-transform: rotate(270deg);
1424
+ -ms-transform: rotate(270deg);
1425
+ }
1426
+ 100% {
1427
+ transform: rotate(360deg);
1428
+ -webkit-transform: rotate(360deg);
1429
+ -khtml-transform: rotate(360deg);
1430
+ -moz-transform: rotate(360deg);
1431
+ -o-transform: rotate(360deg);
1432
+ -ms-transform: rotate(360deg);
1433
+ }
1434
+ }
1435
+ .menu-phone li ul.list-v {
1436
+ right: calc(100% - 0.5 * 16px);
1437
+ }
1438
+ .menu-phone li ul.list-v ul {
1439
+ right: calc(100% - 0.5 * 16px);
1440
+ }
1441
+ #wrapper {
1442
+ max-width: 1080px;
1443
+ margin: auto;
1444
+ }
1445
+ @media screen and (min-width: 2048px) {
1446
+ #wrapper {
1447
+ max-width: 55vw;
1448
+ }
1449
+ }
1450
+ #wrapper .menu {
1451
+ -webkit-box-flex: 1;
1452
+ -moz-box-flex: 1;
1453
+ -webkit-flex: 1 1;
1454
+ -ms-flex: 1 1;
1455
+ flex: 1 1;
1456
+ margin: 0 16px 0 0;
1457
+ }
1458
+ #wrapper .menu .list-v ul {
1459
+ left: calc(100% - 0.5 * 16px);
1460
+ }
1461
+ .menu-phone {
1462
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
1463
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
1464
+ display: none;
1465
+ margin-top: 16px;
1466
+ right: 8px;
1467
+ transition: all 0.28s ease;
1468
+ -webkit-transition: all 0.28s ease;
1469
+ -khtml-transition: all 0.28s ease;
1470
+ -moz-transition: all 0.28s ease;
1471
+ -o-transition: all 0.28s ease;
1472
+ -ms-transition: all 0.28s ease;
1473
+ }
1474
+ .menu-phone ul {
1475
+ right: calc(100% - 0.5 * 16px);
1476
+ }
1477
+ @media screen and (max-width: 500px) {
1478
+ .menu-phone {
1479
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
1480
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
1481
+ display: block;
1482
+ }
1483
+ }
1484
+ .l_header {
1485
+ max-width: 65vw;
1486
+ left: calc((100% - 65vw) * 0.5);
1487
+ border-bottom-left-radius: 8px;
1488
+ border-bottom-right-radius: 8px;
1489
+ }
1490
+ @media screen and (max-width: 2048px) {
1491
+ .l_header {
1492
+ max-width: 1112px;
1493
+ left: calc((100% - 1112px) * 0.5);
1494
+ }
1495
+ }
1496
+ @media screen and (max-width: 1112px) {
1497
+ .l_header {
1498
+ left: 0;
1499
+ border-radius: 0;
1500
+ -webkit-border-radius: 0;
1501
+ max-width: 100%;
1502
+ }
1503
+ }
1504
+ @media screen and (max-width: 500px) {
1505
+ .l_header .container {
1506
+ margin-left: 0;
1507
+ margin-right: 0;
1508
+ }
1509
+ .l_header #wrapper .nav-main .title {
1510
+ padding-left: 16px;
1511
+ padding-right: 16px;
1512
+ }
1513
+ .l_header #wrapper .nav-sub {
1514
+ width: 100%;
1515
+ }
1516
+ .l_header #wrapper .nav-sub .title {
1517
+ overflow-y: scroll;
1518
+ margin-top: 2px;
1519
+ padding: 8px 16px;
1520
+ }
1521
+ .l_header #wrapper .switcher {
1522
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
1523
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
1524
+ display: -ms-flexbox /* TWEENER - IE 10 */;
1525
+ display: -webkit-flex /* NEW - Chrome */;
1526
+ display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;
1527
+ display: flex;
1528
+ margin-right: 8px;
1529
+ }
1530
+ .l_header .menu {
1531
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
1532
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
1533
+ display: none;
1534
+ }
1535
+ }
1536
+ @media screen and (max-width: 500px) {
1537
+ .list-v li {
1538
+ max-width: 270px;
1539
+ }
1540
+ }
1541
+ #u-search {
1542
+ display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;
1543
+ display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;
1544
+ display: none;
1545
+ position: fixed;
1546
+ top: 0;
1547
+ left: 0;
1548
+ width: 100%;
1549
+ height: 100%;
1550
+ padding: 60px 20px;
1551
+ z-index: 1001;
1552
+ }
1553
+ @media screen and (max-width: 680px) {
1554
+ #u-search {
1555
+ padding: 0px;
1556
+ }
1557
+ }
1558
+
1559
+ </style>
1560
+ <link rel="stylesheet" href="/css/style.css" media="print" onload="this.media='all';this.onload=null">
1561
+ <noscript><link rel="stylesheet" href="/css/style.css"></noscript>
1562
+
1563
+ <script>
1564
+ if (/*@cc_on!@*/false || (!!window.MSInputMethodContext && !!document.documentMode))
1565
+ document.write(
1566
+ '<style>'+
1567
+ 'html{'+
1568
+ 'overflow-x: hidden !important;'+
1569
+ 'overflow-y: hidden !important;'+
1570
+ '}'+
1571
+ '.kill-ie{'+
1572
+ 'text-align:center;'+
1573
+ 'height: 100%;'+
1574
+ 'margin-top: 15%;'+
1575
+ 'margin-bottom: 5500%;'+
1576
+ '}'+
1577
+ '.kill-t{'+
1578
+ 'font-size: 2rem;'+
1579
+ '}'+
1580
+ '.kill-c{'+
1581
+ 'font-size: 1.2rem;'+
1582
+ '}'+
1583
+ '#l_header,#l_body{'+
1584
+ 'display: none;'+
1585
+ '}'+
1586
+ '</style>'+
1587
+ '<div class="kill-ie">'+
1588
+ `<span class="kill-t"><b>抱歉,您的浏览器无法访问本站</b></span><br/>`+
1589
+ `<span class="kill-c">微软已经于2016年终止了对 Internet Explorer (IE) 10 及更早版本的支持,<br/>继续使用存在极大的安全隐患,请使用当代主流的浏览器进行访问。</span><br/>`+
1590
+ `<a target="_blank" rel="noopener" href="https://blogs.windows.com/windowsexperience/2021/05/19/the-future-of-internet-explorer-on-windows-10-is-in-microsoft-edge/"><strong>了解详情 ></strong></a>`+
1591
+ '</div>');
1592
+ </script>
1593
+
1594
+
1595
+ <noscript>
1596
+ <style>
1597
+ html{
1598
+ overflow-x: hidden !important;
1599
+ overflow-y: hidden !important;
1600
+ }
1601
+ .kill-noscript{
1602
+ text-align:center;
1603
+ height: 100%;
1604
+ margin-top: 15%;
1605
+ margin-bottom: 5500%;
1606
+ }
1607
+ .kill-t{
1608
+ font-size: 2rem;
1609
+ }
1610
+ .kill-c{
1611
+ font-size: 1.2rem;
1612
+ }
1613
+ #l_header,#l_body{
1614
+ display: none;
1615
+ }
1616
+ </style>
1617
+ <div class="kill-noscript">
1618
+ <span class="kill-t"><b>抱歉,您的浏览器无法访问本站</b></span><br/>
1619
+ <span class="kill-c">本页面需要浏览器支持(启用)JavaScript</span><br/>
1620
+ <a target="_blank" rel="noopener" href="https://www.baidu.com/s?wd=启用JavaScript"><strong>了解详情 ></strong></a>
1621
+ </div>
1622
+ </noscript>
1623
+
1624
+
1625
+ <script>
1626
+ /************这个文件存放不需要重载的全局变量和全局函数*********/
1627
+ window.volantis = {}; // volantis 全局变量
1628
+ volantis.debug = "env"; // 调试模式
1629
+ volantis.dom = {}; // 页面Dom see: /source/js/app.js etc.
1630
+
1631
+ volantis.GLOBAL_CONFIG ={
1632
+ debug: "env",
1633
+ cdn: {"js":{"app":"/js/app.js","parallax":"/js/plugins/parallax.js","rightMenu":"/js/plugins/rightMenu.js","rightMenus":"/js/plugins/rightMenus.js","sites":"/js/plugins/tags/sites.js","friends":"/js/plugins/tags/friends.js","contributors":"/js/plugins/tags/contributors.js","search":"/js/search/hexo.js"},"css":{"style":"/css/style.css"}},
1634
+ default: {"avatar":"https://fastly.jsdelivr.net/npm/volantis-static/media/placeholder/avatar/round/3442075.svg","link":"https://fastly.jsdelivr.net/npm/volantis-static/media/placeholder/link/8f277b4ee0ecd.svg","cover":"https://fastly.jsdelivr.net/npm/volantis-static/media/placeholder/cover/76b86c0226ffd.svg","image":"https://fastly.jsdelivr.net/npm/volantis-static/media/placeholder/image/2659360.svg"},
1635
+ lastupdate: new Date(1702967652388),
1636
+ sidebar: {
1637
+ for_page: ["blogger","category","webinfo"],
1638
+ for_post: ["toc"],
1639
+ webinfo: {
1640
+ lastupd: {
1641
+ enable: true,
1642
+ friendlyShow: true
1643
+ },
1644
+ runtime: {
1645
+ data: "2022/08/05",
1646
+ unit: "天"
1647
+ }
1648
+ }
1649
+ },
1650
+ plugins: {
1651
+ message: {"enable":true,"css":"https://fastly.jsdelivr.net/npm/volantis-static/libs/izitoast/dist/css/iziToast.min.css","js":"https://fastly.jsdelivr.net/npm/volantis-static/libs/izitoast/dist/js/iziToast.min.js","icon":{"default":"fa-solid fa-info-circle light-blue","quection":"fa-solid fa-question-circle light-blue"},"time":{"default":5000,"quection":20000},"position":"topRight","transitionIn":"bounceInLeft","transitionOut":"fadeOutRight","titleColor":"var(--color-text)","messageColor":"var(--color-text)","backgroundColor":"var(--color-card)","zindex":2147483647,"copyright":{"enable":true,"title":"知识共享许可协议","message":"请遵守 CC BY-NC-SA 4.0 协议。","icon":"far fa-copyright light-blue"},"aplayer":{"enable":true,"play":"fa-solid fa-play","pause":"fa-solid fa-pause"},"rightmenu":{"enable":true,"notice":true}},
1652
+ fancybox: {"css":"https://fastly.jsdelivr.net/npm/volantis-static/libs/@fancyapps/ui/dist/fancybox.css","js":"https://fastly.jsdelivr.net/npm/volantis-static/libs/@fancyapps/ui/dist/fancybox.umd.js"},
1653
+
1654
+
1655
+
1656
+ }
1657
+ }
1658
+
1659
+ /******************** volantis.EventListener ********************************/
1660
+ // 事件监听器 see: /source/js/app.js
1661
+ volantis.EventListener = {}
1662
+ // 这里存放pjax切换页面时将被移除的事件监听器
1663
+ volantis.EventListener.list = []
1664
+ //构造方法
1665
+ function volantisEventListener(type, f, ele) {
1666
+ this.type = type
1667
+ this.f = f
1668
+ this.ele = ele
1669
+ }
1670
+ // 移除事件监听器
1671
+ volantis.EventListener.remove = () => {
1672
+ volantis.EventListener.list.forEach(function (i) {
1673
+ i.ele.removeEventListener(i.type, i.f, false)
1674
+ })
1675
+ volantis.EventListener.list = []
1676
+ }
1677
+ /******************** volantis.dom.$ ********************************/
1678
+ // 注:这里没有选择器,也没有forEach一次只处理一个dom,这里重新封装主题常用的dom方法,返回的是dom对象,对象包含了以下方法,同时保留dom的原生API
1679
+ function volantisDom(ele) {
1680
+ if (!ele) ele = document.createElement("div")
1681
+ this.ele = ele;
1682
+ // ==============================================================
1683
+ this.ele.find = (c) => {
1684
+ let q = this.ele.querySelector(c)
1685
+ if (q)
1686
+ return new volantisDom(q)
1687
+ }
1688
+ // ==============================================================
1689
+ this.ele.hasClass = (c) => {
1690
+ return this.ele.className.match(new RegExp('(\\s|^)' + c + '(\\s|$)'));
1691
+ }
1692
+ this.ele.addClass = (c) => {
1693
+ this.ele.classList.add(c);
1694
+ return this.ele
1695
+ }
1696
+ this.ele.removeClass = (c) => {
1697
+ this.ele.classList.remove(c);
1698
+ return this.ele
1699
+ }
1700
+ this.ele.toggleClass = (c) => {
1701
+ if (this.ele.hasClass(c)) {
1702
+ this.ele.removeClass(c)
1703
+ } else {
1704
+ this.ele.addClass(c)
1705
+ }
1706
+ return this.ele
1707
+ }
1708
+ // ==============================================================
1709
+ // 参数 r 为 true 表示pjax切换页面时事件监听器将被移除,false不移除
1710
+ this.ele.on = (c, f, r = 1) => {
1711
+ this.ele.addEventListener(c, f, false)
1712
+ if (r) {
1713
+ volantis.EventListener.list.push(new volantisEventListener(c, f, this.ele))
1714
+ }
1715
+ return this.ele
1716
+ }
1717
+ this.ele.click = (f, r) => {
1718
+ this.ele.on("click", f, r)
1719
+ return this.ele
1720
+ }
1721
+ this.ele.scroll = (f, r) => {
1722
+ this.ele.on("scroll", f, r)
1723
+ return this.ele
1724
+ }
1725
+ // ==============================================================
1726
+ this.ele.html = (c) => {
1727
+ // if(c=== undefined){
1728
+ // return this.ele.innerHTML
1729
+ // }else{
1730
+ this.ele.innerHTML = c
1731
+ return this.ele
1732
+ // }
1733
+ }
1734
+ // ==============================================================
1735
+ this.ele.hide = (c) => {
1736
+ this.ele.style.display = "none"
1737
+ return this.ele
1738
+ }
1739
+ this.ele.show = (c) => {
1740
+ this.ele.style.display = "block"
1741
+ return this.ele
1742
+ }
1743
+ // ==============================================================
1744
+ return this.ele
1745
+ }
1746
+ volantis.dom.$ = (ele) => {
1747
+ return !!ele ? new volantisDom(ele) : null;
1748
+ }
1749
+ /******************** RunItem ********************************/
1750
+ function RunItem() {
1751
+ this.list = []; // 存放回调函数
1752
+ this.start = () => {
1753
+ for (var i = 0; i < this.list.length; i++) {
1754
+ this.list[i].run();
1755
+ }
1756
+ };
1757
+ this.push = (fn, name, setRequestAnimationFrame = true) => {
1758
+ let myfn = fn
1759
+ if (setRequestAnimationFrame) {
1760
+ myfn = ()=>{
1761
+ volantis.requestAnimationFrame(fn)
1762
+ }
1763
+ }
1764
+ var f = new Item(myfn, name);
1765
+ this.list.push(f);
1766
+ };
1767
+ this.remove = (name) =>{
1768
+ for (let index = 0; index < this.list.length; index++) {
1769
+ const e = this.list[index];
1770
+ if (e.name == name) {
1771
+ this.list.splice(index,1);
1772
+ }
1773
+ }
1774
+ }
1775
+ // 构造一个可以run的对象
1776
+ function Item(fn, name) {
1777
+ // 函数名称
1778
+ this.name = name || fn.name;
1779
+ // run方法
1780
+ this.run = () => {
1781
+ try {
1782
+ fn()
1783
+ } catch (error) {
1784
+ console.log(error);
1785
+ }
1786
+ };
1787
+ }
1788
+ }
1789
+ /******************** Pjax ********************************/
1790
+ // /layout/_plugins/pjax/index.ejs
1791
+ // volantis.pjax.send(callBack[,"callBackName"]) 传入pjax:send回调函数
1792
+ // volantis.pjax.push(callBack[,"callBackName"]) 传入pjax:complete回调函数
1793
+ // volantis.pjax.error(callBack[,"callBackName"]) 传入pjax:error回调函数
1794
+ volantis.pjax = {};
1795
+ volantis.pjax.method = {
1796
+ complete: new RunItem(),
1797
+ error: new RunItem(),
1798
+ send: new RunItem(),
1799
+ };
1800
+ volantis.pjax = Object.assign(volantis.pjax, {
1801
+ push: volantis.pjax.method.complete.push,
1802
+ error: volantis.pjax.method.error.push,
1803
+ send: volantis.pjax.method.send.push,
1804
+ });
1805
+ /******************** RightMenu ********************************/
1806
+ // volantis.rightmenu.handle(callBack[,"callBackName"]) 外部菜单项控制
1807
+ // 可在 volantis.mouseEvent 处获取右键事件
1808
+ volantis.rightmenu = {};
1809
+ volantis.rightmenu.method = {
1810
+ handle: new RunItem(),
1811
+ }
1812
+ volantis.rightmenu = Object.assign(volantis.rightmenu, {
1813
+ handle: volantis.rightmenu.method.handle.push,
1814
+ });
1815
+ /******************** Dark Mode ********************************/
1816
+ // /layout/_partial/scripts/darkmode.ejs
1817
+ // volantis.dark.mode 当前模式 dark or light
1818
+ // volantis.dark.toggle() 暗黑模式触发器
1819
+ // volantis.dark.push(callBack[,"callBackName"]) 传入触发器回调函数
1820
+ volantis.dark = {};
1821
+ volantis.dark.method = {
1822
+ toggle: new RunItem(),
1823
+ };
1824
+ volantis.dark = Object.assign(volantis.dark, {
1825
+ push: volantis.dark.method.toggle.push,
1826
+ });
1827
+ /******************** Message ********************************/
1828
+ // VolantisApp.message
1829
+ /******************** isMobile ********************************/
1830
+ // /source/js/app.js
1831
+ // volantis.isMobile
1832
+ // volantis.isMobileOld
1833
+ /********************脚本动态加载函数********************************/
1834
+ // volantis.js(src, cb) cb 可以传入onload回调函数 或者 JSON对象 例如: volantis.js("src", ()=>{}) 或 volantis.js("src", {defer:true,onload:()=>{}})
1835
+ // volantis.css(src)
1836
+
1837
+ // 返回Promise对象,如下方法同步加载资源,这利于处理文件资源之间的依赖关系,例如:APlayer 需要在 MetingJS 之前加载
1838
+ // (async () => {
1839
+ // await volantis.js("...theme.plugins.aplayer.js.aplayer...")
1840
+ // await volantis.js("...theme.plugins.aplayer.js.meting...")
1841
+ // })();
1842
+
1843
+ // 已经加入了setTimeout
1844
+ volantis.js = (src, cb) => {
1845
+ return new Promise(resolve => {
1846
+ setTimeout(function () {
1847
+ var HEAD = document.getElementsByTagName("head")[0] || document.documentElement;
1848
+ var script = document.createElement("script");
1849
+ script.setAttribute("type", "text/javascript");
1850
+ if (cb) {
1851
+ if (JSON.stringify(cb)) {
1852
+ for (let p in cb) {
1853
+ if (p == "onload") {
1854
+ script[p] = () => {
1855
+ cb[p]()
1856
+ resolve()
1857
+ }
1858
+ } else {
1859
+ script[p] = cb[p]
1860
+ script.onload = resolve
1861
+ }
1862
+ }
1863
+ } else {
1864
+ script.onload = () => {
1865
+ cb()
1866
+ resolve()
1867
+ };
1868
+ }
1869
+ } else {
1870
+ script.onload = resolve
1871
+ }
1872
+ script.setAttribute("src", src);
1873
+ HEAD.appendChild(script);
1874
+ });
1875
+ });
1876
+ }
1877
+ volantis.css = (src) => {
1878
+ return new Promise(resolve => {
1879
+ setTimeout(function () {
1880
+ var link = document.createElement('link');
1881
+ link.rel = "stylesheet";
1882
+ link.href = src;
1883
+ link.onload = resolve;
1884
+ document.getElementsByTagName("head")[0].appendChild(link);
1885
+ });
1886
+ });
1887
+ }
1888
+ /********************按需加载的插件********************************/
1889
+ // volantis.import.jQuery().then(()=>{})
1890
+ volantis.import = {
1891
+ jQuery: () => {
1892
+ if (typeof jQuery == "undefined") {
1893
+ return volantis.js("https://fastly.jsdelivr.net/npm/volantis-static/libs/jquery/dist/jquery.min.js")
1894
+ } else {
1895
+ return new Promise(resolve => {
1896
+ resolve()
1897
+ });
1898
+ }
1899
+ }
1900
+ }
1901
+ /********************** requestAnimationFrame ********************************/
1902
+ // 1、requestAnimationFrame 会把每一帧中的所有 DOM 操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时间间隔紧紧跟随浏览器的刷新频率,一般来说,这个频率为每秒60帧。
1903
+ // 2、在隐藏或不可见的元素中,requestAnimationFrame 将不会进行重绘或回流,这当然就意味着更少的的 cpu,gpu 和内存使用量。
1904
+ volantis.requestAnimationFrame = (fn)=>{
1905
+ if (!window.requestAnimationFrame) {
1906
+ window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame;
1907
+ }
1908
+ window.requestAnimationFrame(fn)
1909
+ }
1910
+ /************************ layoutHelper *****************************************/
1911
+ volantis.layoutHelper = (helper, html, opt)=>{
1912
+ opt = Object.assign({clean:false, pjax:true}, opt)
1913
+ function myhelper(helper, html, clean) {
1914
+ volantis.tempDiv = document.createElement("div");
1915
+ volantis.tempDiv.innerHTML = html;
1916
+ let layoutHelper = document.querySelector("#layoutHelper-"+helper)
1917
+ if (layoutHelper) {
1918
+ if (clean) {
1919
+ layoutHelper.innerHTML = ""
1920
+ }
1921
+ layoutHelper.append(volantis.tempDiv);
1922
+ }
1923
+ }
1924
+ myhelper(helper, html, opt.clean)
1925
+ if (opt.pjax) {
1926
+ volantis.pjax.push(()=>{
1927
+ myhelper(helper, html, opt.clean)
1928
+ },"layoutHelper-"+helper)
1929
+ }
1930
+ }
1931
+ /****************************** 滚动事件处理 ****************************************/
1932
+ volantis.scroll = {
1933
+ engine: new RunItem(),
1934
+ unengine: new RunItem(),
1935
+ };
1936
+ volantis.scroll = Object.assign(volantis.scroll, {
1937
+ push: volantis.scroll.engine.push,
1938
+ });
1939
+ // 滚动条距离顶部的距离
1940
+ volantis.scroll.getScrollTop = () =>{
1941
+ let scrollPos;
1942
+ if (window.pageYOffset) {
1943
+ scrollPos = window.pageYOffset;
1944
+ } else if (document.compatMode && document.compatMode != 'BackCompat') {
1945
+ scrollPos = document.documentElement.scrollTop;
1946
+ } else if (document.body) {
1947
+ scrollPos = document.body.scrollTop;
1948
+ }
1949
+ return scrollPos;
1950
+ }
1951
+ // 使用 requestAnimationFrame 处理滚动事件
1952
+ // `volantis.scroll.del` 中存储了一个数值, 该数值检测一定时间间隔内滚动条滚动的位移, 数值的检测频率是浏览器的刷新频率. 数值为正数时, 表示向下滚动. 数值为负数时, 表示向上滚动.
1953
+ volantis.scroll.handleScrollEvents = () => {
1954
+ volantis.scroll.lastScrollTop = volantis.scroll.getScrollTop()
1955
+ function loop() {
1956
+ const scrollTop = volantis.scroll.getScrollTop();
1957
+ if (volantis.scroll.lastScrollTop !== scrollTop) {
1958
+ volantis.scroll.del = scrollTop - volantis.scroll.lastScrollTop;
1959
+ volantis.scroll.lastScrollTop = scrollTop;
1960
+ // if (volantis.scroll.del > 0) {
1961
+ // console.log("向下滚动");
1962
+ // } else {
1963
+ // console.log("向上滚动");
1964
+ // }
1965
+ // 注销过期的unengine未滚动事件
1966
+ volantis.scroll.unengine.list=[]
1967
+ volantis.scroll.engine.start();
1968
+ }else{
1969
+ volantis.scroll.unengine.start();
1970
+ }
1971
+ volantis.requestAnimationFrame(loop)
1972
+ }
1973
+ volantis.requestAnimationFrame(loop)
1974
+ }
1975
+ volantis.scroll.handleScrollEvents()
1976
+ volantis.scroll.ele = null;
1977
+ // 触发页面滚动至目标元素位置
1978
+ volantis.scroll.to = (ele, option = {}) => {
1979
+ if (!ele) return;
1980
+ volantis.scroll.ele = ele;
1981
+ // 默认配置
1982
+ opt = {
1983
+ top: ele.getBoundingClientRect().top + document.documentElement.scrollTop,
1984
+ behavior: "smooth"
1985
+ }
1986
+ // 定义配置
1987
+ if ("top" in option) {
1988
+ opt.top = option.top
1989
+ }
1990
+ if ("behavior" in option) {
1991
+ opt.behavior = option.behavior
1992
+ }
1993
+ if ("addTop" in option) {
1994
+ opt.top += option.addTop
1995
+ }
1996
+ if (!("observerDic" in option)) {
1997
+ option.observerDic = 100
1998
+ }
1999
+ // 滚动
2000
+ window.scrollTo(opt);
2001
+ // 监视器
2002
+ // 监视并矫正元素滚动到指定位置
2003
+ // 用于处理 lazyload 引起的 cls 导致的定位失败问题
2004
+ // option.observer = false
2005
+ if (option.observer) {
2006
+ setTimeout(() => {
2007
+ if (volantis.scroll.ele != ele) {
2008
+ return
2009
+ }
2010
+ volantis.scroll.unengine.push(() => {
2011
+ let me = ele.getBoundingClientRect().top
2012
+ if(!(me >= -option.observerDic && me <= option.observerDic)){
2013
+ volantis.scroll.to(ele, option)
2014
+ }
2015
+ volantis.scroll.unengine.remove("unengineObserver")
2016
+ },"unengineObserver")
2017
+ },1000)
2018
+ }
2019
+ }
2020
+ /********************** Content Visibility ********************************/
2021
+ // 见 source/css/first.styl 如果遇到任何问题 删除 .post-story 即可
2022
+ // 一个元素被声明 content-visibility 属性后 如果元素不在 viewport 中 浏览器不会计算其后代元素样式和属性 从而节省 Style & Layout 耗时
2023
+ // content-visibility 的副作用: 锚点失效 等等(实验初期 暂不明确), 使用此方法清除样式
2024
+ volantis.cleanContentVisibility = ()=>{
2025
+ if (document.querySelector(".post-story")) {
2026
+ console.log("cleanContentVisibility");
2027
+ document.querySelectorAll(".post-story").forEach(e=>{
2028
+ e.classList.remove("post-story")
2029
+ })
2030
+ }
2031
+ }
2032
+ /******************************************************************************/
2033
+ /******************************************************************************/
2034
+ /******************************************************************************/
2035
+ //图像加载出错时的处理
2036
+ function errorImgAvatar(img) {
2037
+ img.src = "https://fastly.jsdelivr.net/npm/volantis-static/media/placeholder/avatar/round/3442075.svg";
2038
+ img.onerror = null;
2039
+ }
2040
+ function errorImgCover(img) {
2041
+ img.src = "https://fastly.jsdelivr.net/npm/volantis-static/media/placeholder/cover/76b86c0226ffd.svg";
2042
+ img.onerror = null;
2043
+ }
2044
+ /******************************************************************************/
2045
+ </script>
2046
+
2047
+ <!-- import head_end begin -->
2048
+ <!-- import head_end end -->
2049
+ <!-- Custom Files headEnd begin-->
2050
+
2051
+ <!-- Custom Files headEnd end-->
2052
+ <!-- front-matter head_end begin -->
2053
+ <!-- front-matter head_end end -->
2054
+ </head>
2055
+ <body itemscope itemtype="http://schema.org/WebPage">
2056
+ <!-- import body_begin begin-->
2057
+ <!-- import body_begin end-->
2058
+ <!-- Custom Files bodyBegin begin-->
2059
+
2060
+ <!-- Custom Files bodyBegin end-->
2061
+ <!-- front-matter body_begin begin -->
2062
+ <!-- front-matter body_begin end -->
2063
+ <header itemscope itemtype="http://schema.org/WPHeader" id="l_header" class="l_header auto shadow floatable blur " style='opacity: 0' >
2064
+ <div class='container'>
2065
+ <div id='wrapper'>
2066
+ <div class='nav-sub'>
2067
+ <p class="title"></p>
2068
+ <ul class='switcher nav-list-h m-phone' id="pjax-header-nav-list">
2069
+ <li><a id="s-comment" class="fa-solid fa-comments fa-fw" target="_self" href="/" onclick="return false;" title="comment"></a></li>
2070
+
2071
+ </ul>
2072
+ </div>
2073
+ <div class="nav-main">
2074
+
2075
+
2076
+ <a class="title flat-box" target="_self" href='/'>
2077
+
2078
+
2079
+
2080
+ Mlikiowa
2081
+
2082
+ </a>
2083
+
2084
+
2085
+ <div class='menu navigation'>
2086
+ <ul class='nav-list-h m-pc'>
2087
+
2088
+
2089
+
2090
+
2091
+
2092
+ <li>
2093
+ <a class="menuitem flat-box faa-parent animated-hover"
2094
+ href="/" title="博客"
2095
+
2096
+
2097
+
2098
+ active-action="action-home"
2099
+ >
2100
+ <i class='fa-solid fa-rss fa-fw'></i>博客
2101
+ </a>
2102
+
2103
+ </li>
2104
+
2105
+
2106
+
2107
+
2108
+
2109
+ <li>
2110
+ <a class="menuitem flat-box faa-parent animated-hover"
2111
+ href="/categories/" title="分类"
2112
+
2113
+
2114
+
2115
+ active-action="action-categories"
2116
+ >
2117
+ <i class='fa-solid fa-folder-open fa-fw'></i>分类
2118
+ </a>
2119
+
2120
+ </li>
2121
+
2122
+
2123
+
2124
+
2125
+
2126
+ <li>
2127
+ <a class="menuitem flat-box faa-parent animated-hover"
2128
+ href="/tags/" title="标签"
2129
+
2130
+
2131
+
2132
+ active-action="action-tags"
2133
+ >
2134
+ <i class='fa-solid fa-tags fa-fw'></i>标签
2135
+ </a>
2136
+
2137
+ </li>
2138
+
2139
+
2140
+
2141
+
2142
+
2143
+ <li>
2144
+ <a class="menuitem flat-box faa-parent animated-hover"
2145
+ href="/archives/" title="归档"
2146
+
2147
+
2148
+
2149
+ active-action="action-archives"
2150
+ >
2151
+ <i class='fa-solid fa-archive fa-fw'></i>归档
2152
+ </a>
2153
+
2154
+ </li>
2155
+
2156
+
2157
+
2158
+
2159
+
2160
+ <li>
2161
+ <a class="menuitem flat-box faa-parent animated-hover"
2162
+ href="/friends/" title="友链"
2163
+
2164
+
2165
+
2166
+ active-action="action-friends"
2167
+ >
2168
+ <i class='fa-solid fa-link fa-fw'></i>友链
2169
+ </a>
2170
+
2171
+ </li>
2172
+
2173
+
2174
+
2175
+
2176
+
2177
+ <li>
2178
+ <a class="menuitem flat-box faa-parent animated-hover"
2179
+ href="/about/" title="关于"
2180
+
2181
+
2182
+
2183
+ active-action="action-about"
2184
+ >
2185
+ <i class='fa-solid fa-info-circle fa-fw'></i>关于
2186
+ </a>
2187
+
2188
+ </li>
2189
+
2190
+
2191
+
2192
+ </ul>
2193
+ </div>
2194
+
2195
+ <div class="m_search">
2196
+ <form name="searchform" class="form u-search-form">
2197
+ <i class="icon fa-solid fa-search fa-fw"></i>
2198
+ <input type="text" class="input u-search-input" placeholder="Search..." />
2199
+ </form>
2200
+ </div>
2201
+
2202
+
2203
+ <ul class='switcher nav-list-h m-phone'>
2204
+
2205
+ <li><a class="s-search fa-solid fa-search fa-fw" target="_self" href="/" onclick="return false;" title="search"></a></li>
2206
+
2207
+ <li>
2208
+ <a class="s-menu fa-solid fa-bars fa-fw" target="_self" href="/" onclick="return false;" title="menu"></a>
2209
+ <ul class="menu-phone list-v navigation white-box">
2210
+
2211
+
2212
+
2213
+ <li>
2214
+ <a class="menuitem flat-box faa-parent animated-hover"
2215
+ href="/" title="博客"
2216
+
2217
+
2218
+
2219
+ active-action="action-home"
2220
+ >
2221
+ <i class='fa-solid fa-rss fa-fw'></i>博客
2222
+ </a>
2223
+
2224
+ </li>
2225
+
2226
+
2227
+
2228
+
2229
+
2230
+ <li>
2231
+ <a class="menuitem flat-box faa-parent animated-hover"
2232
+ href="/categories/" title="分类"
2233
+
2234
+
2235
+
2236
+ active-action="action-categories"
2237
+ >
2238
+ <i class='fa-solid fa-folder-open fa-fw'></i>分类
2239
+ </a>
2240
+
2241
+ </li>
2242
+
2243
+
2244
+
2245
+
2246
+
2247
+ <li>
2248
+ <a class="menuitem flat-box faa-parent animated-hover"
2249
+ href="/tags/" title="标签"
2250
+
2251
+
2252
+
2253
+ active-action="action-tags"
2254
+ >
2255
+ <i class='fa-solid fa-tags fa-fw'></i>标签
2256
+ </a>
2257
+
2258
+ </li>
2259
+
2260
+
2261
+
2262
+
2263
+
2264
+ <li>
2265
+ <a class="menuitem flat-box faa-parent animated-hover"
2266
+ href="/archives/" title="归档"
2267
+
2268
+
2269
+
2270
+ active-action="action-archives"
2271
+ >
2272
+ <i class='fa-solid fa-archive fa-fw'></i>归档
2273
+ </a>
2274
+
2275
+ </li>
2276
+
2277
+
2278
+
2279
+
2280
+
2281
+ <li>
2282
+ <a class="menuitem flat-box faa-parent animated-hover"
2283
+ href="/friends/" title="友链"
2284
+
2285
+
2286
+
2287
+ active-action="action-friends"
2288
+ >
2289
+ <i class='fa-solid fa-link fa-fw'></i>友链
2290
+ </a>
2291
+
2292
+ </li>
2293
+
2294
+
2295
+
2296
+
2297
+
2298
+ <li>
2299
+ <a class="menuitem flat-box faa-parent animated-hover"
2300
+ href="/about/" title="关于"
2301
+
2302
+
2303
+
2304
+ active-action="action-about"
2305
+ >
2306
+ <i class='fa-solid fa-info-circle fa-fw'></i>关于
2307
+ </a>
2308
+
2309
+ </li>
2310
+
2311
+
2312
+
2313
+ </ul>
2314
+ </li>
2315
+ </ul>
2316
+
2317
+ <!-- Custom Files header begin -->
2318
+
2319
+ <!-- Custom Files header end -->
2320
+ </div>
2321
+ </div>
2322
+ </div>
2323
+ </header>
2324
+
2325
+ <div id="l_body">
2326
+ <div id="l_cover">
2327
+
2328
+
2329
+ <!-- see: /layout/_partial/scripts/_ctrl/coverCtrl.ejs -->
2330
+ <div id="half" class='cover-wrapper docs search' style="display: ;">
2331
+
2332
+ <div class='cover-bg lazyload placeholder' data-bg="https://picst.sunbangyan.cn/2023/12/19/e1a85b7ffee8beef520ef52df5c296da.jpeg"></div>
2333
+
2334
+ <div class='cover-body'>
2335
+ <div class='top'>
2336
+
2337
+
2338
+ <p class="title">Mlikiowa Home Village</p>
2339
+
2340
+
2341
+ </div>
2342
+ <div class='bottom'>
2343
+
2344
+ <div class="m_search">
2345
+ <form name="searchform" class="form u-search-form">
2346
+ <input type="text" class="input u-search-input" placeholder="A Wonderful Theme for Hexo" />
2347
+ <i class="icon fa-solid fa-search fa-fw"></i>
2348
+ </form>
2349
+ </div>
2350
+
2351
+ <div class='menu navigation'>
2352
+ <div class='list-h'>
2353
+
2354
+
2355
+ <a href="/"
2356
+
2357
+
2358
+ active-action="action-home">
2359
+ <p>博客</p>
2360
+ </a>
2361
+
2362
+ <a href="/categories/"
2363
+
2364
+
2365
+ target="_self"
2366
+
2367
+ active-action="action-categories">
2368
+ <p>分类</p>
2369
+ </a>
2370
+
2371
+ <a href="/tags/"
2372
+
2373
+
2374
+ active-action="action-tags">
2375
+ <p>标签</p>
2376
+ </a>
2377
+
2378
+ <a href="/archives/"
2379
+
2380
+
2381
+ active-action="action-archives">
2382
+ <p>归档</p>
2383
+ </a>
2384
+
2385
+ <a href="/friends/"
2386
+
2387
+
2388
+ active-action="action-friends">
2389
+ <p>友链</p>
2390
+ </a>
2391
+
2392
+ <a href="/about/"
2393
+
2394
+
2395
+ active-action="action-about">
2396
+ <p>关于</p>
2397
+ </a>
2398
+
2399
+
2400
+ </div>
2401
+ </div>
2402
+ </div>
2403
+ </div>
2404
+
2405
+ <div id="scroll-down" style="display: none;"><i class="fa fa-chevron-down scroll-down-effects"></i></div>
2406
+ </div>
2407
+
2408
+
2409
+ </div>
2410
+
2411
+ <div id="safearea">
2412
+ <div class="body-wrapper">
2413
+
2414
+ <div id="l_main" class=' no_sidebar'>
2415
+ <article itemscope itemtype="http://schema.org/Article" class="article post white-box reveal md shadow floatable blur article-type-docs" id="docs" itemscope itemprop="blogPost">
2416
+ <link itemprop="mainEntityOfPage" href="https://nanaeo.cn/about/index.html">
2417
+ <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
2418
+ <meta itemprop="name" content="Village">
2419
+ </span>
2420
+ <span hidden itemprop="post" itemscope itemtype="http://schema.org/Post">
2421
+ <meta itemprop="name" content="Village">
2422
+ <meta itemprop="description" content="It is a little blog~">
2423
+ </span>
2424
+
2425
+
2426
+
2427
+
2428
+ <span hidden>
2429
+ <meta itemprop="image" content="https://fastly.jsdelivr.net/npm/volantis-static/media/org.volantis/blog/favicon/android-chrome-192x192.png">
2430
+ </span>
2431
+
2432
+ <div class="article-meta" id="top">
2433
+
2434
+
2435
+
2436
+ <span hidden itemprop="name headline">
2437
+
2438
+ </span>
2439
+
2440
+ </div>
2441
+
2442
+
2443
+ <div id="layoutHelper-page-plugins"></div>
2444
+ <div id="post-body" itemprop="articleBody">
2445
+ <div class="story post-story"><h2 id="Hi-I’m-Mlikiowa"><a href="#Hi-I’m-Mlikiowa" class="headerlink" title="Hi, I’m Mlikiowa!"></a>Hi, I’m Mlikiowa!</h2><p>是一位正在创作与做出改变的大学生,正在思考着知识与生活,并且为此刻而庆幸着…</p>
2446
+ </div><div class="story post-story"><h2 id="Exp"><a href="#Exp" class="headerlink" title="Exp"></a>Exp</h2><div class="timeline"><div class="timenode"><div class="meta"><p><p>Previous</p>
2447
+ </p></div><div class="body"><p>与Ghost在System游玩,Win酱还是Win7的样子。</p></div></div>
2448
+ <div class="timenode"><div class="meta"><p><p>2015</p>
2449
+ </p></div><div class="body"><p>在Win10萌芽的时代,遇见CoolQ后咱变成了一位开发者.</p></div></div>
2450
+ <div class="timenode"><div class="meta"><p><p>2016</p>
2451
+ </p></div><div class="body"><p>时间过去一年,我知道我不会一直待在这个圈子里面,于是很快我直接脱离了Plugins的开发,<br>开始开发桌面软件,并尝试着运营,结果是必然失败的,年纪 经济 技术都在限制着发挥。</p></div></div>
2452
+ <div class="timenode"><div class="meta"><p><p>2017</p>
2453
+ </p></div><div class="body"><p>在这个年份,基于TencentQQ 和 Http1.1的协议研究,对我影响巨大,<br>借此契机我学习了大量前端知识(IE tester甚至还可以运行),贴吧火热的年代总是牛人出没,因此我同年参与大型IM设计,负责部分协议的完成。</p></div></div>
2454
+ <div class="timenode"><div class="meta"><p><p>2018</p>
2455
+ </p></div><div class="body"><p>前端知识基础之上缺少web开发使我迫切的接触了PHP,同时补习了CPP开发经验,并开发桌面动态壁纸项目等较成熟项目</p></div></div>
2456
+ <div class="timenode"><div class="meta"><p><p>2019</p>
2457
+ </p></div><div class="body"><p>在初中毕业前的学习到此为止,我那一年开始写博客,并且了解WEB渗透知识</p></div></div>
2458
+ <div class="timenode"><div class="meta"><p><p>2020</p>
2459
+ </p></div><div class="body"><p>高中忙忙碌碌的自己,完成了某网站的项目,Linux开始频繁出现在我的眼前<br>这一年对图形编程有所提高,审美提高,但是核心技术部分未有较大突破。</p></div></div>
2460
+ <div class="timenode"><div class="meta"><p><p>2021</p>
2461
+ </p></div><div class="body"><p>这年因高中学业为主,是站长的生活而非一个有理想的开发者,severless等新技术出现在眼前告诉着我众多新技术诞生,我开始尝试各种新技术新方案<br>巨大的收获是开始活跃于开源平台.</p></div></div>
2462
+ <div class="timenode"><div class="meta"><p><p>2022</p>
2463
+ </p></div><div class="body"><p>学习Python与Nodejs</p></div></div></div>
2464
+
2465
+
2466
+ </div>
2467
+ </div>
2468
+
2469
+
2470
+
2471
+ <div class='footer'>
2472
+ <!-- 参考资料、相关资料等 -->
2473
+
2474
+ <!-- 相关文章 -->
2475
+
2476
+ <!-- 版权声明组件 -->
2477
+
2478
+ <!-- 打赏组件 -->
2479
+
2480
+ </div>
2481
+
2482
+
2483
+
2484
+
2485
+
2486
+ <div class='article-meta' id="bottom">
2487
+ <div class='new-meta-box'>
2488
+
2489
+ </div>
2490
+ <!-- Custom Files bottomMeta begin -->
2491
+
2492
+ <!-- Custom Files bottomMeta end -->
2493
+ </div>
2494
+
2495
+
2496
+
2497
+
2498
+
2499
+
2500
+ <!-- Custom Files postEnd begin-->
2501
+
2502
+ <!-- Custom Files postEnd end-->
2503
+ </article>
2504
+
2505
+
2506
+
2507
+
2508
+
2509
+ <article class="post white-box shadow floatable blur" id="comments">
2510
+ <span hidden>
2511
+ <meta itemprop="discussionUrl" content="/about/index.html#comments">
2512
+ </span>
2513
+ <p ct><i class='fa-solid fa-comments'></i> 评论</p>
2514
+
2515
+
2516
+ <div id="layoutHelper-comments"></div>
2517
+
2518
+ </article>
2519
+
2520
+
2521
+
2522
+
2523
+
2524
+
2525
+ </div>
2526
+ <aside id='l_side' itemscope itemtype="http://schema.org/WPSideBar">
2527
+
2528
+
2529
+
2530
+ <div class="widget-sticky pjax">
2531
+
2532
+ </div>
2533
+
2534
+
2535
+ <!-- 没有 pjax 占位会报错 万恶的 pjax -->
2536
+
2537
+ <div class="pjax">
2538
+ <!-- pjax占位 -->
2539
+ </div>
2540
+
2541
+ <div class="pjax">
2542
+ <!-- pjax占位 -->
2543
+ </div>
2544
+
2545
+ <div class="pjax">
2546
+ <!-- pjax占位 -->
2547
+ </div>
2548
+
2549
+ <div class="pjax">
2550
+ <!-- pjax占位 -->
2551
+ </div>
2552
+
2553
+ <div class="pjax">
2554
+ <!-- pjax占位 -->
2555
+ </div>
2556
+
2557
+ <div class="pjax">
2558
+ <!-- pjax占位 -->
2559
+ </div>
2560
+
2561
+ <div class="pjax">
2562
+ <!-- pjax占位 -->
2563
+ </div>
2564
+
2565
+ <div class="pjax">
2566
+ <!-- pjax占位 -->
2567
+ </div>
2568
+
2569
+ <!-- Custom Files side begin -->
2570
+
2571
+ <!-- Custom Files side end -->
2572
+ </aside>
2573
+
2574
+
2575
+
2576
+ <!--此文件用来存放一些不方便取值的变量-->
2577
+ <!--思路大概是将值藏到重加载的区域内-->
2578
+
2579
+ <pjax>
2580
+ <script>
2581
+ window.pdata={}
2582
+ pdata.ispage=false;
2583
+ pdata.commentPath="";
2584
+ pdata.commentPlaceholder="";
2585
+ pdata.commentConfig={};
2586
+ // see: /layout/_partial/scripts/_ctrl/coverCtrl.ejs
2587
+
2588
+ // header
2589
+ var l_header=document.getElementById("l_header");
2590
+
2591
+ l_header.classList.remove("show");
2592
+
2593
+
2594
+ // cover
2595
+ var cover_wrapper=document.querySelector('#l_cover .cover-wrapper');
2596
+ var scroll_down=document.getElementById('scroll-down');
2597
+ cover_wrapper.id="half";
2598
+ cover_wrapper.style.display="";
2599
+ scroll_down.style.display="none";
2600
+
2601
+
2602
+ </script>
2603
+ </pjax>
2604
+ </div>
2605
+
2606
+
2607
+ <footer class="footer clearfix" itemscope itemtype="http://schema.org/WPFooter">
2608
+ <br><br>
2609
+
2610
+
2611
+ <div class='copyright'>
2612
+ <p>⌘ Hexo With Volantis</p>
2613
+
2614
+ </div>
2615
+
2616
+
2617
+ <!-- Custom Files footer begin-->
2618
+
2619
+ <!-- Custom Files footer end-->
2620
+ </footer>
2621
+
2622
+
2623
+ <a id="s-top" class="fa-solid fa-arrow-up fa-fw" href="/" onclick="return false;" title="top"></a>
2624
+ </div>
2625
+ </div>
2626
+ <div>
2627
+ <script>
2628
+ /******************** volantis.dom ********************************/
2629
+ // 页面选择器 将dom对象缓存起来 see: /source/js/app.js etc.
2630
+ volantis.dom.bodyAnchor = volantis.dom.$(document.getElementById("safearea")); // 页面主体
2631
+ volantis.dom.topBtn = volantis.dom.$(document.getElementById('s-top')); // 向上
2632
+ volantis.dom.wrapper = volantis.dom.$(document.getElementById('wrapper')); // 整个导航栏
2633
+ volantis.dom.coverAnchor = volantis.dom.$(document.querySelector('#l_cover .cover-wrapper')); // 1个
2634
+ volantis.dom.switcher = volantis.dom.$(document.querySelector('#l_header .switcher .s-search')); // 搜索按钮 移动端 1个
2635
+ volantis.dom.header = volantis.dom.$(document.getElementById('l_header')); // 移动端导航栏
2636
+ volantis.dom.search = volantis.dom.$(document.querySelector('#l_header .m_search')); // 搜索框 桌面端 移动端 1个
2637
+ volantis.dom.mPhoneList = volantis.dom.$(document.querySelectorAll('#l_header .m-phone .list-v')); // 手机端 子菜单 多个
2638
+ </script>
2639
+
2640
+ <script>
2641
+
2642
+ volantis.css("https://fastly.jsdelivr.net/npm/volantis-static/libs/@fortawesome/fontawesome-free/css/all.min.css");
2643
+
2644
+
2645
+
2646
+ </script>
2647
+
2648
+ <!-- required -->
2649
+
2650
+
2651
+ <!-- internal -->
2652
+
2653
+ <script src="/js/app.js"></script>
2654
+
2655
+
2656
+
2657
+
2658
+
2659
+
2660
+ <!-- rightmenu要在darkmode之前(ToggleButton) darkmode要在comments之前(volantis.dark.push)-->
2661
+
2662
+
2663
+
2664
+ <script>
2665
+ function loadIssuesJS() {
2666
+
2667
+ const sites_api = document.getElementById('sites-api');
2668
+ if (sites_api != undefined && typeof SitesJS === 'undefined') {
2669
+ volantis.js("/js/plugins/tags/sites.js")
2670
+ }
2671
+
2672
+
2673
+ const friends_api = document.getElementById('friends-api');
2674
+ if (friends_api != undefined && typeof FriendsJS === 'undefined') {
2675
+ volantis.js("/js/plugins/tags/friends.js")
2676
+ }
2677
+
2678
+
2679
+ const contributors_api = document.getElementById('contributors-api');
2680
+ if (contributors_api != undefined && typeof ContributorsJS === 'undefined') {
2681
+ volantis.js("/js/plugins/tags/contributors.js")
2682
+ }
2683
+
2684
+ };
2685
+ loadIssuesJS()
2686
+ volantis.pjax.push(()=>{
2687
+ loadIssuesJS();
2688
+ })
2689
+
2690
+ </script>
2691
+
2692
+
2693
+
2694
+
2695
+ <script defer src="https://fastly.jsdelivr.net/npm/volantis-static/libs/vanilla-lazyload/dist/lazyload.min.js"></script>
2696
+ <script>
2697
+ // https://www.npmjs.com/package/vanilla-lazyload
2698
+ // Set the options globally
2699
+ // to make LazyLoad self-initialize
2700
+ window.lazyLoadOptions = {
2701
+ elements_selector: ".lazyload",
2702
+ threshold: 0
2703
+ };
2704
+ // Listen to the initialization event
2705
+ // and get the instance of LazyLoad
2706
+ window.addEventListener(
2707
+ "LazyLoad::Initialized",
2708
+ function (event) {
2709
+ window.lazyLoadInstance = event.detail.instance;
2710
+ },
2711
+ false
2712
+ );
2713
+ document.addEventListener('DOMContentLoaded', function () {
2714
+ lazyLoadInstance.update();
2715
+ });
2716
+ document.addEventListener('pjax:complete', function () {
2717
+ lazyLoadInstance.update();
2718
+ });
2719
+ </script>
2720
+
2721
+
2722
+
2723
+
2724
+
2725
+
2726
+ <script>
2727
+ window.FPConfig = {
2728
+ delay: 0,
2729
+ ignoreKeywords: ["#"],
2730
+ maxRPS: 6,
2731
+ hoverDelay: 0
2732
+ };
2733
+ </script>
2734
+ <script defer src="https://fastly.jsdelivr.net/npm/volantis-static/libs/flying-pages/flying-pages.min.js"></script>
2735
+
2736
+
2737
+
2738
+
2739
+
2740
+
2741
+
2742
+
2743
+
2744
+ <script>
2745
+ volantis.layoutHelper("comments",`<div id="giscus_container"></div>`)
2746
+
2747
+ volantis.giscus = {};
2748
+
2749
+ function check_giscus() {
2750
+ if (volantis.dark.mode === "dark") {
2751
+ volantis.giscus.Theme = 'dark';
2752
+ } else {
2753
+ volantis.giscus.Theme = 'light';
2754
+ }
2755
+
2756
+ return document.getElementById("giscus_container");
2757
+ }
2758
+
2759
+ function pjax_giscus() {
2760
+ const HEAD = check_giscus();
2761
+ if (!HEAD) return;
2762
+ let cfg = Object.assign({"theme":{"light":"light","dark":"dark"},"repo":"Mlikiowa/MliKiowa.github.io","repo-id":"R_kgDOHxvLiA","category":"General","category-id":"DIC_kwDOHxvLiM4CQr9N","mapping":"url","reactions-enabled":"1","emit-metadata":"0","lang":"zh-CN"},pdata.commentConfig)
2763
+ const script = document.createElement('script');
2764
+ script.setAttribute('src', 'https://giscus.app/client.js');
2765
+ Object.keys(cfg).forEach(k=>{
2766
+ if (k != "theme") {
2767
+ script.setAttribute('data-'+k, cfg[k]);
2768
+ }
2769
+ })
2770
+ script.setAttribute('data-theme', volantis.giscus.Theme);
2771
+ script.setAttribute('crossorigin', "anonymous");
2772
+ HEAD.appendChild(script);
2773
+ }
2774
+
2775
+ function dark_giscus() {
2776
+ const HEAD = check_giscus();
2777
+ if (!HEAD) return;
2778
+
2779
+ const message = {
2780
+ setConfig: {
2781
+ theme: volantis.giscus.Theme
2782
+ }
2783
+ };
2784
+ const giscusIframe = document.querySelector('iframe.giscus-frame');
2785
+ giscusIframe.contentWindow.postMessage({ giscus: message }, 'https://giscus.app');
2786
+ }
2787
+ pjax_giscus();
2788
+ volantis.pjax.push(pjax_giscus);
2789
+ volantis.dark.push(dark_giscus);
2790
+ </script>
2791
+
2792
+
2793
+
2794
+
2795
+
2796
+
2797
+
2798
+ <!-- optional -->
2799
+
2800
+ <script>
2801
+ const SearchServiceDataPathRoot = ("/" || "/").endsWith("/") ?
2802
+ "/" || "/" :
2803
+ "//" || "/";
2804
+ const SearchServiceDataPath = SearchServiceDataPathRoot + "content.json";
2805
+
2806
+ function loadSearchScript() {
2807
+ // see: layout/_partial/scripts/_ctrl/cdnCtrl.ejs
2808
+ return volantis.js("/js/search/hexo.js");
2809
+ }
2810
+
2811
+ function loadSearchService() {
2812
+ loadSearchScript();
2813
+ document.querySelectorAll(".input.u-search-input").forEach((e) => {
2814
+ e.removeEventListener("focus", loadSearchService, false);
2815
+ });
2816
+
2817
+ document.querySelectorAll(".u-search-form").forEach((e) => {
2818
+ e.addEventListener("submit", (event) => {
2819
+ event.preventDefault();
2820
+ }, false);
2821
+ });
2822
+ }
2823
+
2824
+ // 打开并搜索 字符串 s
2825
+ function OpenSearch(s) {
2826
+ if (typeof SearchService === 'undefined')
2827
+ loadSearchScript().then(() => {
2828
+ SearchService.setQueryText(s);
2829
+ SearchService.search();
2830
+ });
2831
+ else {
2832
+ SearchService.setQueryText(s);
2833
+ SearchService.search();
2834
+ }
2835
+ }
2836
+
2837
+ // 访问含有 ?s=xxx 的链接时打开搜索 // 与搜索引擎 structured data 相关: /scripts/helpers/structured-data/lib/config.js
2838
+ if (window.location.search && /^\?s=/g.test(window.location.search)) {
2839
+ let queryText = decodeURI(window.location.search)
2840
+ .replace(/\ /g, "-")
2841
+ .replace(/^\?s=/g, "");
2842
+ OpenSearch(queryText);
2843
+ }
2844
+
2845
+ // 搜索输入框获取焦点时加载搜索
2846
+ document.querySelectorAll(".input.u-search-input").forEach((e) => {
2847
+ e.addEventListener("focus", loadSearchService, false);
2848
+ });
2849
+ </script>
2850
+
2851
+
2852
+
2853
+
2854
+
2855
+
2856
+
2857
+ <script>
2858
+
2859
+
2860
+
2861
+ function pjax_highlightjs_copyCode(){
2862
+ if (!(document.querySelector(".highlight .code pre") ||
2863
+ document.querySelector(".article pre code"))) {
2864
+ return;
2865
+ }
2866
+ VolantisApp.utilCopyCode(".highlight .code pre, .article pre code")
2867
+ }
2868
+ volantis.requestAnimationFrame(pjax_highlightjs_copyCode)
2869
+ volantis.pjax.push(pjax_highlightjs_copyCode)
2870
+
2871
+ </script>
2872
+
2873
+
2874
+
2875
+
2876
+
2877
+
2878
+
2879
+
2880
+
2881
+
2882
+
2883
+
2884
+ <script>
2885
+ function load_swiper() {
2886
+ if (!document.querySelectorAll(".swiper-container")[0]) return;
2887
+ volantis.css("https://fastly.jsdelivr.net/npm/volantis-static/libs/swiper/swiper-bundle.min.css");
2888
+ volantis.js("https://fastly.jsdelivr.net/npm/volantis-static/libs/swiper/swiper-bundle.min.js").then(() => {
2889
+ pjax_swiper();
2890
+ });
2891
+ }
2892
+
2893
+ load_swiper();
2894
+
2895
+ function pjax_swiper() {
2896
+ volantis.swiper = new Swiper('.swiper-container', {
2897
+ slidesPerView: 'auto',
2898
+ spaceBetween: 8,
2899
+ centeredSlides: true,
2900
+ loop: true,
2901
+ pagination: {
2902
+ el: '.swiper-pagination',
2903
+ clickable: true,
2904
+ },
2905
+ navigation: {
2906
+ nextEl: '.swiper-button-next',
2907
+ prevEl: '.swiper-button-prev',
2908
+ },
2909
+ });
2910
+ }
2911
+
2912
+ volantis.pjax.push(() => {
2913
+ if (!document.querySelectorAll(".swiper-container")[0]) return;
2914
+ if (typeof volantis.swiper === "undefined") {
2915
+ load_swiper();
2916
+ } else {
2917
+ pjax_swiper();
2918
+ }
2919
+ });
2920
+ </script>
2921
+
2922
+
2923
+ <!-- pjax 标签必须存在于所有页面 否则 pjax error -->
2924
+ <pjax>
2925
+
2926
+ </pjax>
2927
+
2928
+ <script>
2929
+ function listennSidebarTOC() {
2930
+ const navItems = document.querySelectorAll(".toc li");
2931
+ if (!navItems.length) return;
2932
+ let targets = []
2933
+ const sections = [...navItems].map((element) => {
2934
+ const link = element.querySelector(".toc-link");
2935
+ const target = document.getElementById(
2936
+ decodeURI(link.getAttribute("href")).replace("#", "")
2937
+ );
2938
+ targets.push(target)
2939
+ // 解除 a 标签 href 的 锚点定位, a 标签 href 的 锚点定位 会随机启用?? 产生错位???
2940
+ link.setAttribute("onclick","return false;")
2941
+ link.setAttribute("toc-action","toc-"+decodeURI(link.getAttribute("href")).replace("#", ""))
2942
+ link.setAttribute("href","/")
2943
+ // 配置 点击 触发新的锚点定位
2944
+ link.addEventListener("click", (event) => {
2945
+ event.preventDefault();
2946
+ // 这里的 addTop 是通过错位使得 toc 自动展开.
2947
+ volantis.scroll.to(target,{addTop: 5, observer:true})
2948
+ // Anchor id
2949
+ history.pushState(null, document.title, "#" + target.id);
2950
+ });
2951
+ return target;
2952
+ });
2953
+
2954
+ function activateNavByIndex(target) {
2955
+ if (target.classList.contains("active-current")) return;
2956
+
2957
+ document.querySelectorAll(".toc .active").forEach((element) => {
2958
+ element.classList.remove("active", "active-current");
2959
+ });
2960
+ target.classList.add("active", "active-current");
2961
+ let parent = target.parentNode;
2962
+ while (!parent.matches(".toc")) {
2963
+ if (parent.matches("li")) parent.classList.add("active");
2964
+ parent = parent.parentNode;
2965
+ }
2966
+ }
2967
+
2968
+ // 方案一:
2969
+ volantis.activateNavIndex=0
2970
+ activateNavByIndex(navItems[volantis.activateNavIndex])
2971
+ volantis.scroll.push(()=>{
2972
+ if (targets[0].getBoundingClientRect().top >= 0) {
2973
+ volantis.activateNavIndex = 0
2974
+ }else if (targets[targets.length-1].getBoundingClientRect().top < 0) {
2975
+ volantis.activateNavIndex = targets.length-1
2976
+ } else {
2977
+ for (let index = 0; index < targets.length; index++) {
2978
+ const target0 = targets[index];
2979
+ const target1 = targets[(index+1)%targets.length];
2980
+ if (target0.getBoundingClientRect().top < 0&&target1.getBoundingClientRect().top >= 0) {
2981
+ volantis.activateNavIndex=index
2982
+ break;
2983
+ }
2984
+ }
2985
+ }
2986
+ activateNavByIndex(navItems[volantis.activateNavIndex])
2987
+ })
2988
+
2989
+ // 方案二:
2990
+ // IntersectionObserver 不是完美精确到像素级别 也不是低延时性的
2991
+ // function findIndex(entries) {
2992
+ // let index = 0;
2993
+ // let entry = entries[index];
2994
+ // if (entry.boundingClientRect.top > 0) {
2995
+ // index = sections.indexOf(entry.target);
2996
+ // return index === 0 ? 0 : index - 1;
2997
+ // }
2998
+ // for (; index < entries.length; index++) {
2999
+ // if (entries[index].boundingClientRect.top <= 0) {
3000
+ // entry = entries[index];
3001
+ // } else {
3002
+ // return sections.indexOf(entry.target);
3003
+ // }
3004
+ // }
3005
+ // return sections.indexOf(entry.target);
3006
+ // }
3007
+ // function createIntersectionObserver(marginTop) {
3008
+ // marginTop = Math.floor(marginTop + 10000);
3009
+ // let intersectionObserver = new IntersectionObserver(
3010
+ // (entries, observe) => {
3011
+ // let scrollHeight = document.documentElement.scrollHeight;
3012
+ // if (scrollHeight > marginTop) {
3013
+ // observe.disconnect();
3014
+ // createIntersectionObserver(scrollHeight);
3015
+ // return;
3016
+ // }
3017
+ // let index = findIndex(entries);
3018
+ // activateNavByIndex(navItems[index]);
3019
+ // }, {
3020
+ // rootMargin: marginTop + "px 0px -100% 0px",
3021
+ // threshold: 0,
3022
+ // }
3023
+ // );
3024
+ // sections.forEach((element) => {
3025
+ // element && intersectionObserver.observe(element);
3026
+ // });
3027
+ // }
3028
+ // createIntersectionObserver(document.documentElement.scrollHeight);
3029
+ }
3030
+
3031
+ document.addEventListener("DOMContentLoaded", ()=>{
3032
+ volantis.requestAnimationFrame(listennSidebarTOC)
3033
+ });
3034
+ document.addEventListener("pjax:success", ()=>{
3035
+ volantis.requestAnimationFrame(listennSidebarTOC)
3036
+ });
3037
+ </script>
3038
+
3039
+
3040
+ <script>
3041
+ try {
3042
+ // https://web.dev/content-visibility/
3043
+ // https://www.caniuse.com/?search=content-visibility
3044
+ // https://infrequently.org/2020/12/content-visibility-scroll-fix/
3045
+ // https://infrequently.org/2020/12/resize-resilient-deferred-rendering/
3046
+
3047
+ // 备注 目前已知的问题:
3048
+ // 动态修改导致的内容高度变化(例如评论框异步渲染的外部盒子高度变化) 无法提前获知, 进而导致的首次滚动条跳动无法去除 (wontfix) 事实上不使用 content-visibility 也会有跳动, 不过是比使用 content-visibility 跳动提前
3049
+ // scrollreveal 插件潜在问题 目前尚不明确
3050
+
3051
+ let eqIsh = (a, b, fuzz = 2) => {
3052
+ return Math.abs(a - b) <= fuzz;
3053
+ };
3054
+
3055
+ let rectNotEQ = (a, b) => {
3056
+ return !eqIsh(a.width, b.width) || !eqIsh(a.height, b.height);
3057
+ };
3058
+
3059
+ // Keep a map of elements and the dimensions of
3060
+ // their place-holders, re-setting the element's
3061
+ // intrinsic size when we get updated measurements
3062
+ // from observers.
3063
+ let spaced = new WeakMap();
3064
+
3065
+ // Only call this when known cheap, post layout
3066
+ let reserveSpace = (el, rect = el.getClientBoundingRect()) => {
3067
+ let old = spaced.get(el);
3068
+ // Set intrinsic size to prevent jumping on un-painting:
3069
+ // https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override
3070
+ if (!old || rectNotEQ(old, rect)) {
3071
+ spaced.set(el, rect);
3072
+ el.style["contain-intrinsic-size"] = `${rect.width}px ${rect.height}px`;
3073
+ }
3074
+ };
3075
+
3076
+ let iObs = new IntersectionObserver(
3077
+ (entries, o) => {
3078
+ entries.forEach((entry) => {
3079
+ // We don't care if the element is intersecting or
3080
+ // has been laid out as our page structure ensures
3081
+ // they'll get the right width.
3082
+ reserveSpace(entry.target, entry.boundingClientRect);
3083
+ });
3084
+ },
3085
+ { rootMargin: "500px 0px 500px 0px" }
3086
+ );
3087
+
3088
+ let rObs = new ResizeObserver((entries, o) => {
3089
+ entries.forEach((entry) => {
3090
+ reserveSpace(entry.target, entry.contentRect);
3091
+ });
3092
+ });
3093
+
3094
+ let resizeResilientDeferredRendering = (Selector) => {
3095
+ let articles = document.querySelectorAll(Selector);
3096
+
3097
+ if (articles.length) {
3098
+ articles.forEach((el) => {
3099
+ iObs.observe(el);
3100
+ rObs.observe(el);
3101
+ });
3102
+
3103
+ // Workaround for Chrome bug, part 2.
3104
+ //
3105
+ // Re-enable browser management of rendering for the
3106
+ // first article after the first paint. Double-rAF
3107
+ // to ensure we get called after a layout.
3108
+ requestAnimationFrame(() => {
3109
+ requestAnimationFrame(() => {
3110
+ articles[0].style["content-visibility"] = "auto";
3111
+ });
3112
+ });
3113
+ }
3114
+ };
3115
+
3116
+ let contentVisibilityScrollFix = () => {
3117
+ if (!("content-visibility" in document.documentElement.style)) {
3118
+ return;
3119
+ }
3120
+ resizeResilientDeferredRendering(".post-story");
3121
+ };
3122
+ contentVisibilityScrollFix();
3123
+ volantis.pjax.push(contentVisibilityScrollFix);
3124
+ } catch (error) {
3125
+ console.log(error);
3126
+ }
3127
+ </script>
3128
+
3129
+
3130
+
3131
+ <script>
3132
+ document.onreadystatechange = function () {
3133
+ if (document.readyState == 'complete') {
3134
+ // 页面加载完毕 样式加载失败,或是当前网速慢,或是开启了省流模式
3135
+ const { saveData, effectiveType } = navigator.connection || navigator.mozConnection || navigator.webkitConnection || {}
3136
+ if (getComputedStyle(document.querySelector("#safearea"), null)["display"] == "none" || saveData || /2g/.test(effectiveType)) {
3137
+ document.querySelectorAll(".reveal").forEach(function (e) {
3138
+ e.style["opacity"] = "1";
3139
+ });
3140
+ document.querySelector("#safearea").style["display"] = "block";
3141
+ }
3142
+ }
3143
+ }
3144
+ </script>
3145
+
3146
+
3147
+ <script type="application/ld+json">[{"@context":"http://schema.org","@type":"Organization","name":"Village","url":"https://nanaeo.cn/","logo":{"@type":"ImageObject","url":"https://fastly.jsdelivr.net/npm/volantis-static/media/org.volantis/blog/favicon/android-chrome-192x192.png","width":192,"height":192}},{"@context":"http://schema.org","@type":"Person","name":"Mlikiowa","image":{"@type":"ImageObject","url":"https://fastly.jsdelivr.net/npm/volantis-static/media/org.volantis/blog/favicon/android-chrome-192x192.png"},"url":"https://nanaeo.cn/","sameAs":["https://github.com/volantis-x"],"description":"It is a little blog~"},{"@context":"http://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://nanaeo.cn/","name":"Village"}}]},{"@context":"http://schema.org","@type":"WebSite","name":"Village","url":"https://nanaeo.cn/","keywords":null,"description":"It is a little blog~","author":{"@type":"Person","name":"Mlikiowa","image":{"@type":"ImageObject","url":"https://fastly.jsdelivr.net/npm/volantis-static/media/org.volantis/blog/favicon/android-chrome-192x192.png"},"url":"https://nanaeo.cn/","description":"It is a little blog~"},"publisher":{"@type":"Organization","name":"Village","url":"https://nanaeo.cn/","logo":{"@type":"ImageObject","url":"https://fastly.jsdelivr.net/npm/volantis-static/media/org.volantis/blog/favicon/android-chrome-192x192.png","width":192,"height":192}},"potentialAction":{"@type":"SearchAction","name":"Site Search","target":{"@type":"EntryPoint","urlTemplate":"https://nanaeo.cn?s={search_term_string}"},"query-input":"required name=search_term_string"}},{"@context":"http://schema.org","@type":"BlogPosting","headline":"关于","description":"It is a little blog~","inLanguage":["zh-CN","en","default"],"mainEntityOfPage":{"@type":"WebPage","@id":"https://nanaeo.cn/about/index.html"},"author":{"@type":"Person","name":"Mlikiowa","image":{"@type":"ImageObject","url":"https://fastly.jsdelivr.net/npm/volantis-static/media/org.volantis/blog/favicon/android-chrome-192x192.png"},"url":"https://nanaeo.cn/"},"publisher":{"@type":"Organization","name":"Village","logo":{"@type":"ImageObject","url":"https://fastly.jsdelivr.net/npm/volantis-static/media/org.volantis/blog/favicon/android-chrome-192x192.png","width":192,"height":192}},"url":"https://nanaeo.cn/about/index.html","wordCount":0,"datePublished":"2023-12-19T06:33:48.885Z","dateModified":"2023-12-19T06:33:48.885Z","image":{"@type":"ImageObject","url":"https://fastly.jsdelivr.net/npm/volantis-static/media/org.volantis/blog/favicon/android-chrome-192x192.png","width":192,"height":192}}]</script>
3148
+
3149
+
3150
+
3151
+
3152
+ <!--
3153
+ pjax重载区域接口:
3154
+ 1. <pjax></pjax> 标签 pjax 标签必须存在于所有页面 否则 pjax error
3155
+ 2. script[data-pjax]
3156
+ 3. .pjax-reload script
3157
+ 4. .pjax
3158
+ -->
3159
+
3160
+
3161
+
3162
+ <script src="https://fastly.jsdelivr.net/npm/volantis-static/libs/pjax/pjax.min.js"></script>
3163
+
3164
+
3165
+ <script>
3166
+ var pjax;
3167
+ document.addEventListener('DOMContentLoaded', function () {
3168
+ pjax = new Pjax({
3169
+ elements: 'a[href]:not([href^="#"]):not([href="javascript:void(0)"]):not([pjax-fancybox]):not([onclick="return false;"]):not([onclick="return!1"]):not([target="_blank"]):not([target="view_window"]):not([href$=".xml"])',
3170
+ selectors: [
3171
+ "head title",
3172
+ "head meta[name=keywords]",
3173
+ "head meta[name=description]",
3174
+
3175
+ "#l_main",
3176
+ "#pjax-header-nav-list",
3177
+ ".pjax",
3178
+ "pjax", // <pjax></pjax> 标签
3179
+ "script[data-pjax], .pjax-reload script" // script标签添加data-pjax 或 script标签外层添加.pjax-reload 的script代码段重载
3180
+ ],
3181
+ cacheBust: false, // url 地址追加时间戳,用以避免浏览器缓存
3182
+ timeout: 5000,
3183
+
3184
+ });
3185
+ });
3186
+
3187
+ document.addEventListener('pjax:send', function (e) {
3188
+ //window.stop(); // 相当于点击了浏览器的停止按钮
3189
+
3190
+ try {
3191
+ var currentUrl = window.location.pathname;
3192
+ var targetUrl = e.triggerElement.href;
3193
+ var banUrl = [""];
3194
+ if (banUrl[0] != "") {
3195
+ banUrl.forEach(item => {
3196
+ if(currentUrl.indexOf(item) != -1 || targetUrl.indexOf(item) != -1) {
3197
+ window.location.href = targetUrl;
3198
+ }
3199
+ });
3200
+ }
3201
+ } catch (error) {}
3202
+
3203
+ // 使用 volantis.pjax.send 方法传入pjax:send回调函数 参见layout/_partial/scripts/global.ejs
3204
+ volantis.pjax.method.send.start();
3205
+ });
3206
+
3207
+ document.addEventListener('pjax:complete', function () {
3208
+ // 使用 volantis.pjax.push 方法传入重载函数 参见layout/_partial/scripts/global.ejs
3209
+ volantis.pjax.method.complete.start();
3210
+ });
3211
+
3212
+ document.addEventListener('pjax:error', function (e) {
3213
+ if(volantis.debug) {
3214
+ console.error(e);
3215
+ console.log('pjax error: \n' + JSON.stringify(e));
3216
+ }else{
3217
+ // 使用 volantis.pjax.error 方法传入pjax:error回调函数 参见layout/_partial/scripts/global.ejs
3218
+ volantis.pjax.method.error.start();
3219
+ window.location.href = e.triggerElement.href;
3220
+ }
3221
+ });
3222
+ </script>
3223
+
3224
+
3225
+ </div>
3226
+ <!-- import body_end begin-->
3227
+ <script data-pjax async src="https://ackee.nanaeo.cn/tracker.js" data-ackee-server="https://ackee.nanaeo.cn" data-ackee-domain-id="3e94aa30-5cea-4f2b-9ec6-c0178d3beb0c"></script>
3228
+ <script>"serviceWorker"in navigator&&navigator.serviceWorker.register("/volantis-sw.js").then(function(n){n.onupdatefound=function(){var e=n.installing;e.onstatechange=function(){switch(e.state){case"installed":navigator.serviceWorker.controller?console.log("Updated serviceWorker."):console.log("serviceWorker Sucess!");break;case"redundant":console.log("The installing service worker became redundant.")}}}}).catch(function(e){console.log("Error during service worker registration:",e)}); </script>
3229
+ <!-- import body_end end-->
3230
+ <!-- Custom Files bodyEnd begin-->
3231
+
3232
+ <!-- Custom Files bodyEnd end-->
3233
+ <!-- front-matter body_end begin -->
3234
+ <!-- front-matter body_end end -->
3235
+ </body>
3236
+ </html>