@jet-w/astro-blog 0.2.0 → 0.2.1
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.
- package/dist/{chunk-HVQKQN6B.js → chunk-6D3XRDNY.js} +1 -1
- package/dist/{chunk-ATRISB7B.js → chunk-A2E2VSAQ.js} +43 -3
- package/dist/{chunk-AZHCNNAC.js → chunk-TJTPX2WP.js} +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.js +2 -2
- package/dist/{i18n-5H4W145i.d.ts → i18n-PgMCFBw0.d.ts} +20 -0
- package/dist/index.d.ts +21 -3
- package/dist/index.js +20 -3
- package/dist/integration.d.ts +1 -1
- package/dist/integration.js +2 -2
- package/package.json +1 -1
- package/src/components/blog/FloatingToc.vue +11 -3
- package/src/components/blog/Hero.astro +17 -2
- package/src/components/blog/NavigationTabs.vue +46 -15
- package/src/components/blog/PostCard.astro +28 -10
- package/src/components/blog/RelatedPosts.astro +23 -7
- package/src/components/blog/TableOfContents.astro +10 -4
- package/src/components/blog/TagCloud.astro +4 -3
- package/src/components/home/FeaturedPostsSection.astro +22 -6
- package/src/components/home/QuickNavSection.astro +33 -4
- package/src/components/home/RecentPostsSection.astro +22 -6
- package/src/components/home/StatsSection.astro +24 -6
- package/src/components/layout/Header.astro +9 -5
- package/src/components/layout/Sidebar.astro +14 -11
- package/src/components/ui/SearchBox.vue +13 -5
- package/src/components/ui/SearchInterface.vue +49 -25
- package/src/pages/archives/[year]/[month].astro +36 -17
- package/src/pages/archives/index.astro +36 -20
- package/src/pages/categories/[category].astro +33 -16
- package/src/pages/categories/index.astro +37 -14
- package/src/pages/posts/[...slug].astro +125 -18
- package/src/pages/posts/index.astro +59 -37
- package/src/pages/posts/page/[page].astro +65 -27
- package/src/pages/search.astro +50 -14
- package/src/pages/slides/index.astro +25 -6
- package/src/pages/tags/[tag].astro +32 -15
- package/src/pages/tags/index.astro +39 -16
- package/src/plugins/remark-containers.mjs +351 -322
- package/src/plugins/remark-protect-code.mjs +69 -0
- package/src/styles/global.css +35 -1
- package/templates/default/.claude/ralph-loop.local.md +48 -0
- package/templates/default/astro.config.mjs +13 -4
- package/templates/default/content/posts/blog_docs_en/{get-started → 01.get-started}/01-intro.md +1 -1
- package/templates/default/content/posts/blog_docs_en/{get-started → 01.get-started}/02-install.md +1 -1
- package/templates/default/content/posts/blog_docs_en/{get-started → 01.get-started}/03-create-post.md +1 -1
- package/templates/default/content/posts/blog_docs_en/{get-started → 01.get-started}/04-structure.md +1 -1
- package/templates/default/content/posts/blog_docs_en/01.get-started/05-deploy.md +208 -0
- package/templates/default/content/posts/blog_docs_en/{get-started → 01.get-started}/README.md +1 -1
- package/templates/default/content/posts/blog_docs_en/02.guide/02-containers.md +245 -0
- package/templates/default/content/posts/blog_docs_en/{guide/markdown → 02.guide}/03-code-blocks.md +2 -1
- package/templates/default/content/posts/blog_docs_en/{guide/features/01-mermaid.md → 02.guide/03-mermaid.md} +1 -1
- package/templates/default/content/posts/blog_docs_en/{guide/features → 02.guide}/04-icons.md +4 -2
- package/templates/default/content/posts/blog_docs_en/{guide/features/02-latex.md → 02.guide/06-latex.md} +1 -1
- package/templates/default/content/posts/blog_docs_en/{guide/features/03-video.md → 02.guide/07-video.md} +1 -1
- package/templates/default/content/posts/blog_docs_en/02.guide/08-slides.md +359 -0
- package/templates/default/content/posts/blog_docs_en/{guide/markdown → 02.guide}/README.md +22 -3
- package/templates/default/content/posts/blog_docs_en/{config → 03.config}/01-site.md +1 -1
- package/templates/default/content/posts/blog_docs_en/{config → 03.config}/02-sidebar.md +1 -1
- package/templates/default/content/posts/blog_docs_en/{config → 03.config}/03-i18n.md +88 -24
- package/templates/default/content/posts/blog_docs_en/{config → 03.config}/README.md +1 -1
- package/templates/default/content/posts/blog_docs_en/README.md +2 -1
- package/templates/default/content/posts/blog_docs_zh/01.get-started/01-intro.md +81 -0
- package/templates/default/content/posts/blog_docs_zh/01.get-started/02-install.md +137 -0
- package/templates/default/content/posts/blog_docs_zh/01.get-started/03-create-post.md +176 -0
- package/templates/default/content/posts/blog_docs_zh/01.get-started/04-structure.md +173 -0
- package/templates/default/content/posts/blog_docs_zh/01.get-started/05-deploy.md +208 -0
- package/templates/default/content/posts/blog_docs_zh/01.get-started/README.md +52 -0
- package/templates/default/content/posts/blog_docs_zh/02.guide/02-containers.md +245 -0
- package/templates/default/content/posts/blog_docs_zh/02.guide/03-code-blocks.md +206 -0
- package/templates/default/content/posts/blog_docs_zh/02.guide/03-mermaid.md +194 -0
- package/templates/default/content/posts/blog_docs_zh/02.guide/04-icons.md +229 -0
- package/templates/default/content/posts/blog_docs_zh/02.guide/06-latex.md +233 -0
- package/templates/default/content/posts/blog_docs_zh/02.guide/07-video.md +184 -0
- package/templates/default/content/posts/blog_docs_zh/02.guide/08-slides.md +359 -0
- package/templates/default/content/posts/blog_docs_zh/02.guide/README.md +213 -0
- package/templates/default/content/posts/blog_docs_zh/03.config/01-site.md +208 -0
- package/templates/default/content/posts/blog_docs_zh/03.config/02-sidebar.md +240 -0
- package/templates/default/content/posts/blog_docs_zh/03.config/03-i18n.md +348 -0
- package/templates/default/content/posts/blog_docs_zh/03.config/README.md +85 -0
- package/templates/default/content/posts/blog_docs_zh/README.md +78 -0
- package/templates/default/src/config/locales/en/index.ts +5 -1
- package/templates/default/src/config/locales/en/menu.ts +3 -1
- package/templates/default/src/config/locales/en/sidebar.ts +18 -2
- package/templates/default/src/config/locales/en/site.ts +1 -1
- package/templates/default/src/config/locales/en/ui.ts +29 -0
- package/templates/default/src/config/locales/zh-CN/index.ts +5 -1
- package/templates/default/src/config/locales/zh-CN/menu.ts +7 -5
- package/templates/default/src/config/locales/zh-CN/sidebar.ts +22 -6
- package/templates/default/src/config/locales/zh-CN/site.ts +2 -2
- package/templates/default/src/config/locales/zh-CN/ui.ts +29 -0
- package/templates/default/src/config/site.ts +2 -2
- package/templates/default/src/content.config.ts +15 -3
- package/templates/default/content/posts/blog_docs/01-quick-start.md +0 -162
- package/templates/default/content/posts/blog_docs/02-frontmatter.md +0 -277
- package/templates/default/content/posts/blog_docs/03-markdown-basic.md +0 -350
- package/templates/default/content/posts/blog_docs/04-containers.md +0 -331
- package/templates/default/content/posts/blog_docs/05-code-blocks.md +0 -388
- package/templates/default/content/posts/blog_docs/06-mermaid.md +0 -431
- package/templates/default/content/posts/blog_docs/07-video.md +0 -243
- package/templates/default/content/posts/blog_docs/08-latex.md +0 -382
- package/templates/default/content/posts/blog_docs/09-icons.md +0 -326
- package/templates/default/content/posts/blog_docs/10-sidebar.md +0 -445
- package/templates/default/content/posts/blog_docs/11-config.md +0 -334
- package/templates/default/content/posts/blog_docs/12-i18n.md +0 -355
- package/templates/default/content/posts/blog_docs/12-slides.mdx +0 -552
- package/templates/default/content/posts/blog_docs/README.md +0 -152
- package/templates/default/content/posts/blog_docs_en/get-started/05-deploy.md +0 -197
- package/templates/default/content/posts/blog_docs_en/guide/README.md +0 -59
- package/templates/default/content/posts/blog_docs_en/guide/features/README.md +0 -51
- 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) - 使用各种图标
|