@jet-w/astro-blog 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/dist/{chunk-HVQKQN6B.js → chunk-6D3XRDNY.js} +1 -1
  2. package/dist/{chunk-ATRISB7B.js → chunk-A2E2VSAQ.js} +43 -3
  3. package/dist/chunk-DAH2XP4W.js +154 -0
  4. package/dist/{chunk-AZHCNNAC.js → chunk-PG43JO4O.js} +1 -153
  5. package/dist/chunk-PZICDGJG.js +69 -0
  6. package/dist/chunk-Z3O3JK56.js +186 -0
  7. package/dist/config/index.d.ts +2 -2
  8. package/dist/config/index.js +9 -7
  9. package/dist/{i18n-5H4W145i.d.ts → i18n-DYYPTq4o.d.ts} +21 -1
  10. package/dist/index.d.ts +10 -184
  11. package/dist/index.js +37 -210
  12. package/dist/integration.d.ts +2 -2
  13. package/dist/integration.js +2 -2
  14. package/dist/{sidebar-Da-W_4Lr.d.ts → sidebar-DNdiCKBw.d.ts} +1 -1
  15. package/dist/utils/i18n.d.ts +133 -0
  16. package/dist/utils/i18n.js +49 -0
  17. package/dist/utils/sidebar.d.ts +1 -1
  18. package/dist/utils/useI18n.d.ts +74 -0
  19. package/dist/utils/useI18n.js +15 -0
  20. package/package.json +9 -1
  21. package/src/components/blog/FloatingToc.vue +11 -3
  22. package/src/components/blog/Hero.astro +17 -2
  23. package/src/components/blog/NavigationTabs.vue +46 -15
  24. package/src/components/blog/PostCard.astro +28 -10
  25. package/src/components/blog/RelatedPosts.astro +23 -7
  26. package/src/components/blog/TableOfContents.astro +10 -4
  27. package/src/components/blog/TagCloud.astro +4 -3
  28. package/src/components/home/FeaturedPostsSection.astro +22 -6
  29. package/src/components/home/QuickNavSection.astro +33 -4
  30. package/src/components/home/RecentPostsSection.astro +22 -6
  31. package/src/components/home/StatsSection.astro +24 -6
  32. package/src/components/layout/Header.astro +9 -5
  33. package/src/components/layout/Sidebar.astro +14 -11
  34. package/src/components/ui/SearchBox.vue +13 -5
  35. package/src/components/ui/SearchInterface.vue +49 -25
  36. package/src/pages/archives/[year]/[month].astro +36 -17
  37. package/src/pages/archives/index.astro +36 -20
  38. package/src/pages/categories/[category].astro +33 -16
  39. package/src/pages/categories/index.astro +37 -14
  40. package/src/pages/posts/[...slug].astro +125 -18
  41. package/src/pages/posts/index.astro +59 -37
  42. package/src/pages/posts/page/[page].astro +65 -27
  43. package/src/pages/search.astro +50 -14
  44. package/src/pages/slides/index.astro +25 -6
  45. package/src/pages/tags/[tag].astro +32 -15
  46. package/src/pages/tags/index.astro +39 -16
  47. package/src/plugins/remark-containers.mjs +351 -322
  48. package/src/plugins/remark-protect-code.mjs +69 -0
  49. package/src/styles/global.css +35 -1
  50. package/templates/default/.claude/ralph-loop.local.md +48 -0
  51. package/templates/default/astro.config.mjs +13 -4
  52. package/templates/default/content/posts/blog_docs_en/{get-started → 01.get-started}/01-intro.md +1 -1
  53. package/templates/default/content/posts/blog_docs_en/{get-started → 01.get-started}/02-install.md +1 -1
  54. package/templates/default/content/posts/blog_docs_en/{get-started → 01.get-started}/03-create-post.md +1 -1
  55. package/templates/default/content/posts/blog_docs_en/{get-started → 01.get-started}/04-structure.md +1 -1
  56. package/templates/default/content/posts/blog_docs_en/01.get-started/05-deploy.md +208 -0
  57. package/templates/default/content/posts/blog_docs_en/{get-started → 01.get-started}/README.md +1 -1
  58. package/templates/default/content/posts/blog_docs_en/02.guide/02-containers.md +245 -0
  59. package/templates/default/content/posts/blog_docs_en/{guide/markdown → 02.guide}/03-code-blocks.md +2 -1
  60. package/templates/default/content/posts/blog_docs_en/{guide/features/01-mermaid.md → 02.guide/03-mermaid.md} +1 -1
  61. package/templates/default/content/posts/blog_docs_en/{guide/features → 02.guide}/04-icons.md +4 -2
  62. package/templates/default/content/posts/blog_docs_en/{guide/features/02-latex.md → 02.guide/06-latex.md} +1 -1
  63. package/templates/default/content/posts/blog_docs_en/{guide/features/03-video.md → 02.guide/07-video.md} +1 -1
  64. package/templates/default/content/posts/blog_docs_en/02.guide/08-slides.md +359 -0
  65. package/templates/default/content/posts/blog_docs_en/{guide/markdown → 02.guide}/README.md +22 -3
  66. package/templates/default/content/posts/blog_docs_en/{config → 03.config}/01-site.md +1 -1
  67. package/templates/default/content/posts/blog_docs_en/{config → 03.config}/02-sidebar.md +1 -1
  68. package/templates/default/content/posts/blog_docs_en/{config → 03.config}/03-i18n.md +88 -24
  69. package/templates/default/content/posts/blog_docs_en/{config → 03.config}/README.md +1 -1
  70. package/templates/default/content/posts/blog_docs_en/README.md +2 -1
  71. package/templates/default/content/posts/blog_docs_zh/01.get-started/01-intro.md +81 -0
  72. package/templates/default/content/posts/blog_docs_zh/01.get-started/02-install.md +137 -0
  73. package/templates/default/content/posts/blog_docs_zh/01.get-started/03-create-post.md +176 -0
  74. package/templates/default/content/posts/blog_docs_zh/01.get-started/04-structure.md +173 -0
  75. package/templates/default/content/posts/blog_docs_zh/01.get-started/05-deploy.md +208 -0
  76. package/templates/default/content/posts/blog_docs_zh/01.get-started/README.md +52 -0
  77. package/templates/default/content/posts/blog_docs_zh/02.guide/02-containers.md +245 -0
  78. package/templates/default/content/posts/blog_docs_zh/02.guide/03-code-blocks.md +206 -0
  79. package/templates/default/content/posts/blog_docs_zh/02.guide/03-mermaid.md +194 -0
  80. package/templates/default/content/posts/blog_docs_zh/02.guide/04-icons.md +229 -0
  81. package/templates/default/content/posts/blog_docs_zh/02.guide/06-latex.md +233 -0
  82. package/templates/default/content/posts/blog_docs_zh/02.guide/07-video.md +184 -0
  83. package/templates/default/content/posts/blog_docs_zh/02.guide/08-slides.md +359 -0
  84. package/templates/default/content/posts/blog_docs_zh/02.guide/README.md +213 -0
  85. package/templates/default/content/posts/blog_docs_zh/03.config/01-site.md +208 -0
  86. package/templates/default/content/posts/blog_docs_zh/03.config/02-sidebar.md +240 -0
  87. package/templates/default/content/posts/blog_docs_zh/03.config/03-i18n.md +348 -0
  88. package/templates/default/content/posts/blog_docs_zh/03.config/README.md +85 -0
  89. package/templates/default/content/posts/blog_docs_zh/README.md +78 -0
  90. package/templates/default/package.dev.json +31 -0
  91. package/templates/default/package.json +1 -1
  92. package/templates/default/src/config/locales/en/index.ts +5 -1
  93. package/templates/default/src/config/locales/en/menu.ts +3 -1
  94. package/templates/default/src/config/locales/en/sidebar.ts +18 -2
  95. package/templates/default/src/config/locales/en/site.ts +1 -1
  96. package/templates/default/src/config/locales/en/ui.ts +29 -0
  97. package/templates/default/src/config/locales/zh-CN/index.ts +5 -1
  98. package/templates/default/src/config/locales/zh-CN/menu.ts +7 -5
  99. package/templates/default/src/config/locales/zh-CN/sidebar.ts +22 -6
  100. package/templates/default/src/config/locales/zh-CN/site.ts +2 -2
  101. package/templates/default/src/config/locales/zh-CN/ui.ts +29 -0
  102. package/templates/default/src/config/site.ts +2 -2
  103. package/templates/default/src/content.config.ts +15 -3
  104. package/templates/default/content/posts/blog_docs/01-quick-start.md +0 -162
  105. package/templates/default/content/posts/blog_docs/02-frontmatter.md +0 -277
  106. package/templates/default/content/posts/blog_docs/03-markdown-basic.md +0 -350
  107. package/templates/default/content/posts/blog_docs/04-containers.md +0 -331
  108. package/templates/default/content/posts/blog_docs/05-code-blocks.md +0 -388
  109. package/templates/default/content/posts/blog_docs/06-mermaid.md +0 -431
  110. package/templates/default/content/posts/blog_docs/07-video.md +0 -243
  111. package/templates/default/content/posts/blog_docs/08-latex.md +0 -382
  112. package/templates/default/content/posts/blog_docs/09-icons.md +0 -326
  113. package/templates/default/content/posts/blog_docs/10-sidebar.md +0 -445
  114. package/templates/default/content/posts/blog_docs/11-config.md +0 -334
  115. package/templates/default/content/posts/blog_docs/12-i18n.md +0 -355
  116. package/templates/default/content/posts/blog_docs/12-slides.mdx +0 -552
  117. package/templates/default/content/posts/blog_docs/README.md +0 -152
  118. package/templates/default/content/posts/blog_docs_en/get-started/05-deploy.md +0 -197
  119. package/templates/default/content/posts/blog_docs_en/guide/README.md +0 -59
  120. package/templates/default/content/posts/blog_docs_en/guide/features/README.md +0 -51
  121. package/templates/default/content/posts/blog_docs_en/guide/markdown/02-containers.md +0 -226
