@mlikiowa/nanaeo 1.0.1702966759079 → 1.0.1702967739786

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