PageSourceSearch

https://blog.zhheo.com/p/671f98c8.html

html zhheo.com collected 2026-10-01 10:11:47 UTC 182,514 bytes, 1,258 lines download raw bytes

1<!DOCTYPE html><html lang="zh-CN" data-theme="dark"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta http-equiv="content-language" content="zh-cn"><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"><title>洪绘敲木鱼App - 打节拍敲音效解压神器 | 张洪Heo</title><meta name="keywords" content="必看,热门,开发,Swift"><meta name="author" content="张洪Heo"><meta name="apple-mobile-web-app-title" content="张洪Heo"><meta name="copyright" content="张洪Heo"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="var(--heo-main)"><meta name="cover-color" content="#59a4e7"><meta name="p:domain_verify" content="91cce50c0366a08ee8d5bd729406de4d"><meta property="og:image" content="https://p.zhheo.com/20234681e06b8e086aa5b15481cb89fd38c7071002.png!plog"><link rel="dns-prefetch" href="//blog.zhheo.com"><link rel="dns-prefetch" href="//p.zhheo.com"><link rel="icon" href="/img/favicon4.0.webp"><link rel="apple-touch-icon" href="/apple-touch-icon.webp"><link rel="bookmark" href="/apple-touch-icon.webp"><link rel="apple-touch-icon-precomposed" sizes="180x180" href="/apple-touch-icon.webp"><meta name="description" content="一开始做敲木鱼的时候也是受到网上很多电子木鱼的启发,用了一下目前的几个木鱼软件,一个是界面令人窒息,交互体验令人崩溃,还有音效少而且有点太贵了。 所以想着能够根据自己的喜好和经验不断完善,构建出现有在用户体验和功能性上也许是最强的音效敲击应用。 设计在这个软件设计简洁,保证在闭眼盲操作的情况下点击屏幕仍然可以正常的使用。 并且在切换不同的音效上,在偏好设置有一些小动画,而且不同的音效还配合了不同的">
2<meta property="og:type" content="article">
3<meta property="og:title" content="洪绘敲木鱼App - 打节拍敲音效解压神器">
4<meta property="og:url" content="https://blog.zhheo.com/p/671f98c8.html">
5<meta property="og:site_name" content="å¼ æ´ªHeo">
6<meta property="og:description" content="一开始做敲木鱼的时候也是受到网上很多电子木鱼的启发,用了一下目前的几个木鱼软件,一个是界面令人窒息,交互体验令人崩溃,还有音效少而且有点太贵了。 所以想着能够根据自己的喜好和经验不断完善,构建出现有在用户体验和功能性上也许是最强的音效敲击应用。 设计在这个软件设计简洁,保证在闭眼盲操作的情况下点击屏幕仍然可以正常的使用。 并且在切换不同的音效上,在偏好设置有一些小动画,而且不同的音效还配合了不同的">
7<meta property="og:locale" content="zh_CN">
8<meta property="og:image" content="https://p.zhheo.com/wrUReo24490481714022264296.png!cover">
9<meta property="article:published_time" content="2022-10-14T01:50:28.000Z">
10<meta property="article:modified_time" content="2022-10-14T01:50:28.000Z">
11<meta property="article:author" content="å¼ æ´ªHeo">
12<meta property="article:tag" content="Swift">
13<meta property="article:tag" content="开发">
14<meta property="article:tag" content="必看">
15<meta property="article:tag" content="热门">
16<meta name="twitter:card" content="summary">
17<meta name="twitter:image" content="https://p.zhheo.com/wrUReo24490481714022264296.png!cover"><link rel="shortcut icon" href="https://p.zhheo.com/20234681e06b8e086aa5b15481cb89fd38c7071002.png!plog"><link rel="canonical" href="https://blog.zhheo.com/p/671f98c8.html"><link rel="preconnect" href="//p.zhheo.com"/><link rel="preconnect" href="//s3.zhheo.com"/><link rel="preconnect" href="//twikoo.zhheo.com" crossorigin=""/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="manifest" href="/manifest.json"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="mobile-web-app-capable" content="yes"/><meta name="apple-touch-fullscreen" content="yes"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><meta name="msapplication-TileColor" content="#000000"/><link rel="apple-touch-icon" sizes="180x180" href="/img/pwa/apple-touch-icon.webp"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-2048x2732.webp" media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-2732x2048.webp" media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-1668x2388.webp" media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-2388x1668.webp" media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-1536x2048.webp" media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-2048x1536.webp" media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-1668x2224.webp" media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-2224x1668.webp" media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-1620x2160.webp" media="(device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-2160x1620.webp" media="(device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-1290x2796.webp" media="(device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-2796x1290.webp" media="(device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-1179x2556.webp" media="(device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-2556x1179.webp" media="(device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-1248x2778.webp" media="(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-2778x1248.webp" media="(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-1170x2532.webp" media="(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-2532x1170.webp" media="(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-1125x2436.webp" media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-2436x1125.webp" media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-1242x2688.webp" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-2688x1242.webp" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-828x1792.webp" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-1792x828.webp" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-1242x2208.webp" media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-2208x1242.webp" media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-750x1334.webp" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-1334x750.webp" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-640x1136.webp" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"/><link rel="apple-touch-startup-image" href="/img/pwa/splash-1136x640.webp" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"/><link rel="preload" as="image" href="https://p.zhheo.com/wrUReo24490481714022264296.png!cover" fetchpriority="high"><style type="text/css">:root {
18  --heo-white: #fff;
19  --heo-white-op: rgba(255, 255, 255, 0.15);
20  --heo-black: #000;
21  --heo-black-op: rgba(0, 0, 0, 0.15);
22  --heo-none: #00000000;
23  --heo-gray-op: #9999992b;
24  --heo-gray-op-deep: #99999996;
25  --heo-vip: #e5a80d;
26  --heo-main: var(--heo-theme);
27  --heo-main-op: var(--heo-theme-op);
28  --heo-main-op-deep: var(--heo-theme-op-deep);
29  --heo-main-op-light: var(--heo-theme-op-light);
30  --heo-main-none: var(--heo-theme-none);
31  --heo-shadow-theme: 0 8px 12px -3px var(--heo-theme-op);
32  --heo-shadow-blackdeep: 0 2px 16px -3px rgba(0, 0, 0, .15);
33  --heo-shadow-main: 0 8px 12px -3px var(--heo-main-op);
34  --heo-shadow-blue: 0 8px 12px -3px rgba(40, 109, 234, .20);
35  --heo-shadow-white: 0 8px 12px -3px rgba(255, 255, 255, .20);
36  --heo-shadow-black: 0 0 12px 4px rgba(0, 0, 0, .05);
37  --heo-shadow-yellow: 0 38px 77px -26px rgba(255, 201, 62, .12);
38  --heo-shadow-red: 0 8px 12px -3px #ee7d7936;
39  --heo-shadow-green: 0 8px 12px -3px #87ee7936;
40  --heo-logo-color: linear-gradient(215deg, #4584ff 0%, #cf0db9 100%);
41  --heo-snackbar-time: 5s;
42  --heo-musicColor: var(--heo-main);
43  --heo-musicColor-op: var(--heo-main-op);
44  --heo-bottom-float-gap: 4px;
45  --heo-need-end-hide-offset: 320px;
46  --heo-dock-right: 20px;
47  --heo-dock-bottom: 20px;
48  --heo-dock-width: 300px;
49  --heo-dock-duration: 0.6s;
50  --heo-dock-ease: cubic-bezier(0.42, 0, 0.3, 1.11);
51  --heo-dock-blur: saturate(180%) blur(20px);
52  --global-bg: #fff;
53  --hr-border: #97bcfb;
54  --hr-before-color: #6ea2f9;
55  --search-bg: #f6f8fa;
56  --search-input-color: var(--heo-fontcolor);
57  --search-result-title: #4c4948;
58  --preloader-bg: #37474f;
59  --preloader-color: #fff;
60  --tab-border-color: #f0f0f0;
61  --tab-botton-bg: #f0f0f0;
62  --tab-botton-color: #1f2d3d;
63  --tab-button-hover-bg: #dcdcdc;
64  --tab-button-active-bg: #fff;
65  --sidebar-bg: #f6f8fa;
66  --btn-hover-color: #ff7242;
67  --btn-color: #fff;
68  --btn-bg: #307af6;
69  --text-bg-hover: #307af6;
70  --light-grey: #eee;
71  --text-highlight-color: #1f2d3d;
72  --blockquote-color: #6a737d;
73  --blockquote-bg: rgba(73, 177, 245, 0.1);
74  --reward-pop: #f5f5f5;
75  --toc-link-color: #666261;
76  --card-box-shadow: 0 3px 8px 6px rgba(7, 17, 27, 0.06);
77  --card-hover-box-shadow: 0 3px 8px 6px rgba(7, 17, 27, 0.15);
78  --hl-color: #eff;
79  --hl-bg: #212121;
80  --hltools-bg: #1c1c1c;
81  --hltools-color: rgba(238, 255, 255, 0.8);
82  --hlnumber-bg: #212121;
83  --hlnumber-color: rgba(238, 255, 255, 0.5);
84  --hlscrollbar-bg: #121212;
85  --hlexpand-bg: linear-gradient(180deg, rgba(33, 33, 33, 0.6), rgba(33, 33, 33, 0.9));
86  --offset: 0;
87}
88[data-theme=light] {
89  --heo-theme: #425AEF;
90  --heo-theme-op: #4259ef23;
91  --heo-theme-op-deep: #4259efdd;
92  --heo-theme-op-light: #4259ef0d;
93  --heo-theme-none: #4259ef01;
94  --heo-blue: #425AEF;
95  --heo-red: #d80020;
96  --heo-red-op: #d800201a;
97  --heo-red-op-deep: #d8002056;
98  --heo-pink: #FF7C7C;
99  --heo-green: #57bd6a;
100  --heo-green-op: #57bd6a1a;
101  --heo-green-op-deep: #57bd6a56;
102  --heo-yellow: #936900;
103  --heo-yellow-op: #d99c001a;
104  --heo-orange: #e38100;
105  --heo-purple: #7a60d2;
106  --heo-fontcolor: #363636;
107  --heo-background: #f7f9fe;
108  --heo-reverse: #000;
109  --heo-maskbg: rgba(255, 255, 255, 0.6);
110  --heo-maskbgdeep: rgba(255, 255, 255, 0.85);
111  --heo-hovertext: var(--heo-main);
112  --heo-ahoverbg: #F7F7FA;
113  --heo-lighttext: var(--heo-main);
114  --heo-secondtext: rgba(60, 60, 67, 0.8);
115  --heo-scrollbar: rgba(60, 60, 67, 0.4);
116  --heo-card-btn-bg: #edf0f7;
117  --heo-post-blockquote-bg: #fafcff;
118  --heo-post-tabs-bg: #f2f5f8;
119  --heo-secondbg: #f7f7f9;
120  --heo-shadow-nav: 0 5px 12px -5px rgba(102, 68, 68, 0.05);
121  --heo-card-bg: #fff;
122  --heo-card-bg-op: var(--heo-white-op);
123  --heo-card-bg-op-deep: #ffffff45;
124  --heo-card-bg-none: rgba(255, 255, 255, 0);
125  --heo-shadow-lightblack: 0 5px 12px -5px rgba(102, 68, 68, 0.00);
126  --heo-shadow-light2black: 0 5px 12px -5px rgba(102, 68, 68, 0.00);
127  --heo-shadow-glass: 0 5px 100px -5px rgb(140 140 140 / 55%);
128  --heo-shadow-glass-deep: 0 5px 100px -5px rgb(0 0 0 / 60%);
129  --heo-card-border: #e3e8f7;
130  --heo-shadow-border: 0 8px 16px -4px #2c2d300c;
131}
132[data-theme=light],[data-theme=dark] {
133  --style-border: 1px solid var(--heo-card-border);
134  --style-border-always: 1px solid var(--heo-card-border);
135  --style-border-hover: 1px solid var(--heo-lighttext);
136  --style-border-hover-always: 1px solid var(--heo-lighttext);
137  --style-border-dashed: 1px dashed var(--heo-theme-op);
138  --style-border-forever: 2px solid var(--heo-lighttext);
139}
140[data-theme=dark] {
141  --heo-theme: #ffc848;
142  --heo-theme-op: #f2b94b23;
143  --heo-theme-op-deep: #f2b94bdd;
144  --heo-theme-none: #f2b94b00;
145  --heo-blue: #0084FF;
146  --heo-red: #FF3842;
147  --heo-red-op: #ff38421a;
148  --heo-red-op-deep: #ff38426e;
149  --heo-pink: #d44040;
150  --heo-green: #3e9f50;
151  --heo-green-op: #3e9f501a;
152  --heo-green-op-deep: #3e9f506e;
153  --heo-purple: #7a60d2;
154  --heo-yellow: #ffc93e;
155  --heo-yellow-op: #ffc93e30;
156  --heo-orange: #ff953e;
157  --heo-fontcolor: #F7F7FA;
158  --heo-background: #17191d;
159  --heo-reverse: #fff;
160  --heo-maskbg: rgba(0, 0, 0, 0.6);
161  --heo-maskbgdeep: rgba(0, 0, 0, 0.85);
162  --heo-hovertext: #0A84FF;
163  --heo-ahoverbg: #fff;
164  --heo-lighttext: var(--heo-theme);
165  --heo-secondtext: #a1a2b8;
166  --heo-scrollbar: rgba(200, 200, 223, 0.4);
167  --heo-card-btn-bg: #30343f;
168  --heo-post-blockquote-bg: #000;
169  --heo-post-tabs-bg: #121212;
170  --heo-secondbg: #21232a;
171  --heo-shadow-nav: 0 5px 20px 0 rgba(28, 28, 28, 0.4);
172  --heo-card-bg: #1b1c20;
173  --heo-card-bg-op: var(--heo-black-op);
174  --heo-card-bg-op-deep: #00000045;
175  --heo-card-bg-none: #1d1b2600;
176  --heo-shadow-lightblack: 0 5px 12px -5px rgba(102, 68, 68, 0.0);
177  --heo-shadow-light2black: 0 5px 12px -5px rgba(102, 68, 68, 0.0);
178  --heo-shadow-glass: 0 5px 100px -5px rgba(0, 0, 0, 0.55);
179  --heo-shadow-glass-deep: 0 5px 100px -5px rgba(0, 0, 0, 0.90);
180  --heo-card-border: #3d3d3f;
181  --heo-shadow-border: 0 8px 16px -4px #00000050;
182}
183html, body {
184  background: transparent;
185  margin: 0;
186  height: 100%;
187}
188body {
189  position: relative;
190  min-height: 100%;
191  background: var(--heo-background);
192  color: var(--heo-fontcolor);
193  font-size: 16px;
194  font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei";
195  line-height: 2;
196  -webkit-tap-highlight-color: transparent;
197}
198* {
199  box-sizing: border-box;
200}
201//- 桌面端 Banner 关键布局(仅 >768px 生效)
202//- 让 LCP 图片无需等待 heoblogmain.css 即可被绘制到屏幕
203.homePage #home_top_blur.home-top-blur {
204  position: absolute;
205  top: 0;
206  left: 0;
207  right: 0;
208  height: 320px;
209  overflow: hidden;
210  background: var(--heo-background);
211  pointer-events: none;
212  z-index: 0;
213}
214.home_barAndPosts:has(#home_top_blur) {
215  animation: none;
216}
217.home_barAndPosts:has(#home_top_blur) #recent-posts,
218.home_barAndPosts:has(#home_top_blur) #recent-posts .recent-post-item {
219  animation: slide-in 0.6s 0.6s backwards;
220}
221.homePage #home_top_blur .home-top-blur-bg {
222  position: absolute;
223  inset: -32px;
224  background-color: var(--heo-main-op);
225  background-size: cover;
226  background-position: center 30%;
227  filter: blur(28px) saturate(1.25) brightness(1.05);
228  transform: scale(1.1);
229  opacity: 0.2;
230}
231@media (min-width: 769px) {
232  #home_center.home-center {
233    position: relative;
234    width: 100%;
235    margin: 0;
236    padding: 0;
237    z-index: 1;
238  }
239  .home-center-content {
240    position: relative;
241    width: 100%;
242    display: flex;
243    background: var(--heo-card-bg);
244    border: var(--style-border-always);
245    border-radius: 12px;
246    overflow: hidden;
247    height: 320px;
248  }
249  .home-center-left {
250    flex: 1;
251    position: relative;
252    height: 100%;
253    overflow: hidden;
254  }
255  .home-center-banner {
256    position: relative;
257    width: 100%;
258    height: 100%;
259    overflow: hidden;
260  }
261  .home-center-banner-item {
262    position: absolute;
263    top: 0;
264    left: 0;
265    width: 100%;
266    height: 100%;
267    opacity: 0;
268    visibility: hidden;
269    display: flex;
270    flex-direction: column;
271    justify-content: center;
272    align-items: center;
273    padding: 2rem;
274    background-color: var(--heo-card-bg);
275  }
276  .home-center-banner-item.active {
277    opacity: 1;
278    visibility: visible;
279    z-index: 1;
280  }
281  .home-center-cover {
282    width: 80%;
283    max-width: 80%;
284    flex-shrink: 0;
285    overflow: visible;
286    display: flex;
287    align-items: center;
288    justify-content: center;
289  }
290  .home-center-cover-img {
291    max-width: 100%;
292    height: auto;
293    width: auto;
294    max-height: 100%;
295    object-fit: contain;
296  }
297  .home-center-banner-item.has-banner-cover {
298    padding: 0;
299  }
300  .home-center-banner-item.has-banner-cover .home-center-cover {
301    width: 100%;
302    max-width: 100%;
303    height: 100%;
304  }
305  .home-center-banner-item.has-banner-cover .home-center-cover-img {
306    width: 100%;
307    height: 100%;
308    max-width: 100%;
309    max-height: 100%;
310    object-fit: cover;
311  }
312  .home-center-indicators {
313    display: flex;
314    align-items: center;
315    gap: 6px;
316    pointer-events: none;
317  }
318  .home-center-indicator {
319    pointer-events: auto;
320  }
321  //- 主 CSS 加载前隐藏箭头按钮,避免无样式闪烁
322  .home-center-banner-arrow {
323    display: none;
324  }
325}</style><style type="text/css">@media (max-width: 768px) {
326  .homePage .layout#content-inner {
327    padding: 0 !important;
328  }
329  .home-center-content {
330    flex-direction: column !important;
331    height: auto !important;
332    overflow: hidden !important;
333  }
334  .home-center-left {
335    width: 100% !important;
336    overflow: hidden !important;
337  }
338  .homePage #home_top_blur.home-top-blur {
339    display: none !important;
340  }
341  .home-center-banner {
342    height: 200px !important;
343    display: flex !important;
344    overflow-x: auto !important;
345    overflow-y: hidden !important;
346    scroll-snap-type: x mandatory !important;
347    scroll-behavior: auto !important;
348  }
349  .home-center-banner-item {
350    position: relative !important;
351    min-width: 100% !important;
352    width: 100% !important;
353    flex-shrink: 0 !important;
354    opacity: 1 !important;
355    visibility: visible !important;
356  }
357  .home-center-banner-item .home-center-cover {
358    width: 100% !important;
359    max-width: 100% !important;
360    height: 100% !important;
361  }
362  .home-center-banner-item .home-center-cover-img {
363    width: 100% !important;
364    height: 100% !important;
365    max-width: 100% !important;
366    max-height: 100% !important;
367    object-fit: cover !important;
368    mask-image: none !important;
369    -webkit-mask-image: none !important;
370  }
371  #recent-posts .recent-post-item {
372    flex-direction: column !important;
373    display: block !important;
374    width: 100% !important;
375  }
376  #recent-posts .recent-post-item .post_cover {
377    width: 100% !important;
378    height: 170px !important;
379    order: 1 !important;
380  }
381  #recent-posts .recent-post-item .recent-post-info {
382    width: 100% !important;
383    order: 2 !important;
384  }
385  .homePage #recent-posts {
386    padding: 0 1rem !important;
387  }
388  .homePage .layout.layout--home > .home-category-bar {
389    margin: 0 !important;
390    width: 100% !important;
391    max-width: 100% !important;
392    padding: 0 !important;
393  }
394  .home-category-bar .category-bar-items {
395    padding: 0 1rem !important;
396  }
397}</style><link rel="stylesheet" href="/zhheo/heoblogmain.css?v=20af8e82"><link rel="stylesheet" href="/zhheo/nav.css?v=0492bd48"><link rel="stylesheet" href="/zhheo/aside.css?v=8cd71fb1"><link rel="stylesheet" href="/zhheo/remixicon.subset.css?v=13edd92b" media="print" onload="this.media='all'"><link rel="stylesheet" href="/zhheo/codesign/iconfont.css?v=c6afd756" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="/zhheo/remixicon.subset.css?v=13edd92b"></noscript><link rel="stylesheet" href="/zhheo/heoblogmw1300.css?v=6e42e8d8" media="screen and (max-width: 1299px)"><link rel="stylesheet" href="/zhheo/heoblogmw1200.css?v=a4abd672" media="screen and (max-width: 1200px)"><link rel="stylesheet" href="/zhheo/heoblogmw768.css?v=1fe5cd12" media="screen and (max-width: 767px)"><link rel="stylesheet" href="/zhheo/post.css?v=6143b484"><link rel="stylesheet" href="/plugin/snackbar/snackbar.min.css?v=4220368a" media="print" onload="this.media='all'"><meta http-equiv="origin-trial" content="AsNhuTHBds89dnZ1YJp8huYFBh3YO8Syt/WoFJrtNDx9vid7e/vZezN13yHCsI7nw56f5hrTusi7bwBXWpOcOwAAAABceyJvcmlnaW4iOiJodHRwczovL3poaGVvLmNvbTo0NDMiLCJmZWF0dXJlIjoiV2ViTUNQIiwiZXhwaXJ5IjoxNzk0ODczNjAwLCJpc1N1YmRvbWFpbiI6dHJ1ZX0="><meta http-equiv="origin-trial" content="A1HD36CMfK7i1lH6opeCrC0YEwicEgywhWV8kunUwKJoMZj/yf/hPaKxMnM3EvJPmSXeWmT49tX72ajlj8W23u4AAABceyJvcmlnaW4iOiJodHRwczovL3poaGVvLmNvbTo0NDMiLCJmZWF0dXJlIjoiV2ViTUNQIiwiZXhwaXJ5IjoxNzg5ODc3MTU2LCJpc1N1YmRvbWFpbiI6dHJ1ZX0=">
397<script>var GLOBAL_CONFIG = { 
398  root: '/',
399  // PHP 接口线上基址(本地预览时前端改用此地址,见 inject_head_js 的 window.apiUrl)
400  apiBase: 'https://blog.zhheo.com',
401  assetVer: 'mum3m06l',
402  algolia: undefined,
403  localSearch: undefined,
404  phpSearch: {"apiUrl":"https://blog.zhheo.com/api/search/search.php","hitsPerPage":10,"skyApiUrl":"https://sky.zhheo.com/api/search","skyLimit":20,"siteHost":"blog.zhheo.com","jsUrl":"/zhheo/php-search.js?v=9c6f34d0","cssUrl":"/zhheo/php-search.css?v=9c8da890","commentEnvId":"https://twikoo.zhheo.com","languages":{"hits_empty":"找不到你查询的内容:${query}","hits_stats":"找到 ${hits} 条结果,用时 ${time} 毫秒"}},
405  console: {"jsUrl":"/zhheo/console.js?v=e7b51d10","cssUrl":"/zhheo/console.css?v=23f7ca55","twikooEnvId":"https://twikoo.zhheo.com"},
406  translate: {"defaultEncoding":2,"translateDelay":0,"msgToTraditionalChinese":"简","msgToSimplifiedChinese":"繁"},
407  noticeOutdate: undefined,
408  highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":400},
409  radio: {"welcomeUrl":"https://s3.zhheo.com/heoblog/radio/radio_mode_welcome.mp3?v=8b5bed17","indexUrl":"/radio/podcast-index.json","skipSeconds":9.35,"defaultCover":"https://blog.zhheo.com/img/avatar.png","artist":"张洪Heo","albumWelcome":"电台模式","albumPodcast":"文章播客"},
410  copy: {
411    success: '复制成功',
412    error: '复制错误',
413    noSupport: '浏览器不支持'
414  },
415  relativeDate: {
416    homepage: true,
417    post: false
418  },
419  runtime: '天',
420  date_suffix: {
421    just: '刚刚',
422    min: '分钟前',
423    hour: '小时前',
424    day: '天前',
425    month: '个月前'
426  },
427  copyright: undefined,
428  lightbox: 'fancybox',
429  Snackbar: {"chs_to_cht":"你已切换为繁体","cht_to_chs":"你已切换为简体","day_to_night":"你已切换为深色模式","night_to_day":"你已切换为浅色模式","bgLight":"#49b1f5","bgDark":"#121212","position":"top-center"},
430  source: {
431    fancybox: {
432      js: '/plugin/heoimgviewer/heoimgviewer.min.js?v=a894be09',
433      css: '/plugin/heoimgviewer/heoimgviewer.min.css?v=1d001c35'
434    }
435  },
436  isPhotoFigcaption: true,
437  islazyload: true,
438  isanchor: false,
439  twikoo: {"envId":"https://twikoo.zhheo.com"},
440  webmcp: true,
441  pwa: true,
442  postScripts: {
443    heoGpt: '/js/heo_gpt.js?v=3eadb3ad',
444    postAudio: '/js/post_audio.js?v=52fe32a1'
445  },
446  // 页面级资源路径:head 与客户端 ensure* 共用同一来源,避免清单漂移(见 head.pug)
447  pagePaths: {
448    home: '/zhheo/home.css?v=91a2b1a4',
449    aside: '/zhheo/aside.css?v=8cd71fb1',
450    post: '/zhheo/post.css?v=6143b484',
451    pageTypes: {"tags":"/zhheo/tags.css?v=264799bb","link":"/zhheo/flink.css?v=26b2a5c5","categories":"/zhheo/categories.css?v=4776d6b4","about":"/zhheo/about.css?v=a0f78680","rss":"/rss/rss.css?v=4625ce48","equipment":"/equipment/equipment.css?v=34e4b304","recentcomments":"/recentcomments/recentcomments.css?v=a42c10fd","skill":"/zhheo/skill.css?v=4f10db94","stats":"/stats/stats.css?v=bbaf6635","cc":"/cc/cc.css?v=80e435e3"}
452  }
453}
454// 注:window.assetUrl / window.getScript / window.loadStyleSheet 统一由 inject_head_js 注入</script>
454<script id="config-diff">var GLOBAL_CONFIG_SITE = {
455  title: '洪绘敲木鱼App - 打节拍敲音效解压神器',
456  isPost: true,
457  isHome: false,
458  isHighlightShrink: false,
459  isToc: true,
460  postUpdate: '2022-10-14 09:50:28',
461  pageType: ""
462}</script>
462<noscript><style type="text/css">
463  #nav {
464    opacity: 1
465  }
466
467  #recent-posts time,
468  #post-meta time {
469    display: inline !important
470  }
471</style></noscript>
471<script>(win=>{
472    win.saveToLocal = {
473      set: function setWithExpiry(key, value, ttl) {
474        if (ttl === 0) return
475        const now = new Date()
476        const expiryDay = ttl * 86400000
477        const item = {
478          value: value,
479          expiry: now.getTime() + expiryDay,
480        }
481        localStorage.setItem(key, JSON.stringify(item))
482      },
483
484      get: function getWithExpiry(key) {
485        const itemStr = localStorage.getItem(key)
486
487        if (!itemStr) {
488          return undefined
489        }
490        const item = JSON.parse(itemStr)
491        const now = new Date()
492
493        if (now.getTime() > item.expiry) {
494          localStorage.removeItem(key)
495          return undefined
496        }
497        return item.value
498      }
499    }
500  
501    win.assetUrl = url => {
502      if (!url || /^https?:\/\//i.test(url)) return url
503      if (/\bv=/.test(url)) return url
504      const sep = url.includes('?') ? '&' : '?'
505      return url + sep + 'v=' + 'mum3m06l'
506    }
507    // 同一 URL 单飞:多个调用方(评论 / 最新评论 / 评论头像组)并发时只加载一次,
508    // 避免重复插入同一脚本导致重复执行。
509    win.__getScriptCache = win.__getScriptCache || {}
510    win.getScript = url => {
511      const src = win.assetUrl(url)
512      if (win.__getScriptCache[src]) return win.__getScriptCache[src]
513      win.__getScriptCache[src] = new Promise((resolve, reject) => {
514        const script = document.createElement('script')
515        script.src = src
516        script.async = true
517        script.onerror = function (err) {
518          delete win.__getScriptCache[src]
519          reject(err)
520        }
521        script.onload = script.onreadystatechange = function () {
522          const loadState = this.readyState
523          if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
524          script.onload = script.onreadystatechange = null
525          resolve()
526        }
527        document.head.appendChild(script)
528      })
529      return win.__getScriptCache[src]
530    }
531    // 样式表按需注入:同一 URL 只注入一次(覆盖 PJAX 场景),统一替代各处手写 createElement('link')
532    win.__styleCache = win.__styleCache || {}
533    win.loadStyleSheet = url => {
534      const href = win.assetUrl(url)
535      if (win.__styleCache[href]) return win.__styleCache[href]
536      const existing = document.querySelector('link[rel="stylesheet"][href="' + href + '"]')
537      if (existing) { win.__styleCache[href] = existing; return existing }
538      const link = document.createElement('link')
539      link.rel = 'stylesheet'
540      link.href = href
541      document.head.appendChild(link)
542      win.__styleCache[href] = link
543      return link
544    }
545    // 统一 API 基址:本地预览(hexo server 不执行 PHP)自动指向线上 apiBase,其余环境用同源相对路径
546    win.__isLocalHost = location.protocol === 'file:' || ['localhost', '127.0.0.1', '0.0.0.0', '[::1]'].indexOf(location.hostname) !== -1
547    win.apiUrl = path => {
548      if (/^https?:\/\//i.test(path)) return path
549      if (!win.__isLocalHost) return path
550      const base = (win.GLOBAL_CONFIG && win.GLOBAL_CONFIG.apiBase) || location.origin
551      return String(base).replace(/\/$/, '') + (path.charAt(0) === '/' ? path : '/' + path)
552    }
553  
554      win.activateDarkMode = function () {
555        document.documentElement.setAttribute('data-theme', 'dark')
556        if (typeof heo !== 'undefined' && heo.initThemeColor) heo.initThemeColor()
557      }
558      win.activateLightMode = function () {
559        document.documentElement.setAttribute('data-theme', 'light')
560        if (typeof heo !== 'undefined' && heo.initThemeColor) heo.initThemeColor()
561      }
562      const t = saveToLocal.get('theme')
563    
564          const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches
565          const isLightMode = window.matchMedia('(prefers-color-scheme: light)').matches
566          const isNotSpecified = window.matchMedia('(prefers-color-scheme: no-preference)').matches
567          const hasNoSupport = !isDarkMode && !isLightMode && !isNotSpecified
568
569          if (t === undefined) {
570            if (isLightMode) activateLightMode()
571            else if (isDarkMode) activateDarkMode()
572            else if (isNotSpecified || hasNoSupport) {
573              const now = new Date()
574              const hour = now.getHours()
575              const isNight = hour <= 8 || hour >= 22
576              isNight ? activateDarkMode() : activateLightMode()
577            }
578            window.matchMedia('(prefers-color-scheme: dark)').addListener(function (e) {
579              if (saveToLocal.get('theme') === undefined) {
580                e.matches ? activateDarkMode() : activateLightMode()
581              }
582            })
583          } else if (t === 'light') activateLightMode()
584          else activateDarkMode()
585        
586      const asideStatus = saveToLocal.get('aside-status')
587      if (asideStatus !== undefined) {
588        if (asideStatus === 'hide') {
589          document.documentElement.classList.add('hide-aside')
590        } else {
591          document.documentElement.classList.remove('hide-aside')
592        }
593      }
594    })(window)</script>
594<script>let tianliGPT_postURL = '*/p/*'; let tianliGPT_postSelector = '\#article-container';</script>
594<meta name="generator" content="Hexo 8.1.2"><link rel="alternate" href="/rss.xml" title="å¼ æ´ªHeo" type="application/atom+xml">
595<link rel="alternate" href="/atom.xml" title="å¼ æ´ªHeo" type="application/rss+xml">
596</head><body class="post"><style type="text/css">#loading-box {
597  -webkit-user-select: none;
598}
599#loading-box .loading-bg{
600  display: flex;
601  width: 100%;
602  height: 100%;
603  position: fixed;
604  background: var(--heo-card-bg);
605  z-index: 1999;
606  opacity: 1;
607  pointer-events: all;
608}
609#loading-box.loaded .loading-bg{
610  display: none;
611}
612body:has(#loading-box:not(.loaded)) {
613  background: var(--heo-card-bg) !important;
614}
615#loading-box .loading-img{
616  width: 100px;
617  height: 100px;
618  margin: auto;
619  animation-duration: 0.2s;
620  animation-name: loadingAction;
621  animation-iteration-count: infinite;
622  animation-direction: alternate;
623}
624@keyframes loadingAction {
625  from {
626    opacity: 1;
627  }
628  to {
629    opacity: 0.6;
630  }
631}
632</style><div id="loading-box" onclick="heo.hideLoading();"><div class="loading-bg"><img class="loading-img nolazyload" alt="loading image" src="data:image/webp;base64,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"/></div></div><div id="web_bg"></div><div id="console"><div class="console_content"><div class="console-row console-row--top"><div class="console-user" id="consoleUser"><div class="console-user__skeleton" aria-hidden="true"><div class="console-user__skeleton-avatar"></div><div class="console-user__skeleton-meta"><div class="console-user__skeleton-line" style="width:42%"></div><div class="console-user__skeleton-line" style="width:64%"></div><span class="console-user__skeleton-tip">正在加载你的数据…</span></div><div class="console-user__skeleton-actions"><span class="console-user__skeleton-chip"></span><span class="console-user__skeleton-btn"></span><span class="console-user__skeleton-btn"></span></div></div></div><div class="console-metrics console-metrics--hidden" id="consoleMetrics" style="display:none"><div class="console-metrics__cell console-metrics__cell--level"><span class="console-metrics__label">评论等级</span><span class="console-metrics__lv" id="consoleMetricLv">—</span><div class="console-metrics__bar"><span class="console-metrics__progress" id="consoleMetricFill" style="width:0%"></span></div><span class="console-metrics__hint" id="consoleMetricHint"></span></div><div class="console-metrics__cell"><span class="console-metrics__label">评论次数</span><span class="console-metrics__num" id="consoleMetricCount">—</span></div><div class="console-metrics__cell"><span class="console-metrics__label">首评次数</span><span class="console-metrics__num" id="consoleMetricFirst">—</span></div><div class="console-metrics__cell"><span class="console-metrics__label">高质量评论</span><span class="console-metrics__num" id="consoleMetricQuality">—</span></div></div></div><div class="console-notice" id="consoleUserNotice" style="display:none"></div><div class="console-row console-row--main"><div class="console-card console-posts"><div class="card-content"><div class="author-content-item-tips">博客</div><div class="card-hor-content"><span class="author-content-item-title">最近文章</span><a class="go_to_recent_comments" href="/archives/" title="最近文章" heotip="查看全部文章"><i class="heoblogIcon icon-arrow-right-circle-fill"></i></a></div></div><ul class="console-posts__list"><li class="console-posts__item"><a class="console-posts__link" href="/p/kp6o6mwu.html" title="OpenClaw 接管你的油猴脚本:让 AI 直接读改网页脚本ï¼
632Œä¸ç”¨å†å¤åˆ¶ç²˜è´´"><span class="console-posts__title">OpenClaw 接管你的油猴脚本:让 AI 直接读改网页脚本,不用再复制粘贴</span><time class="console-posts__date">09/14</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/kq0qyc9y.html" title="为 iPhone Duo 做设计:苹果官方设计原则全解读"><span class="console-posts__title">为 iPhone Duo 做设计:苹果官方设计原则全解读</span><time class="console-posts__date">09/11</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/0vmg6q9j.html" title="看到了淘宝闪购的AI评论,引发了我的思考"><span class="console-posts__title">看到了淘宝闪购的AI评论,引发了我的思考</span><time class="console-posts__date">09/11</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/j5ns9clc.html" title="如何在网页插入 livephoto ?实况照片 PVT 在线生成、动态JPG生成工具与嵌入工具"><span class="console-posts__title">如何在网页插入 livephoto ?实况照片 PVT 在线生成、动态JPG生成工具与嵌入工具</span><time class="console-posts__date">09/09</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/8p5a0k56.html" title="MacBook不进入休眠全新邪修:十几块钱的绿联HDMI欺骗器"><span class="console-posts__title">MacBook不进入休眠全新邪修:十几块钱的绿联HDMI欺骗器</span><time class="console-posts__date">09/04</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/5r2g9ie4.html" title="OpenClaw 2.0:稳定性提升不少,我还迁移了我的记忆系统"><span class="console-posts__title">OpenClaw 2.0:稳定性提升不少,我还迁移了我的记忆系统</span><time class="console-posts__date">09/03</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/6b10yftj.html" title="将你的 HeoID 卡片添加到 Apple 钱包"><span class="console-posts__title">将你的 HeoID 卡片添加到 Apple 钱包</span><time class="console-posts__date">08/31</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/c0jzc71f.html" title="智谱codingplan耐用程度分析:只用 GLM-5.3-Flash 够不够用?"><span class="console-posts__title">智谱codingplan耐用程度分析:只用 GLM-5.3-Flash 够不够用?</span><time class="console-posts__date">08/28</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/mrlh0a7v.html" title="软路由内网穿透访问方案全链路教程:从 ZeroTier 到 Nginx 再到 certd 证书管理"><span class="console-posts__title">软路由内网穿透访问方案全链路教程:从 ZeroTier 到 Nginx 再到 certd 证书管理</span><time class="console-posts__date">08/28</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/q6b3774w.html" title="BrowserSkill上手:让AI接入浏览器,还能录制动作教它学习"><span class="console-posts__title">BrowserSkill上手:让AI接入浏览器,还能录制动作教它学习</span><time class="console-posts__date">08/27</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/npa0251o.html" title="我与我的 OpenClaw 凉透了焦虑和解了"><span class="console-posts__title">我与我的 OpenClaw 凉透了焦虑和解了</span><time class="console-posts__date">08/27</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/ucrz6hhg.html" title="ntfsmac 上手:不关 SIP 让 Mac 读写 NTFS 和 ext 硬盘"><span class="console-posts__title">ntfsmac 上手:不关 SIP 让 Mac 读写 NTFS 和 ext 硬盘</span><time class="console-posts__date">08/24</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/1bwuf82b.html" title="个人小项目vibecoding方案推荐:opencode spark 1.2 和 zcode"><span class="console-posts__title">个人小项目vibecoding方案推荐:opencode spark 1.2 和 zcode</sp
632an><time class="console-posts__date">08/20</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/mgii3qy1.html" title="分享一下博客的全新聚合搜索"><span class="console-posts__title">分享一下博客的全新聚合搜索</span><time class="console-posts__date">08/19</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/3gr7k8xj.html" title="给DeepSeek-V4-Flash借一双眼睛:ZCode视觉子Agent方案"><span class="console-posts__title">给DeepSeek-V4-Flash借一双眼睛:ZCode视觉子Agent方案</span><time class="console-posts__date">08/14</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/lgodvfdh.html" title="Mole Mac 上手:界面精美,优秀好用的Mac清理工具"><span class="console-posts__title">Mole Mac 上手:界面精美,优秀好用的Mac清理工具</span><time class="console-posts__date">08/14</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/wh8h2uop.html" title="Agentation 油猴脚本:让AI指哪改哪,配合 Claude Code 的开发神器"><span class="console-posts__title">Agentation 油猴脚本:让AI指哪改哪,配合 Claude Code 的开发神器</span><time class="console-posts__date">08/12</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/tbp0pls8.html" title="洪绘压图网页版上线,这下可以随时随地在线压缩图片了"><span class="console-posts__title">洪绘压图网页版上线,这下可以随时随地在线压缩图片了</span><time class="console-posts__date">08/10</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/4c5g2me1.html" title="分享一下我最近制作的一些AI音乐,以及解决唱歌错字和音质的一些小技巧"><span class="console-posts__title">分享一下我最近制作的一些AI音乐,以及解决唱歌错字和音质的一些小技巧</span><time class="console-posts__date">08/10</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/0zlnja8m.html" title="洪绘敲木鱼支持“竹知了”模式了,可以自定义音效的电子竹知了App"><span class="console-posts__title">洪绘敲木鱼支持“竹知了”模式了,可以自定义音效的电子竹知了App</span><time class="console-posts__date">08/07</time></a></li></ul></div><div class="console-card console-posts" console-must-read="console-must-read"><div class="card-content"><div class="author-content-item-tips">博客</div><div class="card-hor-content"><span class="author-content-item-title">必看文章</span><a class="go_to_recent_comments" href="/must-read/" title="必看文章" heotip="查看必看精选"><i class="heoblogIcon icon-arrow-right-circle-fill"></i></a></div></div><ul class="console-posts__list"><li class="console-posts__item"><a class="console-posts__link" href="/p/7a59rx04.html" title="这一次,我们听点有意思的"><span class="console-posts__title">这一次,我们听点有意思的</span><time class="console-posts__date">05/21</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/bp85fpdb.html" title="洪绘压图发布!批量转图片格式,批量压缩图片工具(Mac/Windows)"><span class="console-posts__title">洪绘压图发布!批量转图片格式,批量压缩图片工具(Mac/Windows)</span><time class="console-posts__date">04/15</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/drqm39ob.html" title="洪绘存图发布:保存浏览器图片为指定格式、提取网页所有图片、屏幕截图插件"><span class="console-posts__title">洪绘存图发布:保存浏览器图片为指定格式、提取网页所有图片、屏幕截图插件</span><time class="console-posts__date">03/29</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/iu5f3hvj.html" title="洪绘星空发布:一个值得逛的博客友链朋友圈"><span class="console-posts__title">洪绘星空发布:一个值得逛的博客友链朋友圈</span><time class="console-posts__date">03/20</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/cpw1bogx.html" title="如何创作AI歌曲?从生成歌词、歌曲创作、专辑封面到音乐发行"><span class="console-posts__title">如何创作AI歌曲?从生成歌词、歌曲创作、专辑封面到音乐发行</span><time class="console-posts__date">03/03</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/0tr5lmby.html" title="洪绘历史记录发布!无限存储你的浏览器历史记录,防止历史记录被自动删除"><span class="console-posts__title">洪绘历史记录发布!无限存储你的浏览器历史记录,防止历史记录被自动删除</span><time class="console-posts__date">02/25</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/5zo43meo.html" title="HeoAwards2025:年度我喜欢的博主"><span class="console-posts__title">HeoAwards2025:年度我喜欢的博主</span><time class="console-posts__date">11/04</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/a8cqpj9s.html" title="博客六周年记"><span class="console-posts__title">博客六周年记</span><time class="console-posts__date">10/31</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/j0xcp072.html" title="洪绘电子章发布!在线给你的PDF快速盖上电子章、é
632ª‘缝章,你的盖章助手"><span class="console-posts__title">洪绘电子章发布!在线给你的PDF快速盖上电子章、骑缝章,你的盖章助手</span><time class="console-posts__date">09/03</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/eq9bc5bn.html" title="洪绘速填发布!无登录评论系统自动填写信息插件,Twikoo等评论系统自动填信息"><span class="console-posts__title">洪绘速填发布!无登录评论系统自动填写信息插件,Twikoo等评论系统自动填信息</span><time class="console-posts__date">08/20</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/hun646rc.html" title="洪绘闪回发布!论坛快捷回复,自动填充随机短语,浏览器插件"><span class="console-posts__title">洪绘闪回发布!论坛快捷回复,自动填充随机短语,浏览器插件</span><time class="console-posts__date">08/01</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/d3go8ajr.html" title="如何给文本添加隐藏信息?洪绘文本盲水印给文字添加一些隐藏内容"><span class="console-posts__title">如何给文本添加隐藏信息?洪绘文本盲水印给文字添加一些隐藏内容</span><time class="console-posts__date">02/14</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/no66tkfp.html" title="在Mac上部署DeepSeek R1模型,设置知识库对话、Prompt等"><span class="console-posts__title">在Mac上部署DeepSeek R1模型,设置知识库对话、Prompt等</span><time class="console-posts__date">02/02</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/qs34pfrn.html" title="我在2025年推荐的Mac软件"><span class="console-posts__title">我在2025年推荐的Mac软件</span><time class="console-posts__date">12/23</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/f0d4.html" title="洪绘畅联发布!一个插件搞定内外网切换,根据环境自动切换最佳Url或者IP地址"><span class="console-posts__title">洪绘畅联发布!一个插件搞定内外网切换,根据环境自动切换最佳Url或者IP地址</span><time class="console-posts__date">11/06</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/d0b6.html" title="HeoAwards2024:年度我喜欢的博主"><span class="console-posts__title">HeoAwards2024:年度我喜欢的博主</span><time class="console-posts__date">10/30</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/ce30.html" title="博客五周年记"><span class="console-posts__title">博客五周年记</span><time class="console-posts__date">10/29</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/80f4b396.html" title="Textout插件:将你的Sketch设计稿本地化,翻译,批量文本替换"><span class="console-posts__title">Textout插件:将你的Sketch设计稿本地化,翻译,批量文本替换</span><time class="console-posts__date">04/24</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/463d306b.html" title="博客文章封面的变迁,我是如何制作博客封面的"><span class="console-posts__title">博客文章封面的变迁,我是如何制作博客封面的</span><time class="console-posts__date">06/29</time></a></li><li class="console-posts__item"><a class="console-posts__link" href="/p/f0d9c27a.html" title="新版sketch mirror无法使用,找不到设备怎么办?如何实时预览sketch文档?"><span class="console-posts__title">新版sketch mirror无法使用,找不到设备怎么办?如何实时预览sketch文档?</span><time class="console-posts__date">06/29</time></a></li></ul></div><div class="console-card" id="card-newest-comments"><div class="card-content"><div class="author-content-item-tips">互动</div><div class="card-hor-content"><span class="author-content-item-title">最近评论</span><a class="go_to_recent_comments" href="/recentcomments/" title="最近评论" heotip="查看更多最近评论"><i class="heoblogIcon icon-arrow-right-circle-fill"></i></a></div></div><div class="console-recent--list" id="console_recentcomments"><div class="console-comment-skeleton" aria-hidden="true"><div class="console-comment-skeleton__head"><span class="console-comment-skeleton__avatar"></span><span class="console-comment-skeleton__line" style="width:27%"></span><span class="console-comment-skeleton__line console-comment-skeleton__line--dim" style="width:34%"></span><span class="console-comment-skeleton__line console-comment-skeleton__line--time" style="width:12%"></span></div><div class="console-comment-skeleton__line console-comment-skeleton__line--content" style="width:86%"></div><div class="console-comment-skeleton__line console-comment-skeleton__line--content" style="width:62%"></div></div><div class="console-comment-skeleton" aria-hidden="true"><div class="console-comment-skeleton__head"><span class="console-comment-skeleton__avatar"></span><span class="console-comment-skeleton__line" style="width:27%"></span><span class="console-comment-skeleton__line console-comment-skeleton__line--dim" style="width:34%"></span><span class="console-comment-skeleton__line console-comment-skeleton__line--time" style="width:12%"></span></div><div class="console-comment-skeleton__line console-comment-skeleton__line--content" style="width:86%"></div><div class="console-comment-skeleton__line console-comment-skeleton__line--content" style="width:62%"></div></div><div class="console-comment-skeleton" aria-hidden="true"><div class="console-comment-skeleton__head"><span class="console-comment-skeleton__avatar"></span><span class="console-comment-skeleton__line" style="width:27%"></span><span class="console-comment-skeleton__line console-comment-skeleton__line--dim" style="width:34%"></span><span class="console-comment-skeleton__line console-comment-skeleton__line--time" style="width:12%"></span></div><div class="console-comment-skeleton__line console-comment-skeleton__line--content" style="width:86%"></div><div class="console-comment-skeleton__line console-comment-skeleton__line--content" style="width:62%"></div></div><div class="console-comment-skeleton" aria-hidden="true"><div class="console-comment-skeleton__head"><span class="console-comment-skeleton__avatar"></span><span class="console-comment-skeleton__line" style="width:27%"></span><span class="console-comment-skeleton__line console-comment-skeleton__line--dim" style="width:34%"></span><span class="console-comment-skeleton__line console-comment-skeleton__line--time" style="width:12%"></span></div><div class="console-comment-skeleton__line console-comment-skeleton__line--content" style="width:86%"></div><div class="console-comment-skeleton__line console-comment-skeleton__line--content" style="width:62%"></div></div><div class="console-comment-skeleton" aria-hidden="true"><div class="console-comment-skeleton__head"><span class="console-comment-skeleton__avatar"></span><span class="console-comment-skeleton__line" style="width:27%"></span><span class="console-comment-skeleton__line console-comment-skeleton__line--dim" style="width:34%"></span><span class="console-comment-skeleton__line console-comment-skeleton__line--time" style="width:12%"></span></div><div class="console-comment-skeleton__line console-comment-skeleton__line--content" style="width:86%"></div><div class="console-comment-skeleton__line console-comment-skeleton__line--content" style="width:62%"></div></div><div class="console-comment-skeleton" aria-hidden="true"><div class="console-comment-skeleton__head"><span class="console-comment-skeleton__avatar"></span><span class="console-comment-skeleton__line" style="width:27%"></span><span class="console-comment-skeleton__line console-comment-skeleton__line--dim" style="width:34%"></span><span class="console-comment-skeleton__line console-comment-skeleton__line--time" style="width:12%"></span></div><div class="console-comment-skeleton__line console-comment-skeleton__line--content" style="width:86%"></div><div class="console-comment-skeleton__line console-comment-skeleton__line--content" style="width:62%"></div></div></div></div></div><div class="button-group"><div class="console-btn-item" id="consoleDarkMode"> <button class="darkmode_switchbutton" onclick="rm.switchDarkMode()" title="显示模式切换" href="javascript:void(0);" heotip="显示模式切换"><i class="heoblogIcon icon-moon-clear-fill" style="font-size: 1rem;"></i></button></div><div class="console-btn-item" id="consoleHideAside"><button class="asideSwitch" onclick="heo.hideAsideBtn()" title="边栏显示控制" heotip="边栏显示控制"><i class="heoblogIcon icon-side-bar-fill"></i></button></div><div class="console-btn-item" id="consoleKeyboard">
632<button class="keyboard-switch" onclick="heo.keyboardToggle()" title="快捷键开关" heotip="快捷键开关"><i class="heoblogIcon icon-keyboard-box-fill"></i></button></div><div class="console-btn-item" id="consoleMusic"><button class="music-switch" onclick="heo.musicToggle()" title="音乐开关" heotip="音乐开关"><i class="heoblogIcon icon-disc-fill"></i></button></div></div></div><div class="console-mask" onclick="heo.hideConsole()" href="javascript:void(0);"></div></div><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="site-data"><div class="data-item is-center"><div class="data-item-link"><a href="/archives/"><div class="headline">文章</div><div class="length-num">1091</div></a></div></div><div class="data-item is-center"><div class="data-item-link"><a href="/tags/"><div class="headline">标签</div><div class="length-num">77</div></a></div></div><div class="data-item is-center"><div class="data-item-link"><a href="/categories/"><div class="headline">分类</div><div class="length-num">10</div></a></div></div><div class="data-item is-center"><div class="data-item-link"><a href="/recentcomments/"><div class="headline">评论</div><div class="length-num twikoo_allcount"></div></a></div></div></div><div class="card-widget heo-right-widget wechat" id="card-wechat-sidebar" onclick="typeof pjax !== 'undefined' &amp;&amp; pjax.loadUrl ? pjax.loadUrl('/rss/') : (window.location.href = '/rss/')"><div class="wechat-card-left"><svg class="wechat-card-icon" viewBox="0 0 120 116" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><g fill="currentColor"><path d="M47.5360966,2.11813832 C82.1030966,-8.42086168 99.7190966,23.7951383 99.7190966,23.7951383 C93.3530966,20.3221383 74.2520966,16.4641383 53.8020966,27.0751383 C33.3520966,37.6861383 29.1070966,60.8391383 29.1070966,60.8391383 C20.7940966,51.9691383 20.4170966,37.6691383 20.4170966,37.6691383 C21.4000966,10.8301383 47.5360966,2.11813832 47.5360966,2.11813832 Z"></path><path d="M36.8570966,112.563138 C-13.1669034,102.868138 -1.78590339,59.1671383 10.7210966,39.9161383 C10.7210966,39.9161383 10.1580966,66.8951383 36.1550966,81.7911383 C36.1550966,81.7911383 39.2460966,83.1961383 38.2630966,87.6921383 L37.2790966,93.4531383 C37.2790966,93.4531383 35.9790966,97.3881383 38.4560966,97.8091383 C38.4560966,97.8091383 39.2470966,97.8091383 41.0730966,96.5441383 L50.6290966,90.2211383 C50.6290966,90.2211383 52.5960966,88.8161383 55.1250966,89.2371383 C57.6540966,89.6591383 73.8140966,93.8751383 89.8330966,80.5261383 C89.8320966,80.5261383 86.8820966,122.259138 36.8570966,112.563138 Z"></path><path d="M87.0220966,108.770138 C90.2540966,107.225138 105.992097,88.6751383 98.5430966,63.5231383 C91.0940966,38.3711383 65.8030966,32.7501383 65.8030966,32.7501383 C78.7310966,27.2701383 93.9070966,31.3441383 93.9070966,31.3441383 C116.952097,38.0891383 119.622097,60.0111383 119.622097,60.0111383 C124.118097,99.2141383 87.0220966,108.770138 87.0220966,108.770138 L87.0220966,108.770138 Z"></path></g></svg><div class="wechat-card-text">公众号订阅</div></div><i class="wechat-card-arrow heoblogIcon icon-arrow-right-line" aria-hidden="true"></i></div><hr/><span class="sidebar-menu-item-title">功能</span><div class="sidebar-menu-item"><a class="darkmode_switchbutton menu-child" onclick="rm.switchDarkMode()" title="显示模式切换" href="javascript:void(0);" rel="external nofollow"><i class="heoblogIcon icon-moon-clear-fill" style="font-size: 1rem;"></i><span>显示模式</span></a></div><div class="back-menu-list-groups"><div class="back-menu-list-group"><div class="back-menu-list-title">博客</div><div class="back-menu-list"><a class="back-menu-item" href="https://zhheo.com/" rel="external nofollow" title="访问主页" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/20232e121c3fb2daa71897d26a515e030f49073402.png!cover_mini" alt="主页图标"/><span class="back-menu-item-text">主页</span></a><a class="back-menu-item" href="/" title="访问博客" target="_self"><img class="back-menu-item-icon" src="https://p.zhheo.com/20234681e06b8e086aa5b15481cb89fd38c7071002.png!cover_mini" alt="博客图标"/><span class="back-menu-item-text">博客</span></a><a class="back-menu-item" href="https://log.zhheo.com/" rel="external nofollow" title="访问HeoLog" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/ohhrmU24190881786350701280.avif!cover_mini" alt="HeoLog图标"/><span class="back-menu-item-text">HeoLog</span></a></div></div><div class="back-menu-list-group"><div class="back-menu-list-title">应用</div><div class="back-menu-list"><a class="back-menu-item" href="/p/671f98c8.html" title="访问洪绘敲木鱼" target="_self"><img class="back-menu-item-icon" src="https://p.zhheo.com/20238366720da498fb5755e8c714128097fc074102.png!cover_mini" alt="洪绘敲木鱼图标"/><span class="back-menu-item-text">洪绘敲木鱼</span></a><a class="back-menu-item" href="https://apps.apple.com/cn/app/dns%E6%B5%8B%E9%80%9F/id6470105015" rel="external nofollow" title="访问DNS测速" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/xnbgWd22890381711434808769.png!cover_mini" alt="DNS测速图标"/><span class="back-menu-item-text">DNS测速</span></a><a class="back-menu-item" href="https://yatu.zhheo.com/" rel="external nofollow" title="访问洪绘压图" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/upload/2026/08/10/webp/2700020260810082606.webp!cover_mini" alt="洪绘压图图标"/><span class="back-menu-item-text">洪绘压图</span></a><a class="back-menu-item" href="https://blog.zhheo.com/p/9yuhxjpl.html" title="访问洪绘动图" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/upload/2026/08/10/webp/9511820260810082629.webp!cover_mini" alt="洪绘动图图标"/><span class="back-menu-item-text">洪绘动图</span></a><a class="back-menu-item" href="https://pdf.zhheo.com/" rel="external nofollow" title="访问洪绘电子章" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/upload/2026/08/10/webp/0621720260810082655.webp!cover_mini" alt="洪绘电子章图标"/><span class="back-menu-item-text">洪绘电子章</span></a><a class="back-menu-item" href="https://blog.zhheo.com/p/0tr5lmby.html" title="访问洪绘历史记录" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/upload/2026/08/10/webp/4622420260810082719.webp!cover_mini" alt="洪绘历史记录图标"/><span class="back-menu-item-text">洪绘历史记录</span></a><a class="back-menu-item" href="https://sky.zhheo.com/" rel="external nofollow" title="访问洪绘星空" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/0hcpzw25790881786416297110.png!cover_mini" alt="洪绘星空图标"/><span class="back-menu-item-text">洪绘星空</span></a></div></div><div class="back-menu-list-group"><div class="back-menu-list-title">服务</div><div class="back-menu-list"><a class="back-menu-item" href="https://ai.zhheo.com/" rel="external nofollow" title="访问洪墨AI" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/EOjpsa22490781720592484600.png!cover_mini" alt="洪墨AI图标"/><span class="back-menu-item-text">洪墨AI</span></a><a class="back-menu-item" href="https://wechat.zhheo.com/" rel="external nofollow" title="访问公众号" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/202319c8ac4827b3c198908bfebf6867d971074702.png!cover_mini" alt="公众号图标"/><span class="back-menu-item-text">公众号</span></a><a class="back-menu-item" href="https://zhheo.com/music/" rel="external nofollow" title="访问音乐播放" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/upload/2026/08/10/webp/3543920260810082730.webp!cover_mini" alt="音乐播放图标"/><span class="back-menu-item-text">音乐播放</span></a></div></div><div class="back-menu-list-group"><div class="back-menu-list-title">表情</div><div class="back-menu-list"><a class="back-menu-item" href="/p/2daa6a7b.html" title="访问Heo" target="_self"><img class="back-menu-item-icon" src="https://p.zhheo.com/2023af0657c4847e2b4ebc558f382ca5119c073402.png!cover_mini" alt="Heo图标"/><span class="back-menu-item-text">Heo</span></a><a class="back-menu-item" href="/p/5115d869.html" title="访问熊猫二憨" target="_self"><img class="back-menu-item-icon" src="https://p.zhheo.com/2023ce09680d1c1b2c334a6f832a7db9336f074402.png!cover_mini" alt="熊猫二憨图标"/><span class="back-menu-item-text">熊猫二憨</span></a></div></div><a class="back-menu-bottom-btn" href="https://zhheo.com/" rel="external nofollow" target="_blank"><img class="back-menu-bottom-btn-icon" src="https://p.zhheo.com/8DSTSS20990281646044689944.PNG!cover_mini" alt="返回主站图标"/><span class="back-menu-bottom-btn-text">更多我的项目</span></a></div><div class="menus_items"><div class="menus_item"><button class="site-page" type="button" aria-haspopup="true" aria-expanded="false"><span> 文库</span><i class="fas fa-chevron-down expand"></i></button><ul class="menus_item_child"><li><a class="site-page child" href="/archives/"><i class="fa-fw ri-file-list-3-fill"></i><span> 全部文章</span></a></li><li><a class="site-page child" href="/categories/"><i class="fa-fw ri-folders-fill"></i><span>
632 分类列表</span></a></li><li><a class="site-page child" href="/tags/"><i class="fa-fw ri-price-tag-3-fill"></i><span> 标签列表</span></a></li></ul></div><div class="menus_item"><button class="site-page" type="button" aria-haspopup="true" aria-expanded="false"><span> 专栏</span><i class="fas fa-chevron-down expand"></i></button><ul class="menus_item_child"><li><a class="site-page child" href="/categories/%E6%88%91%E7%9A%84%E9%A1%B9%E7%9B%AE/"><i class="fa-fw ri-apps-2-fill"></i><span> 我的项目</span></a></li><li><a class="site-page child" href="/categories/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/"><i class="fa-fw ri-lightbulb-fill"></i><span> 经验分享</span></a></li><li><a class="site-page child" href="/categories/%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90/"><i class="fa-fw ri-download-cloud-fill"></i><span> 软件推荐</span></a></li></ul></div><div class="menus_item"><button class="site-page" type="button" aria-haspopup="true" aria-expanded="false"><span> 友链</span><i class="fas fa-chevron-down expand"></i></button><ul class="menus_item_child"><li><a class="site-page child" target="_blank" rel="noopener external nofollow" href="https://sky.zhheo.com"><i class="fa-fw ri-rss-fill"></i><span> 文章推荐</span></a></li><li><a class="site-page child" href="/link/"><i class="fa-fw ri-group-fill"></i><span> 友链列表</span></a></li></ul></div><div class="menus_item"><button class="site-page" type="button" aria-haspopup="true" aria-expanded="false"><span> 我的</span><i class="fas fa-chevron-down expand"></i></button><ul class="menus_item_child"><li><a class="site-page child" href="/equipment/"><i class="fa-fw ri-device-fill"></i><span> 我的装备</span></a></li><li><a class="site-page child" href="/stats/"><i class="fa-fw ri-bar-chart-fill"></i><span> 数据统计</span></a></li><li><a class="site-page child" href="/about/"><i class="fa-fw ri-contacts-fill"></i><span> 关于本站</span></a></li></ul></div></div><span class="sidebar-menu-item-title">标签</span><div class="card-widget card-tags card-archives card-webinfo card-allinfo"><div class="item-headline"><i class="heoblogIcon icon-price-tag-3-fill"></i><span>标签</span></div><div class="card-tag-cloud"><a href="/tags/%E5%A3%81%E7%BA%B8/" style="font-size: 1em;">壁纸<sup>1</sup></a> <a href="/tags/%E8%BF%90%E7%BB%B4/" style="font-size: 1em;">运维<sup>35</sup></a> <a href="/tags/%E4%BD%93%E9%AA%8C%E5%AE%98/" style="font-size: 1em;">体验官<sup>4</sup></a> <a href="/tags/iOS/" style="font-size: 1em;">iOS<sup>53</sup></a> <a href="/tags/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/" style="font-size: 1em;">读书笔记<sup>6</sup></a> <a href="/tags/%E8%A1%A8%E6%83%85/" style="font-size: 1em;">表情<sup>4</sup></a> <a href="/tags/AIGC/" style="font-size: 1em;">AIGC<sup>77</sup></a> <a href="/tags/Docker/" style="font-size: 1em;">Docker<sup>7</sup></a> <a href="/tags/Photoshop/" style="font-size: 1em;">Photoshop<sup>28</sup></a></div></div><span class="sidebar-menu-item-title">爱发电赞助<a class="sidebar-menu-item-title-link" href="https://afdian.com/a/zhheo" rel="external nofollow" target="_blank">赞助</a></span><div class="sidebar-menu-item"><div class="power-list"><div class="power-item"><div class="power-item-body"><div class="power-item-link"><a href="https://www.gaicas.com/" rel="external nofollow" target="_blank" title="草东日记"><img class="power-item-avatar" src="https://p.zhheo.com/XtMtWK21190581715332271128.png!cover" alt="" loading="lazy" onerror="this.style.display='none'"/><span>草东日记</span></a></div><div class="power-item-link"><a href="https://blog.adil.com.cn/" rel="external nofollow" target="_blank" title="Adil"><img class="power-item-avatar" src="https://p.zhheo.com/KKKL6z23990381615774419596.jpg!cover" alt="" loading="lazy" onerror="this.style.display='none'"/><span>Adil</span></a></div><div class="power-item-link"><a href="https://blog.528688.cn/" rel="external nofollow" target="_blank" title="HaoUp"><img class="power-item-avatar" src="https://p.zhheo.com/ibaU5h25590281771288615542.png!cover" alt="" loading="lazy" onerror="this.style.display='none'"/>
632<span>HaoUp</span></a></div><div class="power-item-link"><a href="https://apizero.cn/" rel="external nofollow" target="_blank" title="极数本源"><img class="power-item-avatar" src="https://p.zhheo.com/5c28me20490681780846024839.png!cover" alt="" loading="lazy" onerror="this.style.display='none'"/><span>极数本源</span></a></div><div class="power-item-link"><a href="https://yayatool.com/" rel="external nofollow" target="_blank" title="鸭鸭工具"><img class="power-item-avatar" src="https://p.zhheo.com/XyVRgf25290881786348432234.png!cover" alt="" loading="lazy" onerror="this.style.display='none'"/><span>鸭鸭工具</span></a></div><div class="power-item-link"><a href="https://www.mysticstars.cn/" rel="external nofollow" target="_blank" title="MysticStars"><img class="power-item-avatar" src="https://p.zhheo.com/FVZw4022790481711968147995.png!cover" alt="" loading="lazy" onerror="this.style.display='none'"/><span>MysticStars</span></a></div><div class="power-item-link"><a href="https://tempmail100.com/" rel="external nofollow" target="_blank" title="Temp Mail"><img class="power-item-avatar" src="https://p.zhheo.com/7PCfvp24590681749693705414.png!cover" alt="" loading="lazy" onerror="this.style.display='none'"/><span>Temp Mail</span></a></div><div class="power-item-link"><a href="https://wangkay.top/" rel="external nofollow" target="_blank" title="小妖客栈"><img class="power-item-avatar" src="https://p.zhheo.com/vGJj7g25390281739507333970.png!cover" alt="" loading="lazy" onerror="this.style.display='none'"/><span>小妖客栈</span></a></div><div class="power-item-link"><a href="https://www.haozhuji.net/" rel="external nofollow" target="_blank" title="好主机"><img class="power-item-avatar" src="https://p.zhheo.com/hYVS8m23390181767925293219.webp!cover" alt="" loading="lazy" onerror="this.style.display='none'"/><span>好主机</span></a></div><div class="power-item-link"><a href="https://liyinwaihe.com/" rel="external nofollow" target="_blank" title="狄伊"><img class="power-item-avatar" src="https://p.zhheo.com/5D9YA723390581746698433839.png!cover" alt="" loading="lazy" onerror="this.style.display='none'"/><span>狄伊</span></a></div><div class="power-item-link"><a href="https://webfem.com/" rel="external nofollow" target="_blank" title="webfem"><img class="power-item-avatar" src="https://p.zhheo.com/xGl0kW2439098
6321758181243260.png!cover" alt="" loading="lazy" onerror="this.style.display='none'"/><span>webfem</span></a></div><div class="power-item-link"><a href="https://www.tsycdn.com/" rel="external nofollow" target="_blank" title="蓝易云CDN"><img class="power-item-avatar" src="https://p.zhheo.com/1IHJIH22790481776675567193.png!cover" alt="" loading="lazy" onerror="this.style.display='none'"/><span>蓝易云CDN</span></a></div><div class="power-item-link"><a href="https://xifeng.net/" rel="external nofollow" target="_blank" title="西风往事"><img class="power-item-avatar" src="https://p.zhheo.com/HQJZDR23491181762744594785.webp!cover" alt="" loading="lazy" onerror="this.style.display='none'"/><span>西风往事</span></a></div></div></div></div></div><span class="sidebar-menu-item-title">网站信息</span><div class="webinfo"><div class="webinfo-item"><div class="webinfo-item-title"><i class="item-icon heoblogIcon icon-file-word-fill"></i><div class="item-name">全站字数 :</div></div><div class="item-count">923.7k</div></div></div></div></div><div id="keyboard-tips"> <div class="keyboardTitle">博客快捷键</div><div class="keybordList"> <div class="keybordItem" data-action="keyboard"><div class="keyGroup"><div class="key">shift </div><div class="key">K </div></div><div class="keyContent"> <div class="content">关闭快捷键功能</div></div></div><div class="keybordItem" data-action="console"><div class="keyGroup"><div class="key">shift </div><div class="key">A </div></div><div class="keyContent"> <div class="content">打开中控台</div></div></div><div class="keybordItem" data-action="music"><div class="keyGroup"><div class="key">shift </div><div class="key">M</div></div><div class="keyContent"> <div class="content" id="keyboard_Tips_Music">播放音乐</div></div></div><div class="keybordItem" data-action="darkmode"><div class="keyGroup"><div class="key">shift </div><div class="key">D</div></div><div class="keyContent"> <div class="content" id="keyboard_Tips_Darkmode">深色/浅色显示模式</div></div></div><div class="keybordItem" data-action="search"><div class="keyGroup"><div class="key">⌘/Ctrl</div><div class="key">F</div></div><div class="keyContent"> <div class="content">站内搜索</div></div></div><div class="keybordItem keyboard-shortcut-tts" data-action="tts" hidden="hidden"><div class="keyGroup"><div class="key">shift </div><div class="key">T</div></div><div class="keyContent"> <div class="content">文章全文朗读</div></div></div><div class="keybordItem keyboard-shortcut-podcast" data-action="podcast" hidden="hidden"><div class="keyGroup"><div class="key">shift </div><div class="key">P</div></div><div class="keyContent"> <div class="content">文章播客陪读</div></div></div><div class="keybordItem" data-action="chat"><div class="keyGroup"><div class="key">shift </div><div class="key">C</div></div><div class="keyContent"> <div class="content">打开AI智能对话</div></div></div><div class="keybordItem" data-action="home"><div class="keyGroup"><div class="key">shift </div><div class="key">H</div></div><div class="keyContent"> <div class="content">返回首页</div></div></div><div class="keybordItem" data-action="links"><div class="keyGroup"><div class="key">shift </div><div class="key">L</div></div><div class="keyContent"> <div class="content">友链页面</div></div></div></div></div><div class="post" id="body-wrap"><button class="post-audio-prompt sr-only" type="button" data-audio-target="post-tts" aria-label="本文支持全文语音朗读。按空格键或者回车键播放和暂停。"></button><header class="post-bg" id="page-header" style="background-image: url('https://p.zhheo.com/wrUReo24490481714022264296.png!cover')"><nav id="nav" onclick="heo.onNavBlankClickCloseConsole(event)"><div id="nav-inner"><div id="nav-left"><div id="toggle-menu"><a class="site-page" rel="nofollow" href="javascript:void(0);" title="菜单" role="button"><i class="ri-menu-5-fill"></i></a></div><div class="back-home-button"><i class="back-home-button-icon heoblogIcon icon-apps-fill"></i><div class="back-menu-list-groups"><div class="back-menu-list-group"><div class="back-menu-list-title">博客</div><div class="back-menu-list"><a class="back-menu-item" href="https://zhheo.com/" rel="external nofollow" title="访问主页" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/20232e121c3fb2daa71897d26a515e030f49073402.png!cover_mini" alt="主页图标"/><span class="back-menu-item-text">主页</span></a><a class="back-menu-item" href="/" title="访问博客" target="_self"><img class="back-menu-item-icon" src="https://p.zhheo.com/20234681e06b8e086aa5b15481cb89fd38c7071002.png!cover_mini" alt="博客图标"/><span class="back-menu-item-text">博客</span></a><a class="back-menu-item" href="https://log.zhheo.com/" rel="external nofollow" title="访问HeoLog" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/ohhrmU24190881786350701280.avif!cover_mini" alt="HeoLog图标"/><span class="back-menu-item-text">HeoLog</span></a></div></div><div class="back-menu-list-group"><div class="back-menu-list-title">应用</div><div class="back-menu-list"><a class="back-menu-item" href="/p/671f98c8.html" title="访问洪绘敲木鱼" target="_self"><img class="back-menu-item-icon" src="https://p.zhheo.com/20238366720da498fb5755e8c714128097fc074102.png!cover_mini" alt="洪绘敲木鱼图标"/><span class="back-menu-item-text">洪绘敲木鱼</span></a><a class="back-menu-item" href="https://apps.apple.com/cn/app/dns%E6%B5%8B%E9%80%9F/id6470105015" rel="external nofollow" title="访问DNS测速" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/xnbgWd22890381711434808769.png!cover_mini" alt="DNS测速图标"/><span class="back-menu-item-text">DNS测速</span></a><a class="back-menu-item" href="https://yatu.zhheo.com/" rel="external nofollow" title="访问洪绘压图" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/upload/2026/08/10/webp/2700020260810082606.webp!cover_mini" alt="洪绘压图图标"/><span class="back-menu-item-text">洪绘压图</span></a><a class="back-menu-item" href="https://blog.zhheo.com/p/9yuhxjpl.html" title="访问洪绘动图" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/upload/2026/08/10/webp/9511820260810082629.webp!cover_mini" alt="洪绘动图图标"/><span class="back-menu-item-text">洪绘动图</span></a><a class="back-menu-item" href="https://pdf.zhheo.com/" rel="external nofollow" title="访问洪绘电子章" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/upload/2026/08/10/webp/0621720260810082655.webp!cover_mini" alt="洪绘电子章图标"/><span class="back-menu-item-text">洪绘电子章</span></a><a class="back-menu-item" href="https://blog.zhheo.com/p/0tr5lmby.html" title="访问洪绘历史记录" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/upload/2026/08/10/webp/4622420260810082719.webp!cover_mini" alt="洪绘历史记录图标"/><span class="back-menu-item-text">洪绘历史记录</span></a><a class="back-menu-item" href="https://sky.zhheo.com/" rel="external nofollow" title="访问洪绘星空" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/0hcpzw25790881786416297110.png!cover_mini" alt="洪绘星空图标"/><span class="back-menu-item-text">洪绘星空</span></a></div></div><div class="back-menu-list-group"><div class="back-menu-list-title">服务</div><div class="back-menu-list"><a class="back-menu-item" href="https://ai.zhheo.com/" rel="external nofollow" title="访问洪墨AI" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/EOjpsa22490781720592484600.png!cover_mini" alt="洪墨AI图标"/><span class="back-menu-item-text">洪墨AI</span></a><a class="back-menu-item" href="https://wechat.zhheo.com/" rel="external nofollow" title="访问公众号" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/202319c8ac4827b3c198908bfebf6867d971074702.png!cover_mini" alt="公众号图标"/><span class="back-menu-item-text">公众号</span></a><a class="back-menu-item" href="https://zhheo.com/music/" rel="external nofollow" title="访问音乐播放" target="_blank"><img class="back-menu-item-icon" src="https://p.zhheo.com/upload/2026/08/10/webp/3543920260810082730.webp!cover_mini" alt="音乐播放图标"/><span class="back-menu-item-text">音乐播放</span></a></div></div><div class="back-menu-list-group"><div class="back-menu-list-title">表情</div><div class="back-menu-list"><a class="back-menu-item" href="/p/2daa6a7b.html" title="访问Heo" target="_self"><img class="back-menu-item-icon" src="https://p.zhheo.com/2023af0657c4847e2b4ebc558f382ca5119c073402.png!cover_mini" alt="Heo图标"/><span class="back-menu-item-text">Heo</span></a><a class="back-menu-item" href="/p/5115d869.html" title="访问熊猫二憨" target="_self"><img class="back-menu-item-icon" src="https://p.zhheo.com/2023ce09680d1c1b2c334a6f832a7db9336f074402.png!cover_mini" alt="熊猫二憨图标"/><span class="back-menu-item-text">熊猫二憨</span></a></div></div><a class="back-menu-bottom-btn" href="https://zhheo.com/" rel="external nofollow" target="_blank"><img class="back-menu-bottom-btn-icon" src="https://p.zhheo.com/8DSTSS20990281646044689944.PNG!cover_mini" alt="返回主站图标"/><span class="back-menu-bottom-btn-text">更多我的项目</span></a></div></div><a id="site-name" href="/" title="返回博客主页" heotip="返回博客主页"><i class="heoblogIcon icon-heologo" style="font-size: 16px;"></i></a><div class="nav-button" id="nav-update" style="display:none"><a class="site-page" href="javascript:void(0);" title="发现新版本,点击更新" heotip="发现新版本,点击更新" rel="nofollow"><i class="heoblogIcon icon-arrow-up-line"></i><span class="nav-update-text">新更新</span></a></div></div><div id="page-name"><a id="page-name-text" onclick="btf.scrollToDest(0, 500)" title="返回顶部"></a></div><div id="nav-middle"><div class="menus_items"><div class="menus_item"><button class="site-page" type="button" aria-haspopup="true" aria-expanded="false"><span> 文库</span><i class="fas fa-chevron-down expand"></i></button><ul class="menus_item_child"><li><a class="site-page child" href="/archives/"><i class="fa-fw ri-file-list-3-fill"></i><span> 全部文章</span></a></li><li><a class="site-page child" href="/categories/"><i class="fa-fw ri-folders-fill"></i><span>
632 分类列表</span></a></li><li><a class="site-page child" href="/tags/"><i class="fa-fw ri-price-tag-3-fill"></i><span> 标签列表</span></a></li></ul></div><div class="menus_item"><button class="site-page" type="button" aria-haspopup="true" aria-expanded="false"><span> 专栏</span><i class="fas fa-chevron-down expand"></i></button><ul class="menus_item_child"><li><a class="site-page child" href="/categories/%E6%88%91%E7%9A%84%E9%A1%B9%E7%9B%AE/"><i class="fa-fw ri-apps-2-fill"></i><span> 我的项目</span></a></li><li><a class="site-page child" href="/categories/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/"><i class="fa-fw ri-lightbulb-fill"></i><span> 经验分享</span></a></li><li><a class="site-page child" href="/categories/%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90/"><i class="fa-fw ri-download-cloud-fill"></i><span> 软件推荐</span></a></li></ul></div><div class="menus_item"><button class="site-page" type="button" aria-haspopup="true" aria-expanded="false"><span> 友链</span><i class="fas fa-chevron-down expand"></i></button><ul class="menus_item_child"><li><a class="site-page child" target="_blank" rel="noopener external nofollow" href="https://sky.zhheo.com"><i class="fa-fw ri-rss-fill"></i><span> 文章推荐</span></a></li><li><a class="site-page child" href="/link/"><i class="fa-fw ri-group-fill"></i><span> 友链列表</span></a></li></ul></div><div class="menus_item"><button class="site-page" type="button" aria-haspopup="true" aria-expanded="false"><span> 我的</span><i class="fas fa-chevron-down expand"></i></button><ul class="menus_item_child"><li><a class="site-page child" href="/equipment/"><i class="fa-fw ri-device-fill"></i><span> 我的装备</span></a></li><li><a class="site-page child" href="/stats/"><i class="fa-fw ri-bar-chart-fill"></i><span> 数据统计</span></a></li><li><a class="site-page child" href="/about/"><i class="fa-fw ri-contacts-fill"></i><span> 关于本站</span></a></li></ul></div></div></div><div id="nav-right"><div class="nav-button" id="travellings_button"><a class="site-page" target="_blank" rel="noopener external nofollow" href="https://www.travellings.cn/train.html" title="前往开往项目" heotip="前往开往项目"><i class="heoblogIcon icon-train-line"></i></a></div><div class="nav-button" id="randomPost_button"><a class="site-page" onclick="toRandomPost()" title="随机前往一个文章" heotip="随机前往一个文章" rel="nofollow"><i class="heoblogIcon icon-dice-line"></i></a></div><div class="nav-button" id="search-button"><a class="site-page social-icon search" title="站内搜索" href="javascript:void(0);" heotip="搜索" rel="nofollow"><i class="heoblogIcon icon-search-2-line"></i><span class="search-btn-spinner" aria-hidden="true"></span></a></div><div class="nav-button" id="postChatNav-button"><a class="site-page social-icon search" title="AI 智能对话" href="javascript:togglePostChatContainer();" heotip="AI 智能对话" rel="nofollow"><svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg" style="width:22px;height:22px"><path d="M20.7134 8.12811L20.4668 8.69379C20.2864 9.10792 19.7136 9.10792 19.5331 8.69379L19.2866 8.12811C18.8471 7.11947 18.0555 6.31641 17.0677 5.87708L16.308 5.53922C15.8973 5.35653 15.8973 4.75881 16.308 4.57612L17.0252 4.25714C18.0384 3.80651 18.8442 2.97373 19.2761 1.93083L19.5293 1.31953C19.7058 0.893489 20.2942 0.893489 20.4706 1.31953L20.7238 1.93083C21.1558 2.97373 21.9616 3.80651 22.9748 4.25714L23.6919 4.57612C24.1027 4.75881 24.1027 5.35653 23.6919 5.53922L22.9323 5.87708C21.9445 6.31641 21.1558 7.11947 20.7134 8.12811ZM10 3H14V5H10C6.68629 5 4 7.68629 4 11C4 14.61 6.46208 16.9656 12 19.4798V17H14C17.3137 17 20 14.3137 20 11H22C22 15.4183 18.4183 19 14 19V22.5C9 20.5 2 17.5 2 11C2 6.58172 5.58172 3 10 3Z"></path></svg></a></div><div class="nav-button" id="nav-console"><a class="console_switchbutton" onclick="heo.toggleConsole()" title="中控台" href="javascript:void(0);" rel="external nofollow" heotip="中控台"><img class="console-icon-avatar" id="navConsoleAvatar" alt="用户头像" style="display:none"/><i class="heoblogIcon icon-dashboard-fill console-icon-dashboard"></i><i class="heoblogIcon icon-guanbi console-icon-close"></i></a></div><div class="nav-button" id="nav-totop" onclick="btf.scrollToDest(0, 500)" heotip="返回顶部"><a class="totopbtn" rel="nofollow" href="javascript:void(0);" title="返回顶部"><i class="heoblogIcon icon-arrow-up-line"></i><span id="percent">0</span></a></div></div></div></nav><div class="coverdiv" id="coverdiv"><img class="nolazyload" id="post-cover" src="https://p.zhheo.com/wrUReo24490481714022264296.png!cover" alt="cover" fetchpriority="high" decoding="async"></div>
632<div class="post-cover-aside"><a class="fancybox post-cover-aside-link" target="_blank" rel="noopener external nofollow" href="https://p.zhheo.com/wrUReo24490481714022264296.png!cover" data-fancybox="images" data-caption="洪绘敲木鱼App - 打节拍敲音效解压神器"><img class="post-cover-aside-img nolazyload" src="https://p.zhheo.com/wrUReo24490481714022264296.png!cover" alt="cover"></a></div><div id="post-info"><div id="post-firstinfo"><div class="meta-firstline"><a class="post-meta-original" title="该文章为原创文章,注意版权协议" href="/cc/" heotip="该文章为原创文章,注意版权协议">原创</a><span class="post-meta-categories"><a class="post-meta-categories" href="/categories/%E6%88%91%E7%9A%84%E9%A1%B9%E7%9B%AE/" title="我的项目" heotip="查看更多 我的项目 分类的文章">我的项目</a></span></div></div><h1 class="post-title">洪绘敲木鱼App - 打节拍敲音效解压神器</h1><div id="post-meta"><div class="meta-secondline"><span class="post-meta-date" heotip="这篇文章创建于
6332022-10-14"><i class="heoblogIcon icon-calendar-todo-fill fas fa-calendar"></i><time datetime="2022-10-14T01:50:28.000Z" title="2022-10-14">2022-10-14</time></span><span class="post-meta-ttstime" heotip="点击播放全文播客陪读" data-tts-target="post-podcast" title="点击播放全文播客陪读"><i class="ri-mic-2-ai-fill" title="播客陪读"></i><div class="post-meta-ttstime-bars" role="progressbar" aria-label="播客陪读进度"></div><span class="post-meta-ttstime-toggle" aria-hidden="true"><i class="ri-pause-fill post-meta-ttstime-icon-pause" hidden="hidden"></i><i class="ri-play-fill post-meta-ttstime-icon-play"></i></span></span><span class="post-meta-wechat" title="该文章已在公众号中更新" heotip="该文章已在公众号中更新" onclick="pjax.loadUrl('/rss/')"><i class="heoblogIcon icon-wechat-2-fill"></i>公众号同步</span><span class="post-meta-position" title="作者IP属地为北京" heotip="作者IP属地为北京"><i class="heoblogIcon icon-map-pin-fill"></i>北京</span><a class="post-meta-pv" id="" data-flag-title="热度" href="/p/b7bb7832.html" title="热度" heotip="热度"><i class="heoblogIcon icon-fire-fill"></i><span class="post-meta-label">热度:</span><span id="busuanzi_page_pv"><span class="heo-loading-spin" aria-hidden="true"><i></i></span></span></a><span class="post-meta-commentcount" title="评论数" heotip="评论数" onclick="heo.scrollTo('post-comment');"><i class="heoblogIcon icon-chat-1-fill"></i><span class="post-meta-label">评论:</span><a href="/p/671f98c8.html#post-comment"><span id="twikoo-count">0</span></a></span></div></div></div><div class="post-radius-bottom"></div></header><main class="layout" id="content-inner"><div id="post"><div class="post-ai" data-nosnippet="data-nosnippet"><div class="ai-title"><a class="ai-title-left" href="/p/ec57d8b2.html" title="查看详情" heotip="了解通过人工智能生成文章摘要"><i class="heoblogIcon icon-jiqiren ai-title-icon"></i><div class="ai-title-text">文章摘要</div><div class="ai-link"><i class="heoblogIcon icon-arrow-right-s-line"></i></div></a><div class="ai-tag" id="ai-tag" heotip="了解HeoGPT">HeoGPT</div></div><div class="ai-explanation">本文介绍了作者开发的<strong>敲木鱼应用</strong>。该应用是一款简洁易用的敲木鱼软件,拥有漂亮的界面和优秀的交互,支持<strong>自定义音效</strong>、<strong>自动敲击</strong>、<strong>音效协同</strong>等多种功能,并已上架<strong>App Store</strong>。文章中还提供了<strong>小程序版</strong>的敲木鱼应用供用户体验。</div><div class="ai-suggestions"></div><div class="ai-input"><input class="ai-input-field" type="text" name="ai-question" id="ai-input-field" placeholder="针对这个文章有什么想问的?"/><button class="ai-input-send ai-input-send-disabled" type="button" title="发送">发送<span class="ai-input-shortcut-mod"></span><i class="ri-corner-down-left-line ai-input-shortcut-enter"></i></button></div></div><div class="post-audio post-tts is-suppressed-by-podcast" id="post-tts" data-nosnippet="data-nosnippet" data-audio-channel="tts" data-audio-title="洪绘敲木鱼App - 打节拍敲音效解压神器" data-audio-artist="å¼ æ´ªHeo" data-audio-cover="https://p.zhheo.com/wrUReo24490481714022264296.png!cover" data-audio-album="文章朗读" data-audio-play-title="全文朗读" data-audio-aria-play="播放全文朗读" data-audio-aria-pause="暂停全文朗读" data-audio-tip-play="点击播放全文朗读" data-audio-tip-pause="点击暂停全文朗读" data-audio-tip-continue="点击继续播放全文朗读" data-audio-label-loading="加载中..." data-audio-label-playing="朗读中..." data-audio-label-continue="继续播放" data-audio-float-dock="heoTts"><div class="post-audio-progress" aria-hidden="true"></div><div class="post-audio-label"><i class="ri-speak-ai-line" aria-hidden="true"></i><span>本文支持全文朗读</span></div><div class="post-audio-controls"><button class="post-audio-btn post-audio-speed" type="button" title="切换播放倍速" aria-label="播放倍速 x1" heotip="切换播放倍速"><span class="post-audio-btn-label">x1</span></button><button class="post-audio-btn post-audio-play" type="button" title="播放" aria-label="播放全文朗读" heotip="播放全文朗读"><span class="post-audio-btn-icon-slot"><i class="ri-play-fill post-audio-btn-play-icon"></i><span class="post-audio-btn-loader" aria-hidden="true"></span></span><span class="post-audio-btn-label">播放</span></button><button class="post-audio-btn post-audio-pause" type="button" title="暂停" aria-label="暂停全文朗读" hidden="hidden"><span class="post-audio-btn-icon-slot"><i class="ri-pause-fill"></i></span><span class="post-audio-btn-label">暂停</span></button></div><audio class="post-audio-audio" preload="none" src="https://s3.zhheo.com/heoblog/tts/671f98c8.mp3?v=d22a8dd6"></audio></div><div class="post-audio post-podcast" id="post-podcast" data-nosnippet="data-nosnippet" data-audio-channel="podcast" data-audio-title="洪绘敲木鱼App - 打节拍敲音效解压神器" data-audio-artist="å¼ æ´ªHeo" data-audio-cover="https://p.zhheo.com/wrUReo24490481714022264296.png!cover" data-audio-album="文章播客" data-audio-play-title="播客陪读" data-audio-aria-play="播放全文播客陪读" data-audio-aria-pause="暂停全文播客陪读" data-audio-tip-play="点击播放全文播客陪读" data-audio-tip-pause="点击暂停全文播客陪读" data-audio-tip-continue="点击继续播放全文播客陪读" data-audio-label-loading="加载中..." data-audio-label-playing="陪读中..." data-audio-label-continue="继续播放" data-audio-float-dock="heoPodcast" data-audio-lrc="https://s3.zhheo.com/heoblog/podcast/671f98c8.lrc?v=8e55c7ca"><div class="post-audio-progress" aria-hidden="true"></div><div class="post-audio-label"><i class="ri-mic-2-ai-line" aria-hidden="true"></i><span>本文支持播客陪读</span></div><div class="post-audio-controls"><button class="post-audio-btn post-audio-speed" type="button" title="切换播放倍速" aria-label="播放倍速 x1" heotip="切换播放倍速"><span class="post-audio-btn-label">x1</span></button><button class="post-audio-btn post-audio-play" type="button" title="播放" aria-label="播放全文播客陪读" heotip="播放全文播客陪读"><span class="post-audio-btn-icon-slot"><i class="ri-play-fill post-audio-btn-play-icon"></i><span class="post-audio-btn-loader" aria-hidden="true"></span></span><span class="post-audio-btn-label">播放</span></button><button class="post-audio-btn post-audio-pause" type="button" title="暂停" aria-label="暂停全文播客陪读" hidden="hidden"><span class="post-audio-btn-icon-slot"><i class="ri-pause-fill"></i></span><span class="post-audio-btn-label">暂停</span></button></div><audio class="post-audio-audio" preload="none" src="https://s3.zhheo.com/heoblog/podcast/671f98c8.mp3?v=531c2233"></audio></div><article class="post-content" id="article-container"><p>一开始做敲木鱼的时候也是受到网上很多电子木鱼的启发,用了一下目前的几个木鱼软ä
633»¶ï¼Œä¸€ä¸ªæ˜¯ç•Œé¢ä»¤äººçª’息,交互体验令人崩溃,还有音效少而且有点太贵了。</p>
634<p>所以想着能够根据自己的喜好和经验不断完善,构建出现有在用户体验和功能性上也许是最强的音效敲击应用。</p>
635<h2 id="设计"><a href="#设计" class="headerlink" title="设计"></a>设计</h2><p>在这个软件设计简洁,保证在闭眼盲操作的情况下点击屏幕仍然可以正常的使用。</p>
636<p>并且在切换不同的音效上,在偏好设置有一些小动画,而且不同的音效还配合了不同的背景色彩、文字色彩。让人使用起来有赏心悦目的感觉。</p>
637<p>所有插画均为我自己绘制的,音效也是自己采样调音的,相信能给你带来独一无二的有趣体验。</p>
638<p><img src= "/img/b_ld.png" data-lazy-src="https://p.zhheo.com/Fcn55Y21690281675909996936.jpeg!blogimg" alt="鸡哥"></p>
639<p>并且支持多个语言。</p>
640<p>承诺无广告。</p>
641<h2 id="交互"><a href="#交互" class="headerlink" title="交互"></a>交互</h2><p>在交互上主要仍然通过点击操作来触发音效,比较困难的是点击是在按下时触发音效,而不是抬起,这样有更好的手感。在SwiftUI上制作这种还比较困难。最后还是克服了。</p>
642<p>比较方便的点是比如敲木鱼时,最开始人们的心情总是期望平静,一开始会比较慢一些,随着时间的推移会越来越快。「敲木鱼」内置了四个速度,分别名为「深邃」「生命」「乐章」「迸发」。四个速度可以在主界面就可以点击切换。不需要每次调节速度都要点开设置。</p>
643<p><img src= "/img/b_ld.png" data-lazy-src="https://p.zhheo.com/zACz9j20790281675910047006.jpeg!blogimg" alt="偏好设置"></p>
644<p>并且可以在主界面就可以停止自动播放,不需要进入设置中,也不需要进多任务结束掉程序。你可以在设置按钮旁边就点击停止。</p>
645<p>有时候这些交互细节就取决于工具类软件的好用与否。</p>
646<h2 id="功能"><a href="#功能" class="headerlink" title="功能"></a>功能</h2><ul>
647<li><strong>上百款</strong>音效,<strong>数百个</strong>音频文件无限畅玩</li>
648<li>自定义音效(支持录音和导入音频文件、自定义颜色与图案)</li>
649<li>支持音乐合奏,让敲木鱼变成打击乐与音乐配合</li>
650<li>支持自动敲击(及自动停止),并支持通过健康App记录正念时间</li>
651<li>支持灵动岛、桌面组件、锁屏组件、锁屏实时活动、mac菜单栏、mac通知中心组件</li>
652<li>支持音乐模式:每次敲击都不同音效(仅部分音效支持)</li>
653<li>支持伴奏模式(Lv.10):敲击音效时可以有bgm配音(仅部分音效支持)</li>
654<li>支持音效协同:多个音效按照你设置的规则自动演奏</li>
655<li>支持摇晃检测</li>
656<li>支持震动控制</li>
657<li>漂亮的界面和优秀的交互</li>
658<li>文本显示</li>
659<li>Apple Watch支持</li>
660<li>Mac支持</li>
661</ul>
662<h2 id="上架"><a href="#上架" class="headerlink" title="上架"></a>上架</h2><p>目前应用已经上架到App Store,喜欢的小伙伴不要错过。</p>
663<p>系统要求iOS15+,watchOS 8+,macOS 13.0+</p>
664<p>最后感谢支持的小伙伴们。</p>
665<p><a target="_blank" rel="noopener external nofollow" href="https://apps.apple.com/cn/app/%E6%95%B2%E6%9C%A8%E9%B1%BC/id6443798663">在App Store上查看「敲木鱼」</a></p>
666<p><img src= "/img/b_ld.png" data-lazy-src="https://p.zhheo.com/upload/2026/08/03/png/1288020260803091547.png!blogimg" alt="敲木鱼"></p>
667<h2 id="小程序"><a href="#小程序" class="headerlink" title="小程序"></a>小程序</h2><p>同时给想要尝鲜的小伙伴提供了小程序版,无需下载免费安装。小程序版阉割了多种音效、多点触控、自动敲击(及停止)等几乎所有特色功能,只保留敲木鱼。如果只喜欢敲木鱼的话小程序也完全够用了。</p>
668<p><img src= "/img/b_ld.png" data-lazy-src="https://p.zhheo.com/l0tRxo20991181668212949932.png!blogimg" alt="小程序"></p>
669<h2 id="微信小程序"><a href="#微信小程序" class="headerlink" title="微信小程序"></a>微信小程序</h2><p>目前只有iOS版本,安卓用户可以使用微信小程序。不过目前微信小程序<strong>只有基础功能</strong>,未来会逐步完善。</p>
670<p><img src= "/img/b_ld.png" data-lazy-src="https://p.zhheo.com/2025786b3e74df5bbda1514039700c424490250312.webp!blogimg" alt="小程序版本"></p>
671</article><div class="post-copyright"><div class="post-copyright__author_group"><a class="post-copyright__author_img" href="/about/" title="关于博主" heotip="关于博主"><img class="post-copyright__author_img_back" src="https://p.zhheo.com/zMSk5X24291281735177602587.png!cover" alt="头像背景"><img class="post-copyright__author_img_front" src="https://p.zhheo.com/hLS9mH22191281735177701087.png!cover" alt="Guli形象"></a><div class="post-copyright__author_name">张洪Heo</div><div class="post-copyright__author_desc">分享设计与科技生活</div></div><div class="post-tools" id="post-tools"><div class="post-tools-left"><div class="post-reward"><a class="reward-button button--animated" href="https://zhheo.com/rewards/" rel="external nofollow" target="_blank" title="打赏作者"><span class="reward-button-content"><i class="heoblogIcon icon-hand-heart-fill"></i> 打赏作者</span></a></div><div class="reward-link mode"><a class="reward-link-button" href="/rss/"><i class="heoblogIcon icon-plant-fill"></i>订阅</a></div></div></div><div class="post-copyright__notice"><span class="post-copyright-info">主观感受,仅供参考。本文是原创文章,采用 <a href="https://blog.zhheo.com/cc/" target="_blank">CC BY-NC-ND 4.0</a> 协议,完整转载请注明来自 <a href="https://blog.zhheo.com" target="_blank">张洪Heo</a></span></div></div><div class="post-bottom-tools"><div class="post-tools-left"><div class="tag_share"><div class="post-meta__tag-list"><a class="post-meta__tags" href="/tags/%E5%BF%85%E7%9C%8B/"><span class="tags-punctuation">必看</span><span class="tagsPageCount">81</span></a><a class="post-meta__tags" href="/tags/%E7%83%AD%E9%97%A8/"><span class="tags-punctuation">热门</span><span class="tagsPageCount">75</span></a><a class="post-meta__tags" href="/tags/%E5%BC%80%E5%8F%91/"><span class="tags-punctuation">开发</span><span class="tagsPageCount">254</span></a><a class="post-meta__tags" href="/tags/Swift/"><span class="tags-punctuation">
671Swift</span><span class="tagsPageCount">127</span></a></div></div></div><div class="post-tools-right"> <a class="post-report" href="https://id.zhheo.com/me?view=report-create&amp;url=https%3A%2F%2Fblog.zhheo.com%2Fp%2F671f98c8.html&amp;work_name=%E6%B4%AA%E7%BB%98%E6%95%B2%E6%9C%A8%E9%B1%BCApp%20-%20%E6%89%93%E8%8A%82%E6%8B%8D%E6%95%B2%E9%9F%B3%E6%95%88%E8%A7%A3%E5%8E%8B%E7%A5%9E%E5%99%A8" rel="external nofollow" title="反馈与投诉" target="_blank">反馈与投诉</a></div></div><nav class="pagination-post" id="pagination"><div class="heo-dock-surface"><div class="prev-post pull-left"><a href="/p/86d6e9f2.html"><div class="pagination-info"><div class="label">上一篇</div><div class="prev_info">漫步者-W820NB双金标版上手:降噪令人惊喜,性价比不错</div></div></a></div><div class="next-post pull-right"><a href="/p/17b59afa.html"><div class="pagination-info"><div class="label">下一篇</div><div class="next_info">Mac如何连接不同WiFi使用不同的网络位置,自动切换网络位置教程</div></div></a></div></div></nav><div class="relatedPosts"><div class="headline"><i class="heoblogIcon icon-star-smile-fill"></i><span> 喜欢这篇文章的人也看了</span><div class="relatedPosts-link"><a onclick="event.preventDefault(); toRandomPost();" href="javascript:void(0);" rel="external nofollow" data-pjax-state="">随便逛逛</a></div></div><div class="relatedPosts-list"><div style="--heo-related-color:#e4573e"><a href="/p/ec57d8b2.html" title="如何让博客支持AI摘要,使用TianliGPT自动生成文章的AI摘要"><img class="cover" src="https://p.zhheo.com/QtoFUU22990481681533269291.png!cover" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2023-04-15</div><div class="title">如何让博客支持AI摘要,使用TianliGPT自动生成文章的AI摘要</div></div></a></div><div style="--heo-related-color:#434046"><a href="/p/ae8b3423.html" title="SwiftUI如何进行多语言设置,如何进行本地化?单复数变换?"><img class="cover" src="https://p.zhheo.com/PGJwe620690781625201166573.png!cover" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2021-07-02</div><div class="title">SwiftUI如何进行多语言设置,如何进行本地化?单复数变换?</div></div></a></div></div></div><hr/><div id="post-comment"><div class="comment-head"><div class="comment-headline"><i class="heoblogIcon icon-chat-1-fill"></i><span> 评论</span></div></div><div class="comment-wrap"><div><div id="twikoo-wrap"></div></div></div></div></div><div class="aside-content" id="aside-content"><div class="card-widget card-info heo-pointer-glow-host"><div class="heo-pointer-glow" aria-hidden="true"></div><div class="card-content"><div class="card-info-avatar is-center"><div class="author-info__top-group">   <div class="author-info__sayhi" id="author-info__sayhi" onclick="heo.changeSayHelloText()">你好啊!</div></div></div><div class="avatar-img-group"><div class="avatar-img css-anim-avatar" id="lottie_avatar" aria-hidden="true"><div class="lottie-stage"><img class="av-bg" src="/lottie/lottie_avatar/images/img_8.webp" alt="" aria-hidden="true"/><div class="av-rig"><img class="av-ear-r" src="/lottie/lottie_avatar/images/img_7.webp" alt="" aria-hidden="true"/><img class="av-ear-l" src="/lottie/lottie_avatar/images/img_6.webp" alt="" aria-hidden="true"/><img class="av-hand-l" src="/lottie/lottie_avatar/images/img_5.png" alt="" aria-hidden="true"/><img class="av-hand-r" src="/lottie/lottie_avatar/images/img_4.webp" alt="" aria-hidden="true"/><img class="av-ahoge" src="/lottie/lottie_avatar/images/img_3.webp" alt="" aria-hidden="true"/><img class="av-body" src="/lottie/lottie_avatar/images/img_2.webp" alt="" aria-hidden="true"/><img class="av-eyeball" src="/lottie/lottie_avatar/images/img_1.webp" alt="" aria-hidden="true"/><img class="av-pupil" src="/lottie/lottie_avatar/images/img_0.png" alt="" aria-hidden="true"/></div></div></div><div class="avatar-sticker" id="author-avatar-sticker"><span class="avatar-sticker-emoji" id="author-avatar-sticker-emoji" aria-hidden="true" hidden="hidden"></span><img class="avatar-sticker-img" id="author-avatar-sticker-img" src="https://p.zhheo.com/omxo3N22290781690363822143.png!cover" onerror="this.onerror=null;this.src='/img/b_av.webp'" alt=""/></div></div><div class="author-info__description_group"><div class="author-info__description">这有关于<b>产品、设计、开发</b>相关的问题和看法,还有<b>文章翻译</b>和<b>分享</b>。</div><div class="author-info__description">相信你可以在这里找到对你有用的<b>知识</b>和<b>教程</b>。</div></div><div class="author-info__bottom-group"><a class="author-info__bottom-group-left" href="/about"><div class="author-info__name">张洪Heo</div><div class="author-info__desc">分享设计与科技生活</div></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://space.bilibili.com/4218173" rel="external nofollow" target="_blank" title="Bilibili" heotip="Bilibili"><i class="heoblogIcon icon-bilibili-line"></i></a><a class="social-icon" href="https://github.com/zhheo" rel="external nofollow" target="_blank" title="Github" heotip="Github"><i class="heoblogIcon icon-github-line"></i></a></div></div></div></div><div class="sticky_layout"><div class="card-widget" id="card-toc"><div class="item-headline"><i class="heoblogIcon icon-menu-fill"></i><span>文章目录</span></div><div class="toc-content"><ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E8%AE%BE%E8%AE%A1"><span class="toc-text">设计</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%BA%A4%E4%BA%92"><span class="toc-text">交互</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%8A%9F%E8%83%BD"><span class="toc-text">功能</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%B8%8A%E6%9E%B6"><span class="toc-text">上架</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%B0%8F%E7%A8%8B%E5%BA%8F"><span class="toc-text">小程序</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F"><span class="toc-text">微信小程序</span></a></li></ol></div></div><div class="card-widget heo-right-widget wechat" id="card-wechat" onclick="pjax.loadUrl('/rss/')"><div class="wechat-card-left">
671<svg class="wechat-card-icon" viewBox="0 0 120 116" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><g fill="currentColor"><path d="M47.5360966,2.11813832 C82.1030966,-8.42086168 99.7190966,23.7951383 99.7190966,23.7951383 C93.3530966,20.3221383 74.2520966,16.4641383 53.8020966,27.0751383 C33.3520966,37.6861383 29.1070966,60.8391383 29.1070966,60.8391383 C20.7940966,51.9691383 20.4170966,37.6691383 20.4170966,37.6691383 C21.4000966,10.8301383 47.5360966,2.11813832 47.5360966,2.11813832 Z"></path><path d="M36.8570966,112.563138 C-13.1669034,102.868138 -1.78590339,59.1671383 10.7210966,39.9161383 C10.7210966,39.9161383 10.1580966,66.8951383 36.1550966,81.7911383 C36.1550966,81.7911383 39.2460966,83.1961383 38.2630966,87.6921383 L37.2790966,93.4531383 C37.2790966,93.4531383 35.9790966,97.3881383 38.4560966,97.8091383 C38.4560966,97.8091383 39.2470966,97.8091383 41.0730966,96.5441383 L50.6290966,90.2211383 C50.6290966,90.2211383 52.5960966,88.8161383 55.1250966,89.2371383 C57.6540966,89.6591383 73.8140966,93.8751383 89.8330966,80.5261383 C89.8320966,80.5261383 86.8820966,122.259138 36.8570966,112.563138 Z"></path><path d="M87.0220966,108.770138 C90.2540966,107.225138 105.992097,88.6751383 98.5430966,63.5231383 C91.0940966,38.3711383 65.8030966,32.7501383 65.8030966,32.7501383 C78.7310966,27.2701383 93.9070966,31.3441383 93.9070966,31.3441383 C116.952097,38.0891383 119.622097,60.0111383 119.622097,60.0111383 C124.118097,99.2141383 87.0220966,108.770138 87.0220966,108.770138 L87.0220966,108.770138 Z"></path></g></svg><div class="wechat-card-text">公众号订阅</div></div><i class="wechat-card-arrow heoblogIcon icon-arrow-right-line" aria-hidden="true"></i></div><div class="card-widget card-power"><div class="item-headline"><i class="heoblogIcon icon-hand-heart-fill"></i><span>正在赞助本站</span><a class="power-charge" href="https://zhheo.com/sponsor/" rel="external nofollow" target="_blank" title="赞助博主">赞助<i class="ri-arrow-right-up-line"></i></a></div><a id="power-star" href="https://zhheo.com/sponsor/" rel="external nofollow" target="_blank" title="推荐博主"> <div id="power-star-image"> </div><div class="power-star-body"><div id="power-star-title">爱发电加载中...</div><div id="power-star-desc">赞助博主,让你也出现在这里!</div></div></a><div class="power-list"> <div class="power-item"><div class="power-item-body"><div class="power-item-link"><a href="https://www.gaicas.com/" rel="external nofollow" target="_blank" title="草东日记">草东日记</a></div><div class="power-item-link"><a href="https://blog.adil.com.cn/" rel="external nofollow" target="_blank" title="Adil">Adil</a></div><div class="power-item-link"><a href="https://blog.528688.cn/" rel="external nofollow" target="_blank" title="HaoUp">HaoUp</a></div><div class="power-item-link"><a href="https://apizero.cn/" rel="external nofollow" target="_blank" title="极数本源">极数本源</a></div><div class="power-item-link"><a href="https://yayatool.com/" rel="external nofollow" target="_blank" title="鸭鸭工具">鸭鸭工具</a></div><div class="power-item-link"><a href="https://www.mysticstars.cn/" rel="external nofollow" target="_blank" title="MysticStars">MysticStars</a></div><div class="power-item-link"><a href="https://tempmail100.com/" rel="external nofollow" target="_blank" title="Temp Mail">Temp Mail</a></div><div class="power-item-link"><a href="https://wangkay.top/" rel="external nofollow" target="_blank" title="小妖客栈">小妖客栈</a></div><div class="power-item-link"><a href="https://www.haozhuji.net/" rel="external nofollow" target="_blank" title="好主机">好主机</a></div><div class="power-item-link"><a href="https://liyinwaihe.com/" rel="external nofollow" target="_blank" title="狄伊">狄伊</a></div><div class="power-item-link"><a href="https://webfem.com/" rel="external nofollow" target="_blank" title="webfem">webfem</a></div><div class="power-item-link"><a href="https://www.tsycdn.com/" rel="external nofollow" target="_blank" title="蓝易云CDN">蓝易云CDN</a></div><div class="power-item-link"><a href="https://xifeng.net/" rel="external nofollow" target="_blank" title="西风往事">西风往事</a></div></div></div></div></div><div class="card-widget card-hotpost"><div class="item-headline"><i class="heoblogIcon icon-fire-fill"></i><span>今日热门</span><a class="power-charge" href="/hot/" title="更多">更多<i class="ri-arrow-right-up-line"></i></a></div><div id="card-hotpost"></div></div><div class="card-widget card-recent-post"><div class="item-headline"><i class="heoblogIcon icon-map-2-line"></i><span>最近发布</span></div><div class="aside-list"><div class="aside-list-item"><a class="thumbnail" href="/p/kp6o6mwu.html" title="OpenClaw 接管你的油猴脚本:让 AI 直接读改网页脚本ï¼
671Œä¸ç”¨å†å¤åˆ¶ç²˜è´´"><img src="https://p.zhheo.com/dUxFek24490981789358264065.webp!cover_mini" onerror="this.onerror=null;this.src='/img/b_av.webp'" alt="OpenClaw 接管你的油猴脚本:让 AI 直接读改网页脚本,不用再复制粘贴头像"/></a><div class="content"><a class="title" href="/p/kp6o6mwu.html" title="OpenClaw 接管你的油猴脚本:让 AI 直接读改网页脚本,不用再复制粘贴">OpenClaw 接管你的油猴脚本:让 AI 直接读改网页脚本,不用再复制粘贴</a><time datetime="2026-09-14T04:30:00.000Z" title="创建 2026-09-14 12:30:00">2026-09-14</time><a class="article-recent_post_categories" href="/p/kp6o6mwu.html">经验分享</a></div></div><div class="aside-list-item"><a class="thumbnail" href="/p/kq0qyc9y.html" title="为 iPhone Duo 做设计:苹果官方设计原则全解读"><img src="https://p.zhheo.com/aTmeqV25090981789119710464.webp!cover_mini" onerror="this.onerror=null;this.src='/img/b_av.webp'" alt="为 iPhone Duo 做设计:苹果官方设计原则全解读头像"/></a><div class="content"><a class="title" href="/p/kq0qyc9y.html" title="为 iPhone Duo 做设计:苹果官方设计原则全解读">为 iPhone Duo 做设计:苹果官方设计原则全解读</a><time datetime="2026-09-11T08:59:56.000Z" title="创建 2026-09-11 16:59:56">2026-09-11</time><a class="article-recent_post_categories" href="/p/kq0qyc9y.html">经验分享</a></div></div><div class="aside-list-item"><a class="thumbnail" href="/p/0vmg6q9j.html" title="看到了淘宝闪购的AI评论,引发了我的思考"><img src="https://p.zhheo.com/Ym24cH24590981789116945773.webp!cover_mini" onerror="this.onerror=null;this.src='/img/b_av.webp'" alt="看到了淘宝闪购的AI评论,引发了我的思考头像"/></a><div class="content"><a class="title" href="/p/0vmg6q9j.html" title="看到了淘宝闪购的AI评论,引发了我的思考">看到了淘宝闪购的AI评论,引发了我的思考</a><time datetime="2026-09-11T08:07:52.000Z" title="创建 2026-09-11 16:07:52">2026-09-11</time><a class="article-recent_post_categories" href="/p/0vmg6q9j.html">闲聊杂谈</a></div></div><div class="aside-list-item"><a class="thumbnail" href="/p/j5ns9clc.html" title="如何在网页插入 livephoto ?实况照片 PVT 在线生成、动态JPG生成工具与嵌入工具"><img src="https://p.zhheo.com/rd3Uac25390981788948233393.webp!cover_mini" onerror="this.onerror=null;this.src='/img/b_av.webp'" alt="如何在网页插入 livephoto ?实况照片 PVT 在线生成、动态JPG生成工具与嵌入工具头像"/></a><div class="content"><a class="title" href="/p/j5ns9clc.html" title="如何在网页插入 livephoto ?实况照片 PVT 在线生成、动态JPG生成工具与嵌入工具">如何在网页插入 livephoto ?实况照片 PVT 在线生成、动态JPG生成工具与嵌入工具</a><time datetime="2026-09-09T08:27:20.000Z" title="创建 2026-09-09 16:27:20">2026-09-09</time><a class="article-recent_post_categories" href="/p/j5ns9clc.html">我的项目</a></div></div><div class="aside-list-item"><a class="thumbnail" href="/p/8p5a0k56.html" title="MacBook不进入休眠全新邪修:十几块钱的绿联HDMI欺骗器"><img src="https://p.zhheo.com/eej5sN20690981788502446578.webp!cover_mini" onerror="this.onerror=null;this.src='/img/b_av.webp'" alt="MacBook不进入休眠全新邪修:十几块钱的绿联HDMI欺骗器头像"/></a><div class="content"><a class="title" href="/p/8p5a0k56.html" title="MacBook不进入休眠全新邪修:十几块钱的绿联HDMI欺骗器">MacBook不进入休眠全新邪修:十几块钱的绿联HDMI欺骗器</a><time datetime="2026-09-04T06:00:00.000Z" title="创建 2026-09-04 14:00:00">2026-09-04</time><a class="article-recent_post_categories" href="/p/8p5a0k56.html">经验分享</a></div></div></div></div></div></div></main><footer id="footer"><div id="heo-footer-bar"><div class="footer-logo"> <i class="heoblogIcon icon-heologo"></i></div><div class="footer-bar-description">来自 å¼ æ´ªHeo 最新设计与科技的文章</div><a class="footer-bar-link" href="/archives/">查看全部</a></div><div id="footer_deal"><a class="deal_link" href="mailto:[email protected]" rel="external nofollow" title="mail" heotip="给我发邮件"><i class="heoblogIcon icon-mail-line"></i></a>
671<a class="deal_link" target="_blank" href="https://weibo.com/zhheo" title="微博" rel="noopener external nofollow noreferrer" heotip="微博"><i class="heoblogIcon icon-weibo-line"></i></a><a class="deal_link" target="_blank" href="https://twitter.com/zhheocom" rel="noopener external nofollow noreferrer" title="X" heotip="X"><i class="heoblogIcon icon-twitterx"></i></a><a class="deal_link" target="_blank" href="https://dribbble.com/zhheo/" rel="noopener external nofollow noreferrer" title="Dribbble" heotip="Dribbble"><i class="heoblogIcon icon-dribbble-line"></i></a><div class="footer_mini_logo css-anim-mini" id="footer_mini_logo" title="返回顶部" onclick="btf.scrollToDest(0, 500)" heotip="返回顶部"><div class="lottie-stage"><img class="fm-bg" src="/lottie/footer_mini_logo/images/img_0.webp" alt="" aria-hidden="true"/><div class="fm-rig"><img class="fm-ahoge" src="/lottie/footer_mini_logo/images/img_6.webp" alt="" aria-hidden="true"/><img class="fm-ear-r" src="/lottie/footer_mini_logo/images/img_5.webp" alt="" aria-hidden="true"/><img class="fm-ear-l" src="/lottie/footer_mini_logo/images/img_4.webp" alt="" aria-hidden="true"/><img class="fm-body" src="/lottie/footer_mini_logo/images/img_3.webp" alt="" aria-hidden="true"/><img class="fm-eyeball" src="/lottie/footer_mini_logo/images/img_2.webp" alt="" aria-hidden="true"/><img class="fm-pupil" src="/lottie/footer_mini_logo/images/img_1.webp" alt="" aria-hidden="true"/></div></div></div><a class="deal_link" target="_blank" href="https://github.com/zhheo/" rel="noopener external nofollow noreferrer" title="Github" heotip="Github"><i class="heoblogIcon icon-github-line"></i></a><a class="deal_link" target="_blank" href="https://www.pinterest.com/zhheocom/_created/" title="Pinterest" rel="noopener external nofollow noreferrer" heotip="Pinterest"><i class="heoblogIcon icon-pinterest-line"></i></a><a class="deal_link" target="_blank" href="https://space.bilibili.com/4218173/" rel="noopener external nofollow noreferrer" title="Bilibili" heotip="Bilibili"><i class="heoblogIcon icon-bilibili-line"></i></a><a class="deal_link" target="_blank" href="https://v.douyin.com/6SMbLRQ/" rel="noopener external nofollow noreferrer" title="Tiktok" heotip="Tiktok"><i class="heoblogIcon icon-tiktok"></i></a></div><div id="heo-footer"> <div class="footer-group"><h3 class="footer-title">软件</h3><div class="footer-links"><a class="footer-item" href="/p/671f98c8.html" title="敲木鱼" target="_blank" rel="noopener external nofollow noreferrer">敲木鱼</a><a class="footer-item" href="/p/4db484b3.html" title="轻节食" target="_blank" rel="noopener external nofollow noreferrer">轻节食</a><a class="footer-item" href="/p/9df485ea.html" title="比例计" target="_blank" rel="noopener external nofollow noreferrer">比例计</a></div></div><div class="footer-group"><h3 class="footer-title">产品</h3><div class="footer-links"><a class="footer-item" href="/tags/%E8%AE%BE%E8%AE%A1%E6%8A%A5%E5%91%8A/" title="设计报告" target="_blank" rel="noopener external nofollow noreferrer">设计报告</a><a class="footer-item" href="/tags/%E4%BA%A7%E5%93%81/" title="优质报告" target="_blank" rel="noopener external nofollow noreferrer">优质报告</a></div></div><div class="footer-group"><h3 class="footer-title">设计</h3><div class="footer-links"><a class="footer-item" href="/tags/Heocan/" title="Heocan" target="_blank" rel="noopener external nofollow noreferrer">Heocan</a><a class="footer-item" href="/tags/Sketch/" title="Sketch" target="_blank" rel="noopener external nofollow noreferrer">Sketch</a><a class="footer-item" href="/tags/%E4%BC%98%E8%B4%A8%E6%8A%A5%E5%91%8A/" title="设计报告" target="_blank" rel="noopener external nofollow noreferrer">设计报告</a><a class="footer-item" href="/tags/Photoshop/" title="Photoshop" target="_blank" rel="noopener external nofollow noreferrer">Photoshop</a></div></div><div class="footer-group"><h3 class="footer-title">开发</h3><div class="footer-links"><a class="footer-item" href="/tags/Hexo/" title="Hexo魔改" target="_blank" rel="noopener external nofollow noreferrer">Hexo魔改</a><a class="footer-item" href="/tags/Swift/" title="Swift开发" target="_blank" rel="noopener external nofollow noreferrer">Swift开发</a><a class="footer-item" href="/tags/%E7%BD%91%E9%A1%B5%E5%89%8D%E7%AB%AF/" title="网页前端" target="_blank" rel="noopener external nofollow noreferrer">网页前端</a></div></div><div class="footer-group"><h3 class="footer-title">生活</h3><div class="footer-links"><a class="footer-item" href="/equipment/" title="我的装备" target="_blank" rel="noopener external nofollow noreferrer">我的装备</a><a class="footer-item" href="/tags/%E8%AF%84%E6%B5%8B/" title="我的评测" target="_blank" rel="noopener external nofollow noreferrer">我的评测</a><a class="footer-item" href="/tags/%E6%B7%B7%E5%89%AA/" title="è
671§†é¢‘剪辑" target="_blank" rel="noopener external nofollow noreferrer">视频剪辑</a></div></div><div class="footer-group"><h3 class="footer-title">服务</h3><div class="footer-links"><a class="footer-item" href="https://zhheo.com/yinheluxiangju/" title="账号合租" target="_blank" rel="noopener external nofollow noreferrer">账号合租</a><a class="footer-item" href="https://ai.zhheo.com/" title="洪墨AI" target="_blank" rel="noopener external nofollow noreferrer">洪墨AI</a></div></div><div class="footer-group"><h3 class="footer-title">聚合</h3><div class="footer-links"><a class="footer-item" href="https://sky.zhheo.com/" title="洪绘星空" target="_blank" rel="noopener external nofollow noreferrer">洪绘星空</a><a class="footer-item" href="https://bf.zzxworld.com/s/612" title="BlogFinder" target="_blank" rel="noopener external nofollow noreferrer">BlogFinder</a><a class="footer-item" href="https://www.blogsclub.org/blog/718.html" title="BlogsClub" target="_blank" rel="noopener external nofollow noreferrer">BlogsClub</a></div></div><div class="footer-group"><h3 class="footer-title">协议</h3><div class="footer-links"><a class="footer-item" href="https://zhheo.com/agreement/privacy/" title="隐私协议" target="_blank" rel="noopener external nofollow noreferrer">隐私协议</a><a class="footer-item" href="/cookies/" title="Cookies" target="_blank" rel="noopener external nofollow noreferrer">Cookies</a><a class="footer-item" href="/cc/" title="版权协议" target="_blank" rel="noopener external nofollow noreferrer">版权协议</a></div></div><div class="footer-group"><div class="footer-title-group"><h3 class="footer-title">友链</h3><a class="random-friends-btn" href="javascript:heo.addFriendLinksInFooter();" rel="external nofollow" title="换一批友情链接" heotip="换一批友情链接"><i class="heoblogIcon icon-refresh-line"></i></a></div><div class="footer-links" id="friend-links-in-footer"><a class="footer-item" href="/link/" title="友情链接" heotip="跳转到友情链接">随机生成中..</a><a class="footer-item" href="/link/" title="友情链接" heotip="跳转到友情链接">随机生成中..</a><a class="footer-item" href="/link/" title="友情链接" heotip="跳转到友情链接">随机生成中..</a><a class="footer-item" href="/link/" title="友情链接" heotip="跳转到友情链接">随机生成中..</a></div></div></div><div id="footer-bar"><div class="footer-bar-links"><div class="footer-bar-left"><div id="footer-bar-tips"><div class="copyright">&copy;2019 - 2026 By <a class='footer-bar-link' target="_blank" title="前往我的主页" heotip="前往我的主页" href="https://zhheo.com/" rel="external nofollow"><img class="author-avatar" src="https://p.zhheo.com/8DSTSS20990281646044689944.PNG!cover_mini" alt="avatar" width="20" height="20">å¼ æ´ªHeo</a></div><div class="beian-group"><a class="footer-bar-link" href="https://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11011402054421" target="_blank" rel="noopener external nofollow noreferrer" title="京公网安备11011402054421号" heotip="前往全国互联网安全管理服务平台"><img class="beian-icon" src="https://p.zhheo.com/VPiMHH24891181731917988329.png!cover" alt="" aria-hidden="true" width="13" height="14"/><span>京公网安备11011402054421号</span></a><a class="footer-bar-link" href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank" rel="noopener external nofollow noreferrer" title="京ICP备19051325号-2" heotip="前往工业和信息化部政务服务平台">京ICP备19051325号-2</a><a class="footer-bar-link" href="https://status.zhheo.com/" target="_blank" rel="noopener external nofollow noreferrer" id="allsite_status" title="查看我的项目状态" heotip="查看我的项目状态"><div class="status-light"></div><span>加载中...</span></a></div></div></div><div class="footer-bar-right"><a class="footer-bar-link" href="/about/#post-comment">留言</a><a class="footer-bar-link" href="/rss/">订阅</a><a class="footer-bar-link" href="https://zhheo.com/rewards/" rel="external nofollow" target="_blank">打赏</a><a class="footer-bar-link" href="/update/">主题</a><a class="footer-bar-link footer-report-link" href="https://id.zhheo.com/me?view=report-create" rel="external nofollow" target="_blank">举报与反馈</a><a class="footer-bar-link cc" href="/cc/" title="cc协议" heotip="网站采用 署名-非商业性使用-禁止演绎 4.0 国际 标准"><i class="heoblogIcon icon-copyright-line"></i><i class="heoblogIcon icon-creative-commons-by-line"></i><i class="heoblogIcon icon-creative-commons-nc-line"></i><i class="heoblogIcon icon-creative-commons-nd-line"></i></a></div></div></div><div id="quit-box" onclick="RemoveRewardMask()"></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="translateLink" type="button" title="简繁转换">简</button><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button class="close" id="mobile-toc-button" type="button" title="目录"><i class="fas fa-list-ul"></i></button><a id="to_comment" href="#post-comment" title="直达评论"><i class="fas fa-comments"></i></a><button id="go-up" type="button" title="回到顶部"><i class="fas fa-arrow-up"></i></button></div></div><a class="needEndHide" id="ai-chat-fab" href="javascript:void(0);" rel="external nofollow" onclick="togglePostChatContainer(); return false;" title="AI 智能对话" heotip="AI 智能对话"><img src="/img/ai-fab.webp" alt="AI 智能对话"></a><div id="heosearch"><div class="search-dialog"><div id="heosearch-navbar"><div class="search-dialog__title" id="heosearch-title">搜索</div><span class="search-close-button"><i class="heoblogIcon icon-close-fill"></i></span></div><div id="heosearch-input-panel"><div id="heosearch-input"><div class="ais-search-box"><input class="ais-search-box--input" placeholder="输入关键词搜索" type="text" autocomplete="off"/></div><button id="heosearch-search-btn" type="button" title="搜索" heotip="搜索"><i class="heoblogIcon icon-search-2-line"></i></button></div></div><div id="heosearch-tabs"><span class="php-search-tab active" data-type="all">综合</span><span class="php-search-tab" data-type="post">文章</span><span class="php-search-tab" data-type="friend">友链</span><span class="php-search-tab" data-type="sky">洪绘星空</span><span class="php-search-tab" data-type="comment">评论</span><span class="php-search-tab" data-type="page">当前页面</span></div><div id="heosearch-results"><div id="heosearch-hits"></div><div id="heosearch-suggests"></div><div id="heosearch-stats"></div></div></div><div id="search-mask"></div></div><div id="rightMenu"><div class="rightMenu-group rightMenu-small"><div class="rightMenu-item" id="menu-backward" heotip="返回上一页"><i class="heoblogIcon icon-arrow-left-line"></i></div><div class="rightMenu-item" id="menu-forward" heotip="前往下一页"><i class="heoblogIcon icon-arrow-right-line"></i></div><div class="rightMenu-item" id="menu-refresh" heotip="刷新页面"><i class="heoblogIcon icon-restart-line" style="font-size: 19px;"></i></div><div class="rightMenu-item" id="menu-top" heotip="返回顶部"><i class="heoblogIcon icon-arrow-up-line"></i></div></div><div class="rightMenu-group rightMenu-line rightMenuPlugin"><div class="rightMenu-item" id="menu-askPostChat"><i class="heoblogIcon icon-PostChat"></i><span>这是什么意思?</span></div></div><div class="rightMenu-group rightMenu-line rightMenuPlugin"><div class="rightMenu-item" id="menu-copytext"><i class="heoblogIcon icon-file-copy-fill"></i><span>复制选中文本</span></div><div class="rightMenu-item" id="menu-pastetext">
671<i class="heoblogIcon icon-clipboard-fill"></i><span>粘贴文本</span></div><a class="rightMenu-item" id="menu-commenttext"><i class="heoblogIcon icon-chat-new-fill"></i><span>引用到评论</span></a><div class="rightMenu-item" id="menu-newwindow"><i class="heoblogIcon icon-window-fill"></i><span>新窗口打开</span></div><div class="rightMenu-item" id="menu-copylink"><i class="heoblogIcon icon-link"></i><span>复制链接地址</span></div><div class="rightMenu-item" id="menu-copyimg"><i class="heoblogIcon icon-file-copy-fill"></i><span>复制此图片</span></div><div class="rightMenu-item" id="menu-downloadimg"><i class="heoblogIcon icon-download-cloud-fill"></i><span>下载此图片</span></div><div class="rightMenu-item" id="menu-search"><i class="heoblogIcon icon-search-2-line"></i><span>站内搜索</span></div><div class="rightMenu-item" id="menu-searchBaidu"><i class="heoblogIcon icon-baidu-fill"></i><span>百度搜索</span></div><div class="rightMenu-item" id="menu-music-toggle"><i class="heoblogIcon icon-play-fill"></i><span>播放音乐</span></div><div class="rightMenu-item" id="menu-music-back"><i class="heoblogIcon icon-skip-back-fill"></i><span>切换到上一首</span></div><div class="rightMenu-item" id="menu-music-forward"><i class="heoblogIcon icon-skip-forward-fill"></i><span>切换到下一首</span></div><div class="rightMenu-item" id="menu-music-copyMusicName"> <i class="heoblogIcon icon-file-copy-fill"></i><span>复制歌名</span></div></div><div class="rightMenu-group rightMenu-line rightMenuOther"><a class="rightMenu-item menu-Link" id="menu-randomPost" rel="nofollow"><i class="heoblogIcon icon-signal-tower-fill"></i><span>随便逛逛</span></a></div><div class="rightMenu-group rightMenu-line rightMenuOther" id="menu-tts-group"><div class="rightMenu-item" id="menu-tts"><i class="ri-mic-2-ai-fill"></i><span>全文朗读</span></div><div class="rightMenu-item" id="menu-podcast"><i class="ri-speak-ai-fill"></i><span>播客陪读</span></div><div class="rightMenu-item" id="menu-radio"><i class="ri-radio-line"></i><span>电台模式</span></div></div><div class="rightMenu-group rightMenu-line rightMenuOther"><div class="rightMenu-item" id="menu-copy"><i class="heoblogIcon icon-external-link-fill"></i><span>复制地址</span></div><div class="rightMenu-item" id="menu-darkmode"><i class="heoblogIcon icon-moon-clear-fill"></i><span class="menu-darkmode-text">显示模式</span></div><div class="rightMenu-item" id="menu-translate"><i class="heoblogIcon icon-panben"></i><span>轉為繁體</span></div></div></div><div id="rightmenu-mask"></div><div class="bottom-dock needEndHide" id="bottom-dock"><a class="heo-pointer-glow-host" id="heoTts" href="#" onclick="heoPostTts.toggleFloatPlayback(); return false;" title="播放全文朗读" data-tts-target="post-tts" aria-label="播放全文朗读"><div class="heo-pointer-glow" aria-hidden="true"></div><span class="heoTtsIconSlot" aria-hidden="true"><i class="ri-speak-ai-line heoTtsIcon heoTtsIcon-speak"></i></span><span class="heoTtsPauseSlot" aria-hidden="true"><i class="ri-pause-fill heoTtsIcon heoTtsIcon-pause" hidden="hidden"></i><span class="heoTtsLoader" aria-hidden="true" hidden="hidden"></span></span><span class="heoTtsTitle">全文朗读</span></a><a class="heo-pointer-glow-host" id="heoPodcast" href="#" onclick="heoPostAudio.toggleFloatPlayback(&quot;post-podcast&quot;); return false;" title="播放全文播客陪读" aria-label="播放全文播客陪读"><div class="heo-pointer-glow" aria-hidden="true"></div><span class="heoPodcastIconSlot" aria-hidden="true"><i class="ri-mic-2-ai-line heoPodcastIcon heoPodcastIcon-speak"></i></span><span class="heoPodcastPauseSlot" aria-hidden="true"><i class="ri-pause-fill heoPodcastIcon heoPodcastIcon-pause" hidden="hidden"></i><span class="heoPodcastLoader" aria-hidden="true" hidden="hidden"></span></span><span class="heoPodcastTitle">播客陪读</span></a><div class="heo-pointer-glow-host" id="heoRadio" role="group" aria-label="电台模式" hidden="hidden"><div class="heo-pointer-glow" aria-hidden="true"></div><span class="heoRadioIconSlot" aria-hidden="true"><i class="ri-radio-line heoRadioIcon heoRadioIcon-speak"></i></span><span class="heoRadioPauseSlot" aria-hidden="true"><i class="ri-pause-fill heoRadioIcon heoRadioIcon-pause" hidden="hidden"></i><span class="heoRadioIcon-loader" aria-hidden="true" hidden="hidden"></span></span><button class="heoRadioNext" type="button" title="下一曲" aria-label="电台下一曲"><i class="ri-skip-forward-fill" aria-hidden="true"></i></button><span class="heoRadioTitle">电台模式</span></div><div class="heo-pointer-glow-host" id="nav-music" onclick="heo.handleMusicClick(event)"><div class="heo-pointer-glow" aria-hidden="true"></div><div id="nav-music-hoverTips"><div class="music-control-btn heoblogIcon icon-shangyiqu" id="music-prev" title="上一曲" onclick="heo.musicSkipBack()"></div><div class="music-control-btn heoblogIcon icon-zanting" id="music-pause" title="暂停" onclick="heo.musicToggle(
671)" style="display: none;"></div><div class="music-control-btn heoblogIcon icon-bofang" id="music-play" title="播放" onclick="heo.musicToggle()"></div><div class="music-control-btn heoblogIcon icon-xiayiqu" id="music-next" title="下一曲" onclick="heo.musicSkipForward()"></div><div class="music-control-btn" id="music-share" title="分享" onclick="heo.musicShare()"><i class="ri-share-circle-line"></i></div></div><div id="heo-music" data-music-list="https://s3.zhheo.com/heomusic/music-list.json" data-api-origin="https://s3.zhheo.com/heomusic/" data-resource-path="https://s3.zhheo.com/heomusic/music" data-share-base="https://zhheo.com/music"></div></div></div><div>
671<script defer src="/js/heo.js?v=74122ce8"></script>
671<script defer src="/js/heo-comments.js?v=32731363"></script>
671<script defer src="/js/heo_media_session.js?v=9e3265e8"></script>
671<script defer src="/js/heo_radio.js?v=75fb23c1"></script>
671<script defer src="/zhheo/um.js?v=d7022b12" data-website-id="4d84f9a3-9e4f-4fa4-8e54-cc26a0efb3f6"></script>
671<script defer src="/js/utils.js?v=3e7b348f"></script>
671<script defer src="/js/main.js?v=4ef1357b"></script>
671<script>(function () {
672  var KEY = 'translate-chn-cht';
673  var saved = (typeof saveToLocal !== 'undefined' && saveToLocal.get) ? saveToLocal.get(KEY) : undefined;
674  function loadTranslate () {
675    if (typeof window.__heoTranslateBoot === 'function') { window.__heoTranslateBoot(); return Promise.resolve(); }
676    return getScript('/js/tw_cn.js?v=8dd463c1').then(function () {
677      if (typeof window.__heoTranslateBoot === 'function') window.__heoTranslateBoot();
678    });
679  }
680  // 之前选择过繁体:直接加载并应用
681  if (String(saved) === '1') { loadTranslate(); return; }
682  // 首次点击「转为繁体」时才加载,并补触发一次切换
683  document.addEventListener('click', function (e) {
684    var t = e.target && e.target.closest ? e.target.closest('#menu-translate') : null;
685    if (!t) return;
686    if (typeof window.__heoTranslateBoot === 'function') return;
687    e.preventDefault();
688    e.stopPropagation();
689    loadTranslate().then(function () {
690      if (typeof window.__heoTranslateToggle === 'function') window.__heoTranslateToggle();
691    });
692  }, true);
693})();
694</script>
694<script defer src="/plugin/instant_page/instantpage.min.js?v=3ad5caa5" type="module"></script>
694<script defer src="/plugin/lazyload/lazyload.iife.min.js?v=0ce36d6b"></script>
694<script defer src="/plugin/snackbar/snackbar.min.js?v=8f19a352"></script>
694<script>var preloader;
695document.addEventListener('DOMContentLoaded', function () {
696  preloader = {
697    loadingEnded: false,
698    endLoading: function () {
699      if (typeof $ !== 'undefined') {
700        $(window).off('keydown.preloader');
701      }
702      if (typeof heo !== 'undefined' && heo.hideLoading) {
703        heo.hideLoading();
704      }
705      preloader.loadingEnded = true;
706    },
707    initLoading: function () {
708      preloader.loadingEnded = false;
709      var loadingBox = document.getElementById('loading-box');
710      if (loadingBox) loadingBox.classList.remove('loaded');
711      if (typeof Pace !== 'undefined') Pace.restart();
712      if (typeof heo !== 'undefined' && heo.showLoading) {
713        heo.showLoading();
714      }
715      if (typeof $ !== 'undefined') {
716        $(window).off('keydown.preloader').on('keydown.preloader', function (e) {
717          e.stopImmediatePropagation();
718        });
719        $('.custom-tooltip').remove();
720      }
721    }
722  };
723
724  window.addEventListener('load', preloader.endLoading);
725  window.addEventListener('pjax:complete', preloader.endLoading);
726  setTimeout(function () {
727    if (!preloader.loadingEnded) {
728      preloader.endLoading();
729    }
730  }, 2000);
731});</script>
731<div class="js-pjax">
731<script>(() => {
732  const AVATAR_SELECTOR = '.article-meta.comment-avatars[data-url]'
733  const DEFAULT_LIMIT = 6
734
735  // transitions.dev avatar-group-hover:悬停单个头像时,相邻头像按距离衰减上浮,
736  // 悬停的头像额外放大,移开弹性回落。缓动方向感知:进入平滑,返回带弹性。
737  const bindHover = (root) => {
738    const avatars = Array.prototype.slice.call(root.querySelectorAll('.comment-avatar'))
739    if (!avatars.length) return
740    const docEl = document.documentElement
741    const readNum = (name, fallback) => {
742      const value = parseFloat(getComputedStyle(docEl).getPropertyValue(name))
743      return isNaN(value) ? fallback : value
744    }
745    const readEase = (name, fallback) => {
746      const value = getComputedStyle(docEl).getPropertyValue(name).trim()
747      return value || fallback
748    }
749    const setShifts = (activeIndex, phase) => {
750      const lift = readNum('--comment-avatar-lift', -4)
751      const falloff = readNum('--comment-avatar-falloff', 0.45)
752      const scale = readNum('--comment-avatar-scale', 1.05)
753      const ease = phase === 'out'
754        ? readEase('--comment-avatar-ease-out', 'cubic-bezier(0.34, 3.85, 0.64, 1)')
755        : readEase('--comment-avatar-ease-in', 'cubic-bezier(0.22, 1, 0.36, 1)')
756      avatars.forEach((el, i) => {
757        // 先写 transition-timing-function,再写变量,让该阶段过渡用对应缓动
758        el.style.transitionTimingFunction = ease
759        if (activeIndex == null) {
760          el.style.setProperty('--comment-avatar-shift', '0px')
761          el.style.setProperty('--comment-avatar-scale-active', '1')
762          return
763        }
764        const distance = Math.abs(i - activeIndex)
765        el.style.setProperty('--comment-avatar-shift', (lift * Math.pow(falloff, distance)).toFixed(3) + 'px')
766        el.style.setProperty('--comment-avatar-scale-active', i === activeIndex ? String(scale) : '1')
767      })
768    }
769    avatars.forEach((el, i) => {
770      el.addEventListener('mouseenter', function () { setShifts(i, 'in') })
771    })
772    root.addEventListener('mouseleave', function () { setShifts(null, 'out') })
773  }
774
775  // 渲染单篇文章的头像组
776  const renderGroup = (el, item) => {
777    el.innerHTML = ''
778    if (!item || !Array.isArray(item.avatars) || !item.avatars.length) {
779      // 无评论:显示浅灰胶囊占位
780      const empty = document.createElement('span')
781      empty.className = 'comment-no-comment'
782      empty.textContent = '暂无评论'
783      el.appendChild(empty)
784      return
785    }
786    item.avatars.forEach((avatar) => {
787      const wrap = document.createElement('span')
788      wrap.className = 'comment-avatar'
789      const img = document.createElement('img')
790      img.src = avatar.avatar || ''
791      img.alt = avatar.nick || ''
792      img.title = avatar.nick || ''
793      img.loading = 'lazy'
794      img.decoding = 'async'
795      img.onerror = function () { if (this.parentNode) this.parentNode.remove() }
796      wrap.appendChild(img)
797      el.appendChild(wrap)
798    })
799    if (item.count > item.avatars.length) {
800      const more = document.createElement('span')
801      more.className = 'comment-avatar-more'
802      more.textContent = '+' + (item.count - item.avatars.length)
803      el.appendChild(more)
804    }
805    bindHover(el)
806  }
807
808  // 一次请求获取本页所有文章卡片的评论头像组(走统一评论 API,无需加载渲染库)
809  const run = () => {
810    const items = Array.prototype.slice.call(document.querySelectorAll(AVATAR_SELECTOR))
811    if (!items.length) return
812    const urls = items.map(function (el) { return el.getAttribute('data-url') })
813    heo.commentApi.avatars(urls, { excludeBlogger: true, limit: DEFAULT_LIMIT }).then(function (data) {
814      const map = {}
815      data.forEach(function (item) { map[item.url] = item })
816      items.forEach(function (el) {
817        renderGroup(el, map[el.getAttribute('data-url')])
818      })
819    }).catch(function (err) {
820      console.error('评论头像组加载失败:', err)
821    })
822  }
823
824  // 头像组在文章卡片上(移动端首屏外):进入视口再拉取
825  const start = () => {
826    const first = document.querySelector(AVATAR_SELECTOR)
827    if (!first) return
828    if (typeof btf !== 'undefined' && typeof btf.loadComment === 'function') {
829      btf.loadComment(first, run)
830    } else {
831      run()
832    }
833  }
834
835  // pjax 场景下 .js-pjax 容器每次导航都会重新执行本脚本;首屏则等 window load
836  window.pjax ? start() : window.addEventListener('load', start)
837})()</script>
837<script>(()=>{
838  // 评论深链:URL 带锚点(如 #<commentId>)时,评论是懒加载的,
839  // 浏览器解析时目标元素还没渲染,导致不会自动跳转。这里解析锚点,
840  // 评论渲染完成后再滚动过去(见 onCommentLoaded)。
841  const getHashId = () => {
842    const raw = (window.location.hash || '').replace(/^#/, '')
843    if (!raw) return ''
844    try { return decodeURIComponent(raw) } catch (e) { return raw }
845  }
846  const scrollToHashTarget = () => {
847    const id = getHashId()
848    if (!id) return
849    const run = () => {
850      const el = document.getElementById(id)
851      if (!el) return
852      if (typeof btf !== 'undefined' && typeof btf.getEleTop === 'function' && typeof btf.scrollToDest === 'function') {
853        btf.scrollToDest(btf.getEleTop(el), 300)
854      } else {
855        try { el.scrollIntoView({ behavior: 'smooth', block: 'center' }) } catch (e) { el.scrollIntoView() }
856      }
857    }
858    // 评论头像 / emoji 异步加载会改变高度:稍后再滚,并补一次兜底
859    setTimeout(run, 120)
860    setTimeout(run, 600)
861  }
862
863  const init = () => {
864    // pjax 跳转时先销毁旧实例,避免状态残留
865    try { twikoo.destroy && twikoo.destroy(); } catch (e) {}
866    const pageOpts = {}
867    if (window.location.pathname.indexOf('/link') !== -1) {
868      pageOpts.hideSubmit = true
869    }
870    twikoo.init(Object.assign({
871      el: '#twikoo-wrap',
872      envId: 'https://twikoo.zhheo.com',
873      region: '',
874      onCommentLoaded: function (comments) {
875        if (window.location.pathname.indexOf('/link') !== -1 && typeof twikooHideSubmit === 'function') {
876          twikooHideSubmit()
877        }
878        // 评论渲染完成后滚动到锚点目标(评论深链)
879        scrollToHashTarget()
880      }
881    }, null, pageOpts))
882  }
883
884  const getCount = () => {
885    heo.commentApi.pageCount(window.location.pathname).then(function (count) {
886      const el = document.getElementById('twikoo-count');
887      if (el) el.innerText = count;
888      heo.addCommentCount(count);
889    }).catch(function (err) {
890      console.error(err);
891    });
892  }
893
894  const runFn = () => {
895    init()
896    GLOBAL_CONFIG_SITE.isPost && getCount()
897  }
898
899  const loadTwikoo = () => {
900    if (typeof twikoo === 'object') {
901      setTimeout(runFn,0)
902      return
903    } 
904    getScript('https://twikoo.zhheo.com/twikoo.min.js').then(runFn)
905  }
906
907  if ('Twikoo' === 'Twikoo' || false) {
908    // 评论库(~140KB)无条件改为「进入视口再加载」,不依赖 comments.lazyload 开关:
909    // 该开关同时控制文章头部评论数等元素的渲染,置 true 会直接不渲染这些元素。
910    // btf 由 defer 的 utils.js 提供,内联脚本解析时可能尚未就绪,故延迟到 DOMContentLoaded。
911    const startComments = () => {
912      // 观察带实际高度的评论容器(#twikoo-wrap 为空时高度为 0,IO 会误判为已进入视口)
913      const anchor = document.getElementById('post-comment') || document.getElementById('twikoo-wrap')
914      // 锚点目标尚未出现在 DOM(多为评论深链 #<commentId>)时立即加载,
915      // 否则懒加载会让浏览器找不到目标,锚点无法跳转
916      const hashId = getHashId()
917      const hasPendingAnchor = !!hashId && !document.getElementById(hashId)
918      if (hasPendingAnchor || !(anchor && typeof btf !== 'undefined' && typeof btf.loadComment === 'function')) {
919        loadTwikoo()
920        return
921      }
922      btf.loadComment(anchor, loadTwikoo)
923    }
924    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', startComments)
925    else startComments()
926  } else {
927    window.loadOtherComment = () => {
928      loadTwikoo()
929    }
930  }
931
932
933})()</script>
933</div>
933<script>window.addEventListener('load', () => {
934  const changeContent = (content) => {
935    if (content === '') return content
936
937    content = content.replace(/<img.*?src="(.*?)"?[^\>]+>/ig, '[图片]') // replace image link
938    content = content.replace(/<a[^>]+?href=["']?([^"']+)["']?[^>]*>([^<]+)<\/a>/gi, '[链接]') // replace url
939    content = content.replace(/<pre><code>.*?<\/pre>/gi, '[代码]') // replace code
940    content = content.replace(/<[^>]+>/g,"") // remove html tag
941
942    if (content.length > 150) {
943      content = content.substring(0,150) + '...'
944    }
945    return content
946  }
947
948  const getComment = () => {
949    // 走统一评论 API,不依赖评论渲染库
950    heo.commentApi.recent(6, {
951      region: '',
952      includeReply: true,
953      excludeBlogger: false,
954      excludeEmpty: false
955    }).then(function (res) {
956      const twikooArray = res.map(e => {
957        return {
958          'content': changeContent(e.comment),
959          'avatar': e.avatar,
960          'nick': e.nick,
961          'url': e.url + '#' + e.id,
962          'date': new Date(e.created).toISOString()
963        }
964      })
965
966      saveToLocal.set('twikoo-newest-comments', JSON.stringify(twikooArray), 10/(60*24))
967      generateHtml(twikooArray)
968    }).catch(function (err) {
969      const $dom = document.querySelector('#card-newest-comments .aside-list')
970      if ($dom) $dom.innerHTML = "无法获取评论,请确认相关配置是否正确"
971    })
972  }
973
974  const generateHtml = array => {
975    let result = ''
976
977    if (array.length) {
978      for (let i = 0; i < array.length; i++) {
979        result += '<div class=\'aside-list-item\'>'
980
981        if (true) {
982          const name = 'data-lazy-src'
983          result += `<a href='${array[i].url}' class='thumbnail'><img ${name}='${array[i].avatar}' alt='${array[i].nick}的头像'><div class='name'><span>${array[i].nick}</span></div></a>`
984        }
985        
986        result += `<div class='content'>
987        <a class='comment' href='${array[i].url}'>${array[i].content}</a>
988        <time datetime="${array[i].date}">${btf.diffDate(array[i].date, true)}</time></div>
989        </div>`
990      }
991    } else {
992      result += '没有评论'
993    }
994
995    let $dom = document.querySelector('#card-newest-comments .aside-list')
996    $dom.innerHTML= result
997    window.lazyLoadInstance && window.lazyLoadInstance.update()
998    window.pjax && window.pjax.refresh($dom)
999  }
1000
1001  const newestCommentInit = () => {
1002    if (document.querySelector('#card-newest-comments .aside-list')) {
1003      const data = saveToLocal.get('twikoo-newest-comments')
1004      if (data) {
1005        generateHtml(JSON.parse(data))
1006      } else {
1007        getComment()
1008      }
1009    }
1010  }
1011
1012  // 最新评论卡片位于中控台(默认隐藏),零尺寸时 IntersectionObserver 会误判为可见,
1013  // 从而在首屏就拉取 ~140KB 评论库。这里仅当卡片真实可见时才初始化;
1014  // 隐藏时由打开中控台的路径(console.js 的最近评论)负责加载。
1015  const isCardVisible = () => {
1016    const el = document.getElementById('card-newest-comments')
1017    if (!el || el.offsetParent === null) return false
1018    const r = el.getBoundingClientRect()
1019    return r.width > 0 && r.height > 0
1020  }
1021  const safeInit = () => { if (isCardVisible()) newestCommentInit() }
1022  if (isCardVisible()) {
1023    const target = document.getElementById('card-newest-comments')
1024    if (typeof btf !== 'undefined' && typeof btf.loadComment === 'function') {
1025      btf.loadComment(target, newestCommentInit)
1026    } else {
1027      newestCommentInit()
1028    }
1029  }
1030  document.addEventListener('pjax:complete', safeInit)
1031})</script>
1031<link rel="stylesheet" href="/plugin/aplayer/APlayer.min.css?v=348805c2" media="print" onload="this.media='all'">
1031<script>(function () {
1032  var src = '/plugin/aplayer/APlayer.min.js?v=11efc866';
1033  var load = function () {
1034    if (window.__heoAplayerLoaded) return;
1035    window.__heoAplayerLoaded = true;
1036    var s = document.createElement('script');
1037    s.src = src;
1038    s.async = true;
1039    document.head.appendChild(s);
1040  };
1041  if ('requestIdleCallback' in window) window.requestIdleCallback(load, { timeout: 3000 });
1042  else window.addEventListener('load', load);
1043})();</script>
1043<script src="/plugin/pjax/pjax.min.js?v=d810aff1"></script>
1043<script>// 修复历史标题错乱:不提前换 title,等 pushState 之后再更新 document.title(新 title 从 og:title 或正文取)
1044// 劫持仅在 pjax 导航期间生效(__pjaxInFlight,见下方 pjax:send / pjax:complete):
1045// 常驻劫持会把 page-list-core 的筛选 hash 同步、main.js TOC 锚点等一方 replaceState
1046// 的 URL 静默改回当前地址,收窄后这些功能恢复,pjax 内部的标题/URL 保护不受影响
1047(function () {
1048  var origReplaceState = history.replaceState;
1049  var origPushState = history.pushState;
1050  if (typeof origReplaceState === 'function') {
1051    history.replaceState = function (state, title, url) {
1052      if (!window.__pjaxInFlight) return origReplaceState.call(this, state, title, url);
1053      var currentUrl = window.location.href;
1054      if (url !== undefined && url !== null && String(url) !== currentUrl) {
1055        url = currentUrl;
1056        if (state && typeof state === 'object') state = Object.assign({}, state, { url: currentUrl });
1057      }
1058      if (url === currentUrl && window.history.state && window.history.state.title) {
1059        title = window.history.state.title;
1060        if (state && typeof state === 'object') state = Object.assign({}, state, { title: title });
1061      }
1062      return origReplaceState.call(this, state, title, url);
1063    };
1064  }
1065  if (typeof origPushState === 'function') {
1066    history.pushState = function (state, title, url) {
1067      if (!window.__pjaxInFlight) return origPushState.call(this, state, title, url);
1068      // 优先用 titleSwitch 里存的新页完整标题(避免被 document.title=prev 覆盖后的 <title>),其次 og:title、.post-title
1069      var saved = window.__pjaxNextTitle;
1070      var titleEl = document.querySelector('title');
1071      var og = document.querySelector('meta[property="og:title"]');
1072      var pt = document.querySelector('.post-title');
1073      var newTitle = (saved && saved.trim()) || (titleEl && titleEl.textContent) || (og && og.getAttribute('content')) || (pt && pt.textContent) || document.title || title;
1074      if (typeof newTitle === 'string') newTitle = newTitle.trim();
1075      if (window.__pjaxNextTitle) window.__pjaxNextTitle = '';
1076      if (state && typeof state === 'object') state = Object.assign({}, state, { title: newTitle });
1077      var ret = origPushState.call(this, state, newTitle, url);
1078      document.title = newTitle;
1079      return ret;
1080    };
1081  }
1082})();
1083let pjaxSelectors = [
1084  'title',
1085  'meta[property="og:title"]',
1086  '#config-diff',
1087  '#body-wrap',
1088  '#rightside-config-hide',
1089  '#rightside-config-show',
1090  '.js-pjax',
1091  'meta[name="cover-color"]'
1092]
1093
1094if (false) {
1095  pjaxSelectors.unshift('meta[property="og:image"]', 'meta[property="og:url"]')
1096}
1097
1098// 切换 <title> 时先存下新页标题(因后面 document.title=prev 会覆盖 <title> 内容),再恢复 document.title 避免当前历史条被改
1099window.__pjaxNextTitle = '';
1100// MoOx 通过 bind 把 options 传给 switch:popstate 前进/后退时 options.history === false,
1101// 链接导航时为 true。document.title 的赋值会同步覆盖 <title> 元素内容——
1102// 因此「换元素后再 document.title=prev」实际会把元素一并改回旧标题,
1103// 前进导航靠 pushState 劫持补写新标题,后退/前进不经过 pushState,必须在这里直接落新标题
1104function titleSwitch(oldEl, newEl, options) {
1105  var nextTitle = (newEl && newEl.textContent) ? newEl.textContent.trim() : '';
1106  if (options && options.history === false) {
1107    // 前进/后退:直接采用新页标题。若走 prev 恢复分支,document.title 会残留
1108    // 前进方向的页面标题(实测:后退后 tab 与历史条全部错乱)
1109    oldEl.outerHTML = newEl.outerHTML;
1110    if (nextTitle) document.title = nextTitle;
1111    this.onSwitch();
1112    return;
1113  }
1114  var prevTitle = document.title;
1115  oldEl.outerHTML = newEl.outerHTML;
1116  if (nextTitle) window.__pjaxNextTitle = nextTitle;
1117  document.title = prevTitle;
1118  this.onSwitch();
1119}
1120var pjax = new Pjax({
1121  elements: 'a:not([target="_blank"])',
1122  selectors: pjaxSelectors,
1123  switches: { title: titleSwitch },
1124  cacheBust: false,
1125  analytics: false,
1126  scrollRestoration: false
1127})
1128
1129// ── pjax:complete 重初始化职责表(改动初始化逻辑时请同步此清单)────
1130// 1) 本文件 complete 回调:重执行 #config-diff、同步 body 页面类型 class、
1131//    封面主色、重执行 script[data-pjax](busuanzi 计数)、lazyLoadInstance.update、统计上报等
1132// 2) heo.js 的 complete 监听是「页面重初始化单一入口」:先 heo.refreshFn()(DOM 层,main.js 定义),
1133//    再 initBlog({ isPjax: true })(应用层,blogex.js 定义)——首页资源补载、aside/post CSS 补载、
1134//    tilt/glow/tooltip 重绑、文章脚本加载器、热搜/金价刷新等
1135// 3) 模块自管(自带幂等守卫):home.js / console.js / page-list-core.js /
1136//    php-search.js / heo-webmcp.js / funds.js / loading-js.pug(endLoading)
1137
1138document.addEventListener('pjax:send', function () {
1139  // PJAX 导航开始时统一收起中控台,避免面板覆盖新页面内容
1140  if (typeof heo !== 'undefined' && typeof heo.hideConsole === 'function') heo.hideConsole()
1141
1142  // 进入导航期:history 劫持开始接管(见顶部 IIFE)
1143  window.__pjaxInFlight = true
1144
1145  // 保存当前主题色,避免 pjax 切换时闪烁
1146  if (typeof heo !== 'undefined' && heo._cachedCoverColor === null) {
1147    const coverColorMeta = document.querySelector('meta[name="cover-color"]');
1148    if (coverColorMeta) {
1149      const coverColor = coverColorMeta.getAttribute('content');
1150      if (coverColor && coverColor.trim()) {
1151        heo._cachedCoverColor = coverColor.trim();
1152      }
1153    }
1154  }
1155
1156  // removeEventListener toc scroll
1157  window.removeEventListener('scroll', window.tocScrollFn)
1158
1159  typeof preloader === 'object' && preloader.initLoading()
1160
1161  if (window.aplayers) {
1162    for (let i = 0; i < window.aplayers.length; i++) {
1163      if (!window.aplayers[i].options.fixed) {
1164        window.aplayers[i].destroy()
1165      }
1166    }
1167  }
1168
1169  typeof typed === 'object' && typed.destroy()
1170
1171  //reset readmode
1172  const $bodyClassList = document.body.classList
1173  $bodyClassList.contains('read-mode') && $bodyClassList.remove('read-mode')
1174})
1175
1176document.addEventListener('pjax:complete', function () {
1177  // 导航结束:解除 history 劫持。popstate 前进/后退不经过 pushState,
1178  // __pjaxNextTitle 会残留,这里一并清掉避免污染之后的普通 pushState
1179  window.__pjaxInFlight = false
1180  window.__pjaxNextTitle = ''
1181
1182  // 显式重执行新页面的 config-diff 内联配置:
1183  // pjax 只替换了 script#config-diff 节点,不保证重新执行其中代码,
1184  // 若不重跑,window.GLOBAL_CONFIG_SITE 仍是上一页面(如文章页)的值,
1185  // 下方同步 body class 时会把 home 页误标成 .post,导致
1186  // .post #nav #site-name:hover 等文章页样式残留到首页。
1187  var __cfgScript = document.querySelector('script#config-diff')
1188  if (__cfgScript) {
1189    try {
1190      var __cfgRunner = document.createElement('script')
1191      __cfgRunner.text = __cfgScript.text
1192      document.head.appendChild(__cfgRunner)
1193      __cfgRunner.parentNode.removeChild(__cfgRunner)
1194    } catch (e) {}
1195  }
1196
1197  // 同步 body 页面类型 class:body 不在 pjax 替换列表里,
1198  // 独立页(page)与文章页(post)互相切换时若不同步,
1199  // .page 前缀的样式(如 .page #post-comment 的外边框和内边距)会错误残留到另一类页面
1200  var __siteCfg = window.GLOBAL_CONFIG_SITE || {}
1201  var __bodyPageType = __siteCfg.isHome ? 'homePage page' : (__siteCfg.isPost ? 'post' : 'page')
1202  document.body.classList.remove('homePage', 'page', 'post')
1203  __bodyPageType.split(' ').forEach(function (cls) {
1204    if (cls) document.body.classList.add(cls)
1205  })
1206
1207  typeof heo !== 'undefined' && heo.coverColor && heo.coverColor()
1208  // DOM 层 + 应用层重初始化统一在 heo.js 的 pjax:complete 单一入口(heo.refreshFn → initBlog)
1209
1210  document.querySelectorAll('script[data-pjax]').forEach(item => {
1211    const newScript = document.createElement('script')
1212    const content = item.text || item.textContent || item.innerHTML || ""
1213    Array.from(item.attributes).forEach(attr => newScript.setAttribute(attr.name, attr.value))
1214    newScript.appendChild(document.createTextNode(content))
1215    item.parentNode.replaceChild(newScript, item)
1216  })
1217
1218  var hotListPath = window.location.pathname
1219  if (hotListPath === '/hot/' || hotListPath === '/must-read/' || hotListPath === '/archives/' || /^\/archives\/page\/\d+\/?$/.test(hotListPath)) {
1220    window.scrollTo(0, 0)
1221  }
1222
1223  GLOBAL_CONFIG.islazyload && window.lazyLoadInstance.update()
1224
1225  typeof chatBtnFn === 'function' && chatBtnFn()
1226  typeof panguInit === 'function' && panguInit()
1227
1228  // google analytics
1229  typeof gtag === 'function' && gtag('config', '', {'page_path': window.location.pathname});
1230
1231  // baidu analytics
1232  typeof _hmt === 'object' && _hmt.push(['_trackPageview',window.location.pathname]);
1233
1234  typeof loadMeting === 'function' && document.getElementsByClassName('aplayer').length && loadMeting();
1235
1236  // Analytics
1237  if (false) {
1238    MtaH5.pgv()
1239  }
1240
1241  // prismjs
1242  typeof Prism === 'object' && Prism.highlightAll()
1243
1244})
1245
1246document.addEventListener('pjax:error', (e) => {
1247  window.__pjaxInFlight = false
1248  if (e.request && e.request.status === 404) {
1249    pjax.loadUrl('/404.html')
1250    return
1251  }
1252  // 非 404 失败(网络断开/超时/5xx/DOM 结构不匹配):MoOx 不会整页跳转,
1253  // 页面停留在原内容且无任何反馈;这里显式提示,加载遮罩由 pjax:complete 的 endLoading 收尾
1254  if (typeof btf !== 'undefined' && btf.snackbarShow) {
1255    btf.snackbarShow('页面加载失败,请检查网络后重试', false, 3000)
1256  }
1257  typeof preloader === 'object' && preloader.endLoading && preloader.endLoading()
1258})</script>
1258<script async data-pjax src="/plugin/busuanzi/busuanzi.js?v=a1caea8f"></script>
1258<script defer charset="utf-8" src="/zhheo/blogex.js?v=b840fe53"></script>
1258</div></body></html>

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