@@ -1,431 +0,0 @@
1
- ---
2
- title: Mermaid 图表
3
- description: 使用 Mermaid 绘制流程图、时序图、甘特图等
4
- pubDate: 2025-12-11
5
- author: Astro Blog
6
- categories:
7
- - 博客教程
8
- tags:
9
- - Mermaid
10
- - 图表
11
- - 可视化
12
- ---
13
-
14
- # Mermaid 图表
15
-
16
- Mermaid 是一个基于文本的图表绘制工具,本博客内置支持,让你可以用简单的语法创建各种图表。
17
-
18
- ## 基本语法
19
-
20
- 在代码块中使用 `mermaid` 作为语言标识:
21
-
22
- ````markdown
23
- ```mermaid
24
- graph LR
25
- A[开始] --> B[结束]
26
- ```
27
- ````
28
-
29
- ```mermaid
30
- graph LR
31
- A[开始] --> B[结束]
32
- ```
33
-
34
- ## 流程图 (Flowchart)
35
-
36
- ### 基本流程图
37
-
38
- ```mermaid
39
- graph TD
40
- A[开始] --> B{条件判断}
41
- B -->|是| C[执行操作A]
42
- B -->|否| D[执行操作B]
43
- C --> E[结束]
44
- D --> E
45
- ```
46
-
47
- **语法说明**:
48
-
49
- ````markdown
50
- ```mermaid
51
- graph TD
52
- A[开始] --> B{条件判断}
53
- B -->|是| C[执行操作A]
54
- B -->|否| D[执行操作B]
55
- C --> E[结束]
56
- D --> E
57
- ```
58
- ````
59
-
60
- ### 方向控制
61
-
62
- | 方向 | 说明 |
63
- |:---|:---|
64
- | `TB` 或 `TD` | 从上到下 |
65
- | `BT` | 从下到上 |
66
- | `LR` | 从左到右 |
67
- | `RL` | 从右到左 |
68
-
69
- ```mermaid
70
- graph LR
71
- A[左边] --> B[中间] --> C[右边]
72
- ```
73
-
74
- ### 节点形状
75
-
76
- ```mermaid
77
- graph TD
78
- A[矩形] --> B(圆角矩形)
79
- B --> C{菱形}
80
- C --> D([体育场形])
81
- D --> E[[子程序]]
82
- E --> F[(数据库)]
83
- F --> G((圆形))
84
- ```
85
-
86
- ### 连线样式
87
-
88
- ```mermaid
89
- graph LR
90
- A --> B
91
- A --- C
92
- A -.- D
93
- A -.-> E
94
- A ==> F
95
- A --文字--> G
96
- A -.文字.-> H
97
- ```
98
-
99
- ## 时序图 (Sequence Diagram)
100
-
101
- ```mermaid
102
- sequenceDiagram
103
- participant U as 用户
104
- participant C as 客户端
105
- participant S as 服务器
106
- participant D as 数据库
107
-
108
- U->>C: 点击登录
109
- C->>S: 发送登录请求
110
- S->>D: 查询用户信息
111
- D-->>S: 返回用户数据
112
- S-->>C: 返回登录结果
113
- C-->>U: 显示登录成功
114
- ```
115
-
116
- **语法说明**:
117
-
118
- ````markdown
119
- ```mermaid
120
- sequenceDiagram
121
- participant U as 用户
122
- participant C as 客户端
123
-
124
- U->>C: 实线箭头
125
- C-->>U: 虚线箭头
126
- U-)C: 异步消息
127
- ```
128
- ````
129
-
130
- ### 高级特性
131
-
132
- ```mermaid
133
- sequenceDiagram
134
- participant A as 客户端
135
- participant B as 服务器
136
-
137
- A->>B: 请求数据
138
-
139
- alt 成功
140
- B-->>A: 返回数据
141
- else 失败
142
- B-->>A: 返回错误
143
- end
144
-
145
- opt 可选操作
146
- A->>B: 发送日志
147
- end
148
-
149
- loop 重试3次
150
- A->>B: 重新请求
151
- end
152
- ```
153
-
154
- ## 类图 (Class Diagram)
155
-
156
- ```mermaid
157
- classDiagram
158
- class Animal {
159
- +String name
160
- +int age
161
- +makeSound()
162
- }
163
-
164
- class Dog {
165
- +String breed
166
- +bark()
167
- +fetch()
168
- }
169
-
170
- class Cat {
171
- +String color
172
- +meow()
173
- +scratch()
174
- }
175
-
176
- Animal <|-- Dog
177
- Animal <|-- Cat
178
- ```
179
-
180
- ### 关系类型
181
-
182
- ```mermaid
183
- classDiagram
184
- classA --|> classB : 继承
185
- classC --* classD : 组合
186
- classE --o classF : 聚合
187
- classG --> classH : 关联
188
- classI ..> classJ : 依赖
189
- classK ..|> classL : 实现
190
- ```
191
-
192
- ## 状态图 (State Diagram)
193
-
194
- ```mermaid
195
- stateDiagram-v2
196
- [*] --> 待机
197
- 待机 --> 运行中: 启动
198
- 运行中 --> 暂停: 暂停
199
- 暂停 --> 运行中: 继续
200
- 运行中 --> 停止: 完成
201
- 停止 --> [*]
202
- ```
203
-
204
- ### 复合状态
205
-
206
- ```mermaid
207
- stateDiagram-v2
208
- [*] --> 活跃
209
-
210
- state 活跃 {
211
- [*] --> 空闲
212
- 空闲 --> 处理中: 收到请求
213
- 处理中 --> 空闲: 处理完成
214
- }
215
-
216
- 活跃 --> 休眠: 超时
217
- 休眠 --> 活跃: 唤醒
218
- ```
219
-
220
- ## 甘特图 (Gantt Chart)
221
-
222
- ```mermaid
223
- gantt
224
- title 项目开发计划
225
- dateFormat YYYY-MM-DD
226
-
227
- section 需求阶段
228
- 需求分析 :a1, 2024-01-01, 7d
229
- 需求评审 :a2, after a1, 3d
230
-
231
- section 设计阶段
232
- 系统设计 :b1, after a2, 10d
233
- UI设计 :b2, after a2, 7d
234
-
235
- section 开发阶段
236
- 后端开发 :c1, after b1, 20d
237
- 前端开发 :c2, after b2, 15d
238
-
239
- section 测试阶段
240
- 集成测试 :d1, after c1, 10d
241
- 用户测试 :d2, after d1, 5d
242
- ```
243
-
244
- ## 饼图 (Pie Chart)
245
-
246
- ```mermaid
247
- pie title 技术栈使用占比
248
- "JavaScript" : 35
249
- "Python" : 25
250
- "Go" : 20
251
- "Rust" : 12
252
- "其他" : 8
253
- ```
254
-
255
- ## 实体关系图 (ER Diagram)
256
-
257
- ```mermaid
258
- erDiagram
259
- USER ||--o{ POST : writes
260
- USER ||--o{ COMMENT : writes
261
- POST ||--o{ COMMENT : has
262
- POST }o--|| CATEGORY : belongs_to
263
-
264
- USER {
265
- int id PK
266
- string username
267
- string email
268
- datetime created_at
269
- }
270
-
271
- POST {
272
- int id PK
273
- string title
274
- text content
275
- int author_id FK
276
- }
277
- ```
278
-
279
- ## Git 图 (Git Graph)
280
-
281
- ```mermaid
282
- gitGraph
283
- commit id: "初始化"
284
- branch develop
285
- checkout develop
286
- commit id: "功能A"
287
- commit id: "功能B"
288
- checkout main
289
- merge develop id: "合并develop"
290
- commit id: "修复bug"
291
- branch feature
292
- commit id: "新功能"
293
- checkout main
294
- merge feature id: "合并feature"
295
- ```
296
-
297
- ## 用户旅程图 (User Journey)
298
-
299
- ```mermaid
300
- journey
301
- title 用户购物旅程
302
- section 浏览商品
303
- 访问首页: 5: 用户
304
- 搜索商品: 4: 用户
305
- 查看详情: 4: 用户
306
- section 购买流程
307
- 添加购物车: 5: 用户
308
- 填写地址: 3: 用户
309
- 支付订单: 4: 用户
310
- section 售后
311
- 收到商品: 5: 用户
312
- 评价商品: 3: 用户
313
- ```
314
-
315
- ## 实用示例
316
-
317
- ### API 调用流程
318
-
319
- ```mermaid
320
- sequenceDiagram
321
- participant App as 前端应用
322
- participant API as API网关
323
- participant Auth as 认证服务
324
- participant BL as 业务服务
325
- participant DB as 数据库
326
-
327
- App->>API: 请求 + Token
328
- API->>Auth: 验证Token
329
- Auth-->>API: Token有效
330
- API->>BL: 转发请求
331
- BL->>DB: 查询数据
332
- DB-->>BL: 返回数据
333
- BL-->>API: 业务响应
334
- API-->>App: 返回结果
335
- ```
336
-
337
- ### 系统架构图
338
-
339
- ```mermaid
340
- graph TB
341
- subgraph 客户端
342
- Web[Web应用]
343
- Mobile[移动应用]
344
- end
345
-
346
- subgraph 网关层
347
- LB[负载均衡]
348
- GW[API网关]
349
- end
350
-
351
- subgraph 服务层
352
- US[用户服务]
353
- OS[订单服务]
354
- PS[商品服务]
355
- end
356
-
357
- subgraph 数据层
358
- MySQL[(MySQL)]
359
- Redis[(Redis)]
360
- ES[(Elasticsearch)]
361
- end
362
-
363
- Web --> LB
364
- Mobile --> LB
365
- LB --> GW
366
- GW --> US
367
- GW --> OS
368
- GW --> PS
369
- US --> MySQL
370
- US --> Redis
371
- OS --> MySQL
372
- PS --> MySQL
373
- PS --> ES
374
- ```
375
-
376
- ## 全屏预览
377
-
378
- 对于复杂的图表,元素可能会显示得较小,难以看清细节。本博客提供了全屏预览功能:
379
-
380
- ### 使用方法
381
-
382
- 1. **鼠标悬停**:将鼠标移到图表上,右上角会出现全屏按钮
383
- 2. **点击按钮**:点击全屏图标进入全屏预览模式
384
- 3. **缩放操作**:
385
- - 使用工具栏的 `+` / `-` 按钮缩放
386
- - 使用键盘 `+` / `-` / `0`(重置)快捷键
387
- - 使用鼠标滚轮缩放
388
- 4. **拖动平移**:
389
- - 按住鼠标左键拖动可平移查看图表不同部分
390
- - 移动端支持触摸拖动
391
- 5. **退出全屏**:点击关闭按钮或按 `Esc` 键
392
-
393
- ::: tip 快捷键与操作
394
- | 操作 | 功能 |
395
- |:---|:---|
396
- | `+` 或 `=` | 放大图表 |
397
- | `-` | 缩小图表 |
398
- | `0` | 重置为 100% |
399
- | `Esc` | 关闭全屏 |
400
- | 鼠标滚轮 | 快速缩放 |
401
- | 左键拖动 | 平移图表 |
402
- | 适配按钮 | 自动适配屏幕大小 |
403
-
404
- **注意**:打开全屏时会自动适配屏幕,让图表完整显示在可视区域内。
405
- :::
406
-
407
- ### 适用场景
408
-
409
- 全屏预览特别适合以下场景:
410
- - 复杂的系统架构图
411
- - 多参与者的时序图
412
- - 详细的甘特图计划
413
- - 包含大量节点的流程图
414
- - 复杂的实体关系图
415
-
416
- ## 注意事项
417
-
418
- ::: warning 渲染提示
419
- - 图表会在页面加载后渲染
420
- - 复杂图表可能需要几秒钟
421
- - 语法错误会导致渲染失败
422
- :::
423
-
424
- ::: tip 调试技巧
425
- 可以使用 [Mermaid Live Editor](https://mermaid.live/) 在线调试图表语法。
426
- :::
427
-
428
- ## 下一步
429
-
430
- - [视频嵌入](./07-video) - 在文章中嵌入视频
431
- - [LaTeX 数学公式](./08-latex) - 学习数学公式排版
@@ -1,243 +0,0 @@
1
- ---
2
- title: 视频嵌入
3
- description: 在文章中嵌入 YouTube、Bilibili 和自托管视频
4
- pubDate: 2025-12-11
5
- author: Astro Blog
6
- categories:
7
- - 博客教程
8
- tags:
9
- - 视频
10
- - MDX
11
- - 多媒体
12
- ---
13
-
14
- # 视频嵌入
15
-
16
- 本博客支持嵌入多种视频平台,包括 YouTube、Bilibili 以及自托管视频文件。
17
-
18
- ::: warning 文件格式要求
19
- 视频嵌入功能需要使用 `.mdx` 格式的文件,以支持组件导入。
20
- :::
21
-
22
- ## 快速开始
23
-
24
- 在 MDX 文件中导入组件:
25
-
26
- ```mdx
27
- ---
28
- title: 我的视频文章
29
- ---
30
-
31
- import YouTube from '@jet-w/astro-blog/components/media/YouTube.astro';
32
- import Bilibili from '@jet-w/astro-blog/components/media/Bilibili.astro';
33
- import Video from '@jet-w/astro-blog/components/media/Video.astro';
34
- import VideoPlayer from '@jet-w/astro-blog/components/media/VideoPlayer.astro';
35
-
36
- 文章内容...
37
-
38
- <YouTube id="dQw4w9WgXcQ" />
39
- ```
40
-
41
- ## YouTube 视频
42
-
43
- ### 基础用法
44
-
45
- 使用视频 ID:
46
-
47
- ```mdx
48
- <YouTube id="dQw4w9WgXcQ" />
49
- ```
50
-
51
- 使用完整 URL:
52
-
53
- ```mdx
54
- <YouTube url="https://www.youtube.com/watch?v=dQw4w9WgXcQ" />
55
- ```
56
-
57
- ### 可用参数
58
-
59
- | 参数 | 类型 | 默认值 | 说明 |
60
- |:---|:---|:---|:---|
61
- | `id` | string | - | YouTube 视频 ID |
62
- | `url` | string | - | YouTube 视频完整 URL |
63
- | `title` | string | "YouTube 视频" | 视频标题(无障碍) |
64
- | `start` | number | 0 | 开始时间(秒) |
65
- | `autoplay` | boolean | false | 是否自动播放 |
66
- | `muted` | boolean | false | 是否静音 |
67
- | `loop` | boolean | false | 是否循环播放 |
68
- | `aspectRatio` | string | "16/9" | 宽高比 |
69
-
70
- ### 示例
71
-
72
- 从特定时间开始播放:
73
-
74
- ```mdx
75
- <YouTube id="dQw4w9WgXcQ" start={60} title="歌曲片段" />
76
- ```
77
-
78
- ::: tip 隐私增强模式
79
- YouTube 组件默认使用 `youtube-nocookie.com` 域名,保护用户隐私。
80
- :::
81
-
82
- ## Bilibili 视频
83
-
84
- ### 基础用法
85
-
86
- 使用 BV 号:
87
-
88
- ```mdx
89
- <Bilibili bvid="BV1xx411c7mD" />
90
- ```
91
-
92
- 使用 AV 号:
93
-
94
- ```mdx
95
- <Bilibili aid="170001" />
96
- ```
97
-
98
- 使用完整 URL:
99
-
100
- ```mdx
101
- <Bilibili url="https://www.bilibili.com/video/BV1xx411c7mD" />
102
- ```
103
-
104
- ### 可用参数
105
-
106
- | 参数 | 类型 | 默认值 | 说明 |
107
- |:---|:---|:---|:---|
108
- | `bvid` | string | - | BV 号 |
109
- | `aid` | string/number | - | AV 号 |
110
- | `url` | string | - | Bilibili 视频完整 URL |
111
- | `title` | string | "Bilibili 视频" | 视频标题 |
112
- | `page` | number | 1 | 分P(从1开始) |
113
- | `start` | number | 0 | 开始时间(秒) |
114
- | `highQuality` | boolean | true | 是否高清 |
115
- | `autoplay` | boolean | false | 是否自动播放 |
116
- | `muted` | boolean | false | 是否静音 |
117
- | `aspectRatio` | string | "16/9" | 宽高比 |
118
-
119
- ### 示例
120
-
121
- 播放第二个分P:
122
-
123
- ```mdx
124
- <Bilibili bvid="BV1xx411c7mD" page={2} title="教程第二集" />
125
- ```
126
-
127
- ## 自托管视频
128
-
129
- ### 基础用法
130
-
131
- ```mdx
132
- <Video src="/videos/demo.mp4" />
133
- ```
134
-
135
- 带封面图片:
136
-
137
- ```mdx
138
- <Video src="/videos/demo.mp4" poster="/images/video-poster.jpg" />
139
- ```
140
-
141
- ### 可用参数
142
-
143
- | 参数 | 类型 | 默认值 | 说明 |
144
- |:---|:---|:---|:---|
145
- | `src` | string | - | 视频源 URL(必填) |
146
- | `type` | string | 自动检测 | 视频类型 |
147
- | `poster` | string | - | 封面图片 |
148
- | `title` | string | "视频" | 视频标题 |
149
- | `autoplay` | boolean | false | 是否自动播放 |
150
- | `muted` | boolean | false | 是否静音 |
151
- | `loop` | boolean | false | 是否循环播放 |
152
- | `controls` | boolean | true | 是否显示控制栏 |
153
- | `preload` | string | "metadata" | 预加载策略 |
154
- | `aspectRatio` | string | "16/9" | 宽高比 |
155
- | `sources` | array | [] | 备用视频源 |
156
-
157
- ### 多格式支持
158
-
159
- 提供多个格式以获得更好的兼容性:
160
-
161
- ```mdx
162
- <Video
163
- src="/videos/demo.mp4"
164
- sources={[
165
- { src: "/videos/demo.webm", type: "video/webm" },
166
- { src: "/videos/demo.ogg", type: "video/ogg" }
167
- ]}
168
- />
169
- ```
170
-
171
- ### 背景视频
172
-
173
- 创建静音循环播放的背景视频:
174
-
175
- ```mdx
176
- <Video src="/videos/background.mp4" autoplay muted loop controls={false} />
177
- ```
178
-
179
- ## 统一播放器
180
-
181
- `VideoPlayer` 组件可以自动检测视频平台:
182
-
183
- ```mdx
184
- import VideoPlayer from '@jet-w/astro-blog/components/media/VideoPlayer.astro';
185
-
186
- <!-- 自动识别为 YouTube -->
187
- <VideoPlayer src="https://www.youtube.com/watch?v=dQw4w9WgXcQ" />
188
-
189
- <!-- 自动识别为 Bilibili -->
190
- <VideoPlayer src="https://www.bilibili.com/video/BV1xx411c7mD" />
191
-
192
- <!-- 自动识别为自托管视频 -->
193
- <VideoPlayer src="/videos/demo.mp4" />
194
- ```
195
-
196
- ## 自定义宽高比
197
-
198
- 所有视频组件都支持 `aspectRatio` 参数:
199
-
200
- ```mdx
201
- <!-- 竖屏视频 (9:16) -->
202
- <YouTube id="shorts_id" aspectRatio="9/16" />
203
-
204
- <!-- 电影比例 (21:9) -->
205
- <Video src="/videos/cinematic.mp4" aspectRatio="21/9" />
206
-
207
- <!-- 正方形 (1:1) -->
208
- <Bilibili bvid="BV..." aspectRatio="1/1" />
209
- ```
210
-
211
- ## 视频网格布局
212
-
213
- 使用 `video-grid` 类创建响应式视频网格:
214
-
215
- ```html
216
- <div class="video-grid">
217
- <YouTube id="video1" />
218
- <YouTube id="video2" />
219
- </div>
220
- ```
221
-
222
- ## 最佳实践
223
-
224
- ::: tip 无障碍访问
225
- 为视频设置有意义的 `title` 属性,帮助使用屏幕阅读器的用户理解视频内容。
226
- :::
227
-
228
- ::: warning 自动播放限制
229
- - 大多数浏览器限制自动播放
230
- - 自动播放通常需要配合静音使用
231
- - 建议谨慎使用自动播放,避免影响用户体验
232
- :::
233
-
234
- ::: info 自托管视频优化
235
- - 建议将视频压缩到合适大小
236
- - 提供多种格式(MP4 + WebM)以获得最佳兼容性
237
- - 使用 `poster` 设置封面图,提升加载体验
238
- :::
239
-
240
- ## 下一步
241
-
242
- - [LaTeX 数学公式](./08-latex) - 排版数学公式
243
- - [图标系统](./09-icons) - 使用各种图标