<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>佳佳的博客</title><link>https://www.liujiajia.me/</link><description>Recent content on 佳佳的博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 30 Jun 2026 18:51:31 +0800</lastBuildDate><atom:link href="https://www.liujiajia.me/index.xml" rel="self" type="application/rss+xml"/><item><title>苏州工业园区景城学校 2025—2026 学年第二学期三年级暑假生活指导</title><link>https://www.liujiajia.me/docs/blog/2026/6/30/jingcheng-2026-guidance-for-the-summer-vacation-of-grade-3.html</link><pubDate>Tue, 30 Jun 2026 09:45:38 +0800</pubDate><guid>https://www.liujiajia.me/docs/blog/2026/6/30/jingcheng-2026-guidance-for-the-summer-vacation-of-grade-3.html</guid><description>&lt;h1 id="苏州工业园区景城学校-20252026-学年第二学期三年级暑假生活指导"&gt;苏州工业园区景城学校 2025—2026 学年第二学期三年级暑假生活指导 &lt;a href="#%e8%8b%8f%e5%b7%9e%e5%b7%a5%e4%b8%9a%e5%9b%ad%e5%8c%ba%e6%99%af%e5%9f%8e%e5%ad%a6%e6%a0%a1-20252026-%e5%ad%a6%e5%b9%b4%e7%ac%ac%e4%ba%8c%e5%ad%a6%e6%9c%9f%e4%b8%89%e5%b9%b4%e7%ba%a7%e6%9a%91%e5%81%87%e7%94%9f%e6%b4%bb%e6%8c%87%e5%af%bc" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;亲爱的同学们，本学期学习生活将告一段落，美好的暑假即将开始。希望同学们在假期里用心体验，快乐生活，做假期的小主人！&lt;/p&gt;</description></item><item><title>Umami 重新构建语言资源文件</title><link>https://www.liujiajia.me/docs/blog/2026/6/23/umami-rebuild-lang.html</link><pubDate>Wed, 24 Jun 2026 09:45:32 +0800</pubDate><guid>https://www.liujiajia.me/docs/blog/2026/6/23/umami-rebuild-lang.html</guid><description>&lt;h1 id="umami-重新构建语言资源文件"&gt;Umami 重新构建语言资源文件 &lt;a href="#umami-%e9%87%8d%e6%96%b0%e6%9e%84%e5%bb%ba%e8%af%ad%e8%a8%80%e8%b5%84%e6%ba%90%e6%96%87%e4%bb%b6" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;修改 zh-CN.json 文件后，并不会自动应用新的语言资源，需要重新构建语言文件。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;安装依赖&lt;/p&gt;



 
 
 

 
 
 
 

 
 

 &lt;div class="prism-codeblock "&gt;
 &lt;pre id="7baad92" class="language-bash line-numbers"&gt;
&lt;code&gt;nvm use 22.22.3
npm install -g pnpm@10
npm install -g prettier
pnpm install&lt;/code&gt;
 &lt;/pre&gt;
 &lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;重新构建语言文件&lt;/p&gt;</description></item><item><title>Umami 3.0.3 构建失败问题修复</title><link>https://www.liujiajia.me/docs/blog/2026/5/11/umami-3-0-3-docker-build-error.html</link><pubDate>Mon, 11 May 2026 20:53:31 +0800</pubDate><guid>https://www.liujiajia.me/docs/blog/2026/5/11/umami-3-0-3-docker-build-error.html</guid><description>&lt;h1 id="umami-303-构建失败问题修复"&gt;Umami 3.0.3 构建失败问题修复 &lt;a href="#umami-303-%e6%9e%84%e5%bb%ba%e5%a4%b1%e8%b4%a5%e9%97%ae%e9%a2%98%e4%bf%ae%e5%a4%8d" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;上个月本地部署了 umami，但是今天在修复一个 bug 时，自动构建报错了。&lt;/p&gt;



 
 
 

 
 
 
 

 
 

 &lt;div class="prism-codeblock "&gt;
 &lt;pre id="116630f" class="language-bash line-numbers"&gt;
&lt;code&gt;[00:01:36 &amp;#43;0ms] #14 [runner 6/12] RUN pnpm --allow-build=&amp;#39;@prisma/engines&amp;#39; add npm-run-all dotenv chalk semver prisma@6.19.0 @prisma/adapter-pg@6.19.0
[00:01:36 &amp;#43;652ms] #14 77.12 Progress: resolved 162, reused 0, downloaded 147, added 0
[00:01:37 &amp;#43;1.0s] #14 78.12 Progress: resolved 185, reused 0, downloaded 182, added 0
[00:01:38 &amp;#43;1.0s] #14 79.12 Progress: resolved 185, reused 0, downloaded 183, added 0
[00:01:39 &amp;#43;999ms] #14 80.12 Progress: resolved 187, reused 0, downloaded 184, added 0
[00:01:40 &amp;#43;950ms] #14 81.07 Packages: &amp;#43;188
[00:01:40 &amp;#43;0ms] #14 81.07 &amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;&amp;#43;
[00:01:40 &amp;#43;202ms] #14 81.12 Progress: resolved 188, reused 0, downloaded 186, added 29
[00:01:41 &amp;#43;849ms] #14 82.12 Progress: resolved 188, reused 0, downloaded 188, added 187
[00:01:42 &amp;#43;1.0s] #14 83.15 Progress: resolved 188, reused 0, downloaded 188, added 188
[00:01:43 &amp;#43;188ms] #14 83.15 Progress: resolved 188, reused 0, downloaded 188, added 188, done
[00:01:43 &amp;#43;0ms] #14 83.19 .../node_modules/@prisma/engines postinstall$ node scripts/postinstall.js
[00:01:45 &amp;#43;2.9s] #14 86.25 .../node_modules/@prisma/engines postinstall: Done
[00:01:46 &amp;#43;285ms] #14 86.53 
[00:01:46 &amp;#43;0ms] #14 86.53 dependencies:
[00:01:46 &amp;#43;0ms] #14 86.53 &amp;#43; @prisma/adapter-pg 6.19.0 (7.8.0 is available)
[00:01:46 &amp;#43;0ms] #14 86.53 &amp;#43; chalk 5.6.2
[00:01:46 &amp;#43;0ms] #14 86.53 &amp;#43; dotenv 17.4.2
[00:01:46 &amp;#43;0ms] #14 86.53 &amp;#43; npm-run-all 4.1.5
[00:01:46 &amp;#43;0ms] #14 86.53 &amp;#43; prisma 6.19.0 (7.8.0 is available)
[00:01:46 &amp;#43;0ms] #14 86.53 &amp;#43; semver 7.8.0
[00:01:46 &amp;#43;0ms] #14 86.53 
[00:01:46 &amp;#43;212ms] #14 86.60 [ERR_PNPM_IGNORED_BUILDS] Ignored build scripts: prisma@6.19.0
[00:01:46 &amp;#43;0ms] #14 86.60 
[00:01:46 &amp;#43;0ms] #14 86.60 Run &amp;#34;pnpm approve-builds&amp;#34; to pick which dependencies should be allowed to run scripts.
[00:01:46 &amp;#43;289ms] #14 ERROR: process &amp;#34;/bin/sh -c pnpm --allow-build=&amp;#39;@prisma/engines&amp;#39; add npm-run-all dotenv chalk semver prisma@${PRISMA_VERSION} @prisma/adapter-pg@${PRISMA_VERSION}&amp;#34; did not complete successfully: exit code: 1
[00:01:53 &amp;#43;6.6s] ------
[00:01:53 &amp;#43;0ms] &amp;gt; [runner 6/12] RUN pnpm --allow-build=&amp;#39;@prisma/engines&amp;#39; add npm-run-all dotenv chalk semver prisma@6.19.0 @prisma/adapter-pg@6.19.0:
[00:01:53 &amp;#43;0ms] 86.53 &amp;#43; @prisma/adapter-pg 6.19.0 (7.8.0 is available)
[00:01:53 &amp;#43;0ms] 86.53 &amp;#43; chalk 5.6.2
[00:01:53 &amp;#43;0ms] 86.53 &amp;#43; dotenv 17.4.2
[00:01:53 &amp;#43;0ms] 86.53 &amp;#43; npm-run-all 4.1.5
[00:01:53 &amp;#43;0ms] 86.53 &amp;#43; prisma 6.19.0 (7.8.0 is available)
[00:01:53 &amp;#43;0ms] 86.53 &amp;#43; semver 7.8.0
[00:01:53 &amp;#43;0ms] 86.53 
[00:01:53 &amp;#43;0ms] 86.60 [ERR_PNPM_IGNORED_BUILDS] Ignored build scripts: prisma@6.19.0
[00:01:53 &amp;#43;0ms] 86.60 
[00:01:53 &amp;#43;0ms] 86.60 Run &amp;#34;pnpm approve-builds&amp;#34; to pick which dependencies should be allowed to run scripts.
[00:01:53 &amp;#43;0ms] ------
[00:01:53 &amp;#43;0ms] WARNING: current commit information was not captured by the build: git was not found in the system: exec: &amp;#34;git&amp;#34;: executable file not found in $PATH
[00:01:53 &amp;#43;1ms] Dockerfile:45
[00:01:53 &amp;#43;0ms] --------------------
[00:01:53 &amp;#43;0ms] 44 | # Script dependencies
[00:01:53 &amp;#43;0ms] 45 | &amp;gt;&amp;gt;&amp;gt; RUN pnpm --allow-build=&amp;#39;@prisma/engines&amp;#39; add npm-run-all dotenv chalk semver \
[00:01:53 &amp;#43;0ms] 46 | &amp;gt;&amp;gt;&amp;gt; prisma@${PRISMA_VERSION} \
[00:01:53 &amp;#43;0ms] 47 | &amp;gt;&amp;gt;&amp;gt; @prisma/adapter-pg@${PRISMA_VERSION}
[00:01:53 &amp;#43;0ms] 48 | 
[00:01:53 &amp;#43;0ms] --------------------
[00:01:53 &amp;#43;0ms] ERROR: failed to build: failed to solve: process &amp;#34;/bin/sh -c pnpm --allow-build=&amp;#39;@prisma/engines&amp;#39; add npm-run-all dotenv chalk semver prisma@${PRISMA_VERSION} @prisma/adapter-pg@${PRISMA_VERSION}&amp;#34; did not complete successfully: exit code: 1
[00:01:53 &amp;#43;12ms] exit code: 1, signal: -1, duration: 1.8m&lt;/code&gt;
 &lt;/pre&gt;
 &lt;/div&gt;

&lt;p&gt;CNB 自动的 AI 分析提供了几个方案，但是改了几次都没成功。最后还是在项目中直接把错误日志发给了 Codex，让它直接修改 Dockerfile。&lt;/p&gt;</description></item><item><title>景城英语任务单 3B</title><link>https://www.liujiajia.me/docs/blog/2026/3/28/jc-en-3b.html</link><pubDate>Sat, 28 Mar 2026 11:54:07 +0800</pubDate><guid>https://www.liujiajia.me/docs/blog/2026/3/28/jc-en-3b.html</guid><description>&lt;!-- # 景城英语任务单 3B --&gt;
&lt;h2 id="unit-1-school-things"&gt;&lt;code&gt;Unit 1 School things&lt;/code&gt; &lt;a href="#unit-1-school-things" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="word-time--核心词汇"&gt;&lt;code&gt;Word time&lt;/code&gt; | 核心词汇 &lt;a href="#word-time--%e6%a0%b8%e5%bf%83%e8%af%8d%e6%b1%87" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pencil&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;铅笔&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pen&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;钢笔&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ruler&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;尺子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;rubber&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;橡皮&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;book&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;书&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;schoolbag&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;书包&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pencil case&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;铅笔盒&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;a/an&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;一 (个)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;idea&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;想法&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;this&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;这；这个&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;that&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;那；那个&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;need&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;需要&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;put&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;放&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;guess&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;猜&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;find&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;找；发现&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;show&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;展示&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;try&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;尝试&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ready&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;准备好的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="phrase-time--核心词组"&gt;&lt;code&gt;Phrase time&lt;/code&gt; | 核心词组 &lt;a href="#phrase-time--%e6%a0%b8%e5%bf%83%e8%af%8d%e7%bb%84" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;my pen&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我的钢笔&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;your pencil&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你的铅笔&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;my new pencil case&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我的新铅笔盒&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;your new ruler&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你的新尺子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;a new schoolbag&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;一个新书包&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;your school things&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你的学校用品&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;for your pencil&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;为你的铅笔 (准备的)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;for me&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;给我&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;on the sofa&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在沙发上&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;in your schoolbag&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在你的书包里&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;take care of...&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;照看……&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;take a look&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;看一看&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;find a pencil case&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;发现一个铅笔盒&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;get ready for...&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;为……做好准备&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;show your school things&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;展示你的学校用品&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;put ... in your schoolbag&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;把……放在你的书包里&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="sentence-time--核心句子"&gt;&lt;code&gt;Sentence time&lt;/code&gt; | 核心句子 &lt;a href="#sentence-time--%e6%a0%b8%e5%bf%83%e5%8f%a5%e5%ad%90" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;1.—What's this?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;这是什么?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—It's a pen.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它是一支钢笔。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;2.—What's that?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;那是什么?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—It's a ruler.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它是一把尺子。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;3.—Is it a rubber?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它是一块橡皮吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Yes, it is.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;是的，它是。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;4.—Is it a book?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它是一本书吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—No, it isn't. It's a pencil case!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;不，它不是。它是一个铅笔盒。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;5.—It's for your pencil.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它是给你的铅笔 (准备) 的。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Good idea. Thank you, Su Hai.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;好主意。谢谢你，苏海。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;6.Take care of your school things.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;保管好你的学校用品。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;7.Put your school things in your schoolbag.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;把你的学校用品放进书包。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;8.What's in my schoolbag? Take a look.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我的书包里有什么?看一看。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;9.—What does Dad find on the sofa?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;爸爸在沙发上发现了什么?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—A pencil case.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;一个铅笔盒。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;10.—What should Bobby do to get ready for school?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;为了做好上学准备，博比应该做什么?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—He should put his school things in his schoolbag.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;他应该把他的学校用品放进书包。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="unit-2-clean-our-classroom"&gt;&lt;code&gt;Unit 2 Clean our classroom&lt;/code&gt; &lt;a href="#unit-2-clean-our-classroom" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="word-time--核心词汇-1"&gt;&lt;code&gt;Word time&lt;/code&gt; | 核心词汇 &lt;a href="#word-time--%e6%a0%b8%e5%bf%83%e8%af%8d%e6%b1%87-1" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;classroom&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;教室&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;door&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;门&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;window&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;窗户&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;blackboard&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;黑板&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;floor&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;地板&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;chair&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;椅子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;desk&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;课桌&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;table&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;餐桌&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;plan&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;计划&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;open&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打开&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;close&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;关上&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sweep&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打扫&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;keep&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;保持&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;let&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;让&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;clean&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;打扫；干净的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dirty&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;脏的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;us&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我们 (宾格)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;them&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;他们 (宾格)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;now&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;现在&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;outside&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在外面&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="phrase-time--核心词组-1"&gt;&lt;code&gt;Phrase time&lt;/code&gt; | 核心词组 &lt;a href="#phrase-time--%e6%a0%b8%e5%bf%83%e8%af%8d%e7%bb%84-1" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;open the door&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;开门&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;close the door&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;关门&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;clean the door&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;把门擦干净&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;clean the blackboard&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;擦黑板&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;look outside&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;看外面&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;go off&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我离开&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;open the window&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;开窗&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;close the window&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;关窗&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;clean the window&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;擦窗户&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sweep the floor&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;扫地&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;go out to play&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;出去玩&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;a good day&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;一个好天&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;put away the books&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;把书收起 (放好)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;keep the classroom clean&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;保持教室干净&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;make a plan to clean the school&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;做一个打扫学校的计划&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;make a plan for cleaning the school&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;为打扫学校做一个计划&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;make a cleaning plan&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;做一个打扫计划&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;talk about cleaning the classroom&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;谈论 (关于) 打扫教室&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="sentence-time--核心句子-1"&gt;&lt;code&gt;Sentence time&lt;/code&gt; | 核心句子 &lt;a href="#sentence-time--%e6%a0%b8%e5%bf%83%e5%8f%a5%e5%ad%90-1" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;1.—Let's clean our classroom!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;让我们打扫教室吧!&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Good idea!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;好主意!&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;2.—Let's clean the blackboard!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;让我们把黑板擦干净吧!&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—OK.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;好的。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;3.—Let's sweep the floor!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;让我们扫地吧!&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—All right.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;好的。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;4.—Open the door,please.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;请把门打开。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—OK.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;好的。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;5.—Please close the window.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;请把窗户关上。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—All right.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;好的。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;6.—Our classroom is dirty. Let's clean it.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我们的教室脏了。让我们打扫吧。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—OK!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;好的!&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;7.—I can put away the books.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我能把书放好。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Me too.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我也能。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;8.—Our classroom is clean now.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我们的教室现在干净了。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Yes. Let's keep it clean.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;是的。让我们保持教室干净。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;9.Look!That desk is dirty!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;看! 那张桌子脏了。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;10.It's a good day. Let's go out to play.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;(今天) 是一个好天。让我们出去玩吧。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;11.Can you clean your home with your family?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你能和你的家人一起打扫你的家吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;12.Make a cleaning plan and talk about it.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;做一个打扫计划，谈一谈。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="unit-3-school-rules"&gt;&lt;code&gt;Unit 3 School rules&lt;/code&gt; &lt;a href="#unit-3-school-rules" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="word-time--核心词汇-2"&gt;&lt;code&gt;Word time&lt;/code&gt; | 核心词汇 &lt;a href="#word-time--%e6%a0%b8%e5%bf%83%e8%af%8d%e6%b1%87-2" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;school&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;学校&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;library&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;图书馆&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;rule&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;规则&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sign&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;标志&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sweet&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;糖果&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;quiet&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;安静的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;late&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;迟的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;fun&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;有趣的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;up&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;向上&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;down&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;向下&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;out&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;向外；出局&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;here&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在这儿&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;run&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;跑&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;eat&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;吃&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;drink&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;喝&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;talk&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;谈话&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;shout&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;喊叫&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;stand&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;站立&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sit&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;坐&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;walk&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;走，步行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;follow&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;遵守&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;see&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;看见；明白&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;share&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;分享&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sorry&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;对不起&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;wrong&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;错误的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;right&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;正确的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;again&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;再次&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;around&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;围绕&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;don't&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;不要&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="phrase-time--核心词组-2"&gt;&lt;code&gt;Phrase time&lt;/code&gt; | 核心词组 &lt;a href="#phrase-time--%e6%a0%b8%e5%bf%83%e8%af%8d%e7%bb%84-2" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;in the library&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在图书馆&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;in class&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在课堂上&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;stand up&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;起立&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sit down&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;坐下&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;would like a sweet&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;想要一颗糖&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;eat here&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在这儿吃东西&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;be late&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;迟到&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;keep quiet&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;保持安静&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;look out of the window&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;看向窗外&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;draw a sign&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;画一个标志&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;draw on the desk&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在课桌上画画&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;talk in class&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在课堂上说话&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;make rules&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;制定规则&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;follow the rules&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;遵守规则&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;at work&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在工作中&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;read in the library&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在图书馆读书&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;our class rules&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我们的班规&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;do your best&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;尽你最大的努力&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;our library rules&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我们的图书馆规则&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;walk around your school&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在你的学校四处走走&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="sentence-time--核心句子-2"&gt;&lt;code&gt;Sentence time&lt;/code&gt; | 核心句子 &lt;a href="#sentence-time--%e6%a0%b8%e5%bf%83%e5%8f%a5%e5%ad%90-2" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;1.This is our library. Look at the library rules.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;这是我们的图书馆。看这些图书馆规则。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;2.—Don't shout!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;不要大叫。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—All right.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;好的。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;3.—This book is fun.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;这本书很有趣。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Yes, it is.But keep quiet, please.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;是的。但是请保持安静。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—I’m sorry.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我很抱歉。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;4.—Hi, how are you doing?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;嗨! 你们好吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Don't shout, Mike.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;迈克，不要大叫。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;5.—Would you like a sweet?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你想要一颗糖吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—No, thank you. We can't eat here.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;不，谢谢你。我们不能在这儿吃东西。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;6.—Don't eat here.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;不要在这儿吃东西。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—I'm sorry.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我很抱歉。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;7.—Let's follow the rules!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;让我们遵守规则!&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—I see.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我明白了。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;8.—You’re late, Bobby.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;博比，你迟到了。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—I'm sorry, Mrs Fox.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;抱歉，狐狸老师。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Sit down, please. Don't be late again.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;请坐吧。不要再迟到了。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;9.Don't look out of the window, Bobby.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;博比，不要往窗外看。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;10.Bobby, don't draw on your desk.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;博比，不要在你的课桌上画画。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;11.Do your best at school today.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;今天在学校尽你最大的努力。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;12.Follow the rules at work or play.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在工作或者游戏中遵守规则。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="unit-4-have-fun-after-class"&gt;&lt;code&gt;Unit 4 Have fun after class&lt;/code&gt; &lt;a href="#unit-4-have-fun-after-class" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="word-time--核心词汇-3"&gt;&lt;code&gt;Word time&lt;/code&gt; | 核心词汇 &lt;a href="#word-time--%e6%a0%b8%e5%bf%83%e8%af%8d%e6%b1%87-3" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;in&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在……里面&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;on&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在……上面&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;under&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在……下面&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;behind&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在……后面&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;by&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在……旁边&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;after&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在……之后&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;where&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在哪儿&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;outside&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在外面&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;del&gt;&lt;code&gt;ready&lt;/code&gt;&lt;/del&gt;&lt;/td&gt;
 &lt;td&gt;&lt;del&gt;准备好的&lt;/del&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;over&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;结束的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;far&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;远的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;lovely&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;极好的；美丽的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;hide&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;躲藏&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;seek&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;寻找&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;speak&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;讲话&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;fly&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;飞&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;plane&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;飞机&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;paper&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;纸&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;flower&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;花&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;tree&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;树&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;del&gt;&lt;code&gt;break&lt;/code&gt;&lt;/del&gt;&lt;/td&gt;
 &lt;td&gt;&lt;del&gt;间歇；休息&lt;/del&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;del&gt;&lt;code&gt;time&lt;/code&gt;&lt;/del&gt;&lt;/td&gt;
 &lt;td&gt;&lt;del&gt;时间&lt;/del&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;playground&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;操场&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;duck&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;鸭子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;butterfly&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;蝴蝶&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;del&gt;&lt;code&gt;club&lt;/code&gt;&lt;/del&gt;&lt;/td&gt;
 &lt;td&gt;&lt;del&gt;社团&lt;/del&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;garden&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;花园&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;place&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;地方&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;today&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;今天&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;del&gt;&lt;code&gt;Art&lt;/code&gt;&lt;/del&gt;&lt;/td&gt;
 &lt;td&gt;&lt;del&gt;美术&lt;/del&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="phrase-time--核心词组-3"&gt;&lt;code&gt;Phrase time&lt;/code&gt; | 核心词组 &lt;a href="#phrase-time--%e6%a0%b8%e5%bf%83%e8%af%8d%e7%bb%84-3" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;on the table&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在餐桌上&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;under the table&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在餐桌下面&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;behind the tree&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在树后面&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;by the tree&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在树旁边&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;in the tree&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在树上&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;on the tree&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;长在树上&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;in the flowers&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在花丛里&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;after class&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;课后&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;play hide-and-seek&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;玩捉迷藏&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;run and hide&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;跑一跑，藏起来&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;play outside&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在外面玩&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;have fun&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;玩得高兴&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;make a paper plane&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;做一个纸飞机&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;find the paper plane&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;找到纸飞机&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;love to run&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;喜爱跑&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;go very far&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;跑得远&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;a lovely day&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;极好的一天&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;del&gt;&lt;code&gt;break time&lt;/code&gt;&lt;/del&gt;&lt;/td&gt;
 &lt;td&gt;&lt;del&gt;休息时间&lt;/del&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;del&gt;&lt;code&gt;the students of the Art Club&lt;/code&gt;&lt;/del&gt;&lt;/td&gt;
 &lt;td&gt;&lt;del&gt;美术社团的学生&lt;/del&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;a picture of you and the butterfly&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;一张你和蝴蝶的画&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;plan your after-class activities&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;计划你的课后活动&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;share with your classmates&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;和你的同学分享&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="sentence-time--核心句子-3"&gt;&lt;code&gt;Sentence time&lt;/code&gt; | 核心句子 &lt;a href="#sentence-time--%e6%a0%b8%e5%bf%83%e5%8f%a5%e5%ad%90-3" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;1.Let's have fun after class.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;让我们课后玩得高兴。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;2.Let's play hide and seek. Run and hide. Don't speak.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;让我们玩捉迷藏。跑起来，躲起来。不要说话。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;del&gt;&lt;code&gt;3.It's break time. Let's play outside.&lt;/code&gt;&lt;/del&gt;&lt;/td&gt;
 &lt;td&gt;&lt;del&gt;现在是休息时间。让我们在外面玩。&lt;/del&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;3.Class is over. Let's play outside.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;下课了。让我们在外面玩。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;4.The planes go very far.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;飞机飞得很远。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;5.Class is over. The students are in the school garden.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;下课了。学生在学校花园里。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;6.It's a lovely day today. Let's draw pictures here.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;今天天气极好。让我们在这儿画画吧。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;7.I want to draw the flowers in our school garden.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我想要画我们学校花园里的花。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;8.—Look! A butterfly is by the tree!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;看! 一只蝴蝶在树旁边。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—How beautiful!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;真美丽!&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;9.Look at the butterfly. It's on the duck.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;看蝴蝶。它在鸭子上面。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;10.—Where is the butterfly? I can't find it.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;蝴蝶在哪儿?我找不到它。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—It's behind you.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它在你身后。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;11.—Where is my paper plane?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我的纸飞机在哪儿?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—It's in the tree.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它在树上。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;12.—Where are Bobby's and his friends' paper planes?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;博比和他朋友们的纸飞机在哪儿?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—They are in the flowers.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它们在花丛里。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;13.—Who is behind the tree?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;谁在树后面?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Yang Ling is behind the tree.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;杨玲在树后面。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;14.—What do you draw?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你画了什么?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—A picture of you and the butterfly.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;一张你和蝴蝶的画。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;15.—How do the students have fun after class?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;学生课后怎么玩得高兴?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—They fly the paper planes.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;他们飞纸飞机。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="unit-5-fruit"&gt;&lt;code&gt;Unit 5 Fruit&lt;/code&gt; &lt;a href="#unit-5-fruit" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="word-time--核心词汇-4"&gt;&lt;code&gt;Word time&lt;/code&gt; | 核心词汇 &lt;a href="#word-time--%e6%a0%b8%e5%bf%83%e8%af%8d%e6%b1%87-4" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;apple&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;苹果&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;orange&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;橙子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;banana&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;香蕉&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;grape&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;葡萄&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mango&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;芒果&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pineapple&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;菠萝&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cherry&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;樱桃&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;peach&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;桃子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pear&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;梨&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;lemon&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;柠檬&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;watermelon&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;西瓜&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;fruit&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;水果&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;salad&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;沙拉&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;plate&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;盘子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;basket&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;篮子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;treat&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;招待&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;magic&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;魔术&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;trick&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;戏法&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;tasty&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;美味的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;yummy&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;好吃的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;have&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;有&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;like&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;喜欢&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;make&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;制作；做&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;share&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;分享&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;some&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;一些&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;any&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;任何&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;many&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;许多&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="phrase-time--核心词组-4"&gt;&lt;code&gt;Phrase time&lt;/code&gt; | 核心词组 &lt;a href="#phrase-time--%e6%a0%b8%e5%bf%83%e8%af%8d%e7%bb%84-4" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;a fruit salad&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;一个水果沙拉&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;lots of fruit&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;许多水果&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;a sweet grape&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;一颗甜葡萄&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;the nice bananas&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;好吃的香蕉&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;some cherries&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;一些樱桃&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;many peaches&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;许多桃子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;on my plate&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在我的盘子上&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;in the basket&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在篮子里&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;share the fruit&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;分享这些水果&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;share the mangoes&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;分享这些芒果&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;make a fruit salad&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;做一个水果沙拉&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;play a magic trick&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;玩一个魔术戏法&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;look at the mango tree&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;看芒果树&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;red and sweet&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;又红又甜&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;big and round&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;又大又圆&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;how many mangoes&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;多少个芒果&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="sentence-time--核心句子-4"&gt;&lt;code&gt;Sentence time&lt;/code&gt; | 核心句子 &lt;a href="#sentence-time--%e6%a0%b8%e5%bf%83%e5%8f%a5%e5%ad%90-4" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;1.I like apples. They are red and sweet.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我喜欢苹果。它们又红又甜。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;2.I don't like mangoes. What about you?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我不喜欢芒果。你呢?`&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;3.—Do you have a mango?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你有一个芒果吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Yes, I do.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;是的，我有。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;4.—Do you have an orange?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你有一个橙子吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—No, I don't.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;不，我没有。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;5.—Do you like bananas?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你喜欢香蕉吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Yes,I do.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;是的，我喜欢。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;6.—Do you like mangoes?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你喜欢芒果吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—No,I don't.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;不，我不喜欢。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;7.—What fruit do you like?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你喜欢什么水果?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—I like oranges.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我喜欢橙子。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;8.—What fruit do you have?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你有什么水果?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—I have two bananas.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我有两个香蕉。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;9.—What fruit do the students have?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;学生们有什么水果?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—They have an orange, a mango and some apples.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;他们有一个橙子，一个芒果和一些苹果。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;10.Here you are.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;给你。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;11.—Let's share the fruit salad!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;让我们分享这个水果沙拉吧!&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—How nice!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;真好看!&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;12.—How many mangoes can you see?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你能看到多少芒果?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—I can see six mangoes.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我能看到六个芒果。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;13.—How many mangoes do you have?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你有多少芒果?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—I have six mangoes.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我有六个芒果。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;14.I play a magic trick with three mangoes.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我用 3 个芒果表演一个魔术戏法。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;15.Fruit is good for us.I want lots ofruit.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;水果对我们有益。我想要许多水果。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="unit-6-on-the-farm"&gt;&lt;code&gt;Unit 6 On the farm&lt;/code&gt; &lt;a href="#unit-6-on-the-farm" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="word-time--核心词汇-5"&gt;&lt;code&gt;Word time&lt;/code&gt; | 核心词汇 &lt;a href="#word-time--%e6%a0%b8%e5%bf%83%e8%af%8d%e6%b1%87-5" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;farm&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;农场&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;animal&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;动物&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;plant&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;植物&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;home&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;家&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cow&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;奶牛&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pig&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;猪&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;chicken&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;鸡&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;duck&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;鸭子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dog&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;狗&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sheep&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;绵羊&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;rabbit&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;兔子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;horse&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;马&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;lamb&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;小羊羔&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;carrot&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;胡萝卜&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;tomato&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;西红柿&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;potato&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;土豆&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pea&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;豌豆&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;rain&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;雨&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;rest&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;休息&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;move&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;移动&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;welcome&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;欢迎&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;feel&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;感觉&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;these&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;这些&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;those&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;那些&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="phrase-time--核心词组-5"&gt;&lt;code&gt;Phrase time&lt;/code&gt; | 核心词组 &lt;a href="#phrase-time--%e6%a0%b8%e5%bf%83%e8%af%8d%e7%bb%84-5" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;on the farm&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在农场&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;from the farm&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;来自农场&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;del&gt;&lt;code&gt;welcome to...&lt;/code&gt;&lt;/del&gt;&lt;/td&gt;
 &lt;td&gt;&lt;del&gt;欢迎到……&lt;/del&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;del&gt;&lt;code&gt;look at...&lt;/code&gt;&lt;/del&gt;&lt;/td&gt;
 &lt;td&gt;&lt;del&gt;看……&lt;/del&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;come to my home&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;来到我家&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;come to his farm&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;来到他的农场&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;go to the farm&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;去农场&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;feel happy&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;感到开心&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;run in the rain&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在雨里跑&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;have a rest&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;休息一下&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;these ducks&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;这些鸭子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;those chickens&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;那些鸡&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;animals and plants&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;动物和植物&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;a big carrot&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;一个大胡萝卜&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;a lovely chicken&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;一只可爱的小鸡&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;a home for pigs&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;一个给猪的家&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="sentence-time--核心句子-5"&gt;&lt;code&gt;Sentence time&lt;/code&gt; | 核心句子 &lt;a href="#sentence-time--%e6%a0%b8%e5%bf%83%e5%8f%a5%e5%ad%90-5" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;1.Welcome to our farm!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;欢迎来到我们的农场。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;2.—What are these, Grandpa?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;爷爷，这些是什么?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—They're pigs.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它们是猪。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;3.—What are those under the tree?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;树下面的那些是什么?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—They're cows.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它们是奶牛。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;4.—Are these rabbits, Grandpa?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;爷爷，这些是兔子吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Yes, they are.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;是的，它们是。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;5.—Are they sheep?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它们是绵羊吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—No, they aren't.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;不，它们不是。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;6.—Are those chickens too?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;那些也是鸡吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—No.They're ducks.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;不。它们是鸭子。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;7.Welcome to my farm!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;欢迎来到我的农场!&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;8.These rabbits are cute.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;这些兔子很可爱。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;9.—What do they like?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它们喜欢什么?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—They like carrots.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它们喜欢胡萝卜。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;10.—Is this a home for pigs?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;这个是给猪的家吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Yes, it is.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;是的，它是。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;11.—Let's count the ducks!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;让我们数一数鸭子。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—One, two, three, four.. Don’t move, ducks!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;一，二，三，四……不要动，鸭子。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;12.We can see lots of animals and plants on the farm.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我们在农场上能看到很多动物和植物。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;13.The rabbits run in the rain. They have a rest and run again.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;兔子在雨里跑。它们休息了一下，又跑了起来。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="unit-7-animals"&gt;&lt;code&gt;Unit 7 Animals&lt;/code&gt; &lt;a href="#unit-7-animals" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="word-time--核心词汇-6"&gt;&lt;code&gt;Word time&lt;/code&gt; | 核心词汇 &lt;a href="#word-time--%e6%a0%b8%e5%bf%83%e8%af%8d%e6%b1%87-6" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;tiger&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;老虎&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;monkey&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;猴子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;panda&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;熊猫&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bear&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;熊&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;lion&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;狮子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;elephant&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;大象&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;fish&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;鱼&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bird&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;鸟&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;zoo&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;动物园&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bamboo&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;竹子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cake&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;蛋糕&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;lunchtime&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;午餐时间&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pool&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;游泳池&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;feed&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;喂食&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sleep&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;睡觉&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;watch&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;观看&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;forget&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;忘记&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;next&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;下一个&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;large&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;大的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;fresh&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;新鲜的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="phrase-time--核心词组-6"&gt;&lt;code&gt;Phrase time&lt;/code&gt; | 核心词组 &lt;a href="#phrase-time--%e6%a0%b8%e5%bf%83%e8%af%8d%e7%bb%84-6" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;at/in the zoo&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在动物园&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;in the pool&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在游泳池里&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;go to the zoo&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;去动物园&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;love to sleep&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;喜欢睡觉&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;go to see the pandas&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;去看熊猫&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;feed animals&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;喂食动物&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;look at the monkeys&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;看猴子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;forget his lunch&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;忘记他的午餐&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;would like ...&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;想要……&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;make an animal card&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;做一张动物卡片&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;love to eat ...&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;爱吃……&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;many animals&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;许多动物&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;fresh bamboo&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;新鲜的竹子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;the lovely lions&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;可爱的狮子&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cute and cool&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;可爱又酷&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;large and tall&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;又大又高&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;all day&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;一整天；全天&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;high five&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;高举胳膊击掌&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="sentence-time--核心句子-6"&gt;&lt;code&gt;Sentence time&lt;/code&gt; | 核心句子 &lt;a href="#sentence-time--%e6%a0%b8%e5%bf%83%e5%8f%a5%e5%ad%90-6" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;1.It's lunchtime.(&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;现在) 是午餐时间。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;2.—Do you like fish?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你喜欢鱼吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Yes, I do!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;是的。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;3.—Do you like bananas?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你喜欢香蕉吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—No, I don't.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;不喜欢。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;4.—What food do Bobby and his friends like?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;博比和他的朋友们喜欢什么食物?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—They like cakes, bananas and fish.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;他们喜欢蛋糕、香蕉和鱼。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;5.—Look at the monkeys! They're cute.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;看这些猴子。它们很可爱。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—I like monkeys!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我喜欢猴子。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;6.I like tigers. They're cool.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我喜欢老虎。它们很酷。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;7.—Do you like bears?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你喜欢熊吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Yes, I do. They're big.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;是的。它们很大。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;8.—Do you like lions?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你喜欢狮子吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—No,I don't. I like pandas.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;不喜欢。我喜欢熊猫。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;9.—Do you like elephants in the pool?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你喜欢泳池里的大象吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Yes, I do. They're large, cute and cool!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;是的，我喜欢。它们大、可爱又酷。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;10.—What animal do you like?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你喜欢什么动物。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—I like pandas.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我喜欢熊猫。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;11.—Don't feed animals in the zoo!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;不要在动物园喂食动物。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—I'm sorry!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;抱歉。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;12.—Let's go to see the pandas.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;让我们去看熊猫吧。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—OK.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;好的。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="unit-8-colours"&gt;&lt;code&gt;Unit 8 Colours&lt;/code&gt; &lt;a href="#unit-8-colours" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="word-time--核心词汇-7"&gt;&lt;code&gt;Word time&lt;/code&gt; | 核心词汇 &lt;a href="#word-time--%e6%a0%b8%e5%bf%83%e8%af%8d%e6%b1%87-7" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;red&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;红色&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;orange&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;橙色&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;yellow&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;黄色&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;green&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;绿色&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;blue&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;蓝色&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;brown&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;棕色&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pink&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;粉红色&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;white&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;白色&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;black&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;黑色&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;purple&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;紫色&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;rainbow&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;彩虹&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;balloon&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;气球&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;chameleon&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;变色龙&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sea&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;海&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;colour&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;颜色；涂色&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;buy&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;买&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;change&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;改变&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pick&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;采摘&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;now&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;现在&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sure&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;当然&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;more&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;更多的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;favourite&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;最喜欢的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;colourful&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;五颜六色的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="phrase-time--核心词组-7"&gt;&lt;code&gt;Phrase time&lt;/code&gt; | 核心词组 &lt;a href="#phrase-time--%e6%a0%b8%e5%bf%83%e8%af%8d%e7%bb%84-7" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;black and white&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;黑白相间的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;red and yellow&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;红黄相间的&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;colourful balloons&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;五颜六色的气球&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;a green tree&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;一棵绿色的树&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;an orange balloon&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;一个橙色气球&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;on the tree&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;(长) 在树上&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;what colour&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;什么颜色&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;colour it orange&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;把它涂成橙色&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;buy a balloon&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;买一个气球&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;want a balloon&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;想要一个气球&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;find more things&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;找到更多的东西&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;change colour&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;改变颜色&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;my favourite colour&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我最喜欢的颜色&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;in a green sea&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;在一片绿色的海洋中&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;want to buy a balloon&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;想要买一个气球&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;pick an apple for me&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;为我摘一个苹果&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;many colourful things&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;许多五颜六色的东西&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="sentence-time--核心句子-7"&gt;&lt;code&gt;Sentence time&lt;/code&gt; | 核心句子 &lt;a href="#sentence-time--%e6%a0%b8%e5%bf%83%e5%8f%a5%e5%ad%90-7" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;英文&lt;/th&gt;
 &lt;th&gt;中文&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;1.—Can I buy a balloon?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我能买一个气球吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Sure.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;当然可以。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;2.—I want a balloon.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我想要一个气球。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—OK. What colour?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;好的。什么颜色的?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—Pink, please.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;请给我粉红色的。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;3.Sam also wants to buy a balloon.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;萨姆也想买一个气球。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;4.—What colour is your balloon?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你的气球是什么颜色?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—It's yellow.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它是黄色的。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;5.—What colour is it now?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它现在是什么颜色?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—It's yellow and red now.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它是红黄相间的。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—It's cool!&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它真酷!&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;6.—Is your pen blue?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你的钢笔是蓝色的吗?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—No, it isn't.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;不，它不是。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;7.—What colour is the panda?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;熊猫是什么颜色?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—It's black and white.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它是黑白相间的。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;8.—What colour are these cows?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;这些奶牛是什么颜色?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—They're black and white.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;它们是黑白相间的。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;9.—The chameleon is green again.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;变色龙又是绿色的了。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—How come?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;怎么会呢?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;10.—What changes colour?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;什么改变颜色?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—The chameleon.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;变色龙。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;11.—What colour do you like?&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;你喜欢什么颜色?&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;—I like blue.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;我喜欢蓝色。&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Umami 在淘宝小程序 WebView 中无法统计埋点数据的问题</title><link>https://www.liujiajia.me/docs/blog/2026/3/13/umami-fail-to-track-in-taobao-mp-webview.html</link><pubDate>Fri, 13 Mar 2026 14:23:40 +0800</pubDate><guid>https://www.liujiajia.me/docs/blog/2026/3/13/umami-fail-to-track-in-taobao-mp-webview.html</guid><description>&lt;h1 id="umami-在淘宝小程序-webview-中无法统计埋点数据的问题"&gt;Umami 在淘宝小程序 WebView 中无法统计埋点数据的问题 &lt;a href="#umami-%e5%9c%a8%e6%b7%98%e5%ae%9d%e5%b0%8f%e7%a8%8b%e5%ba%8f-webview-%e4%b8%ad%e6%97%a0%e6%b3%95%e7%bb%9f%e8%ae%a1%e5%9f%8b%e7%82%b9%e6%95%b0%e6%8d%ae%e7%9a%84%e9%97%ae%e9%a2%98" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;现象：在淘宝小程序的 WebView 中发送 Umami 埋点数据时，后端服务中并没有统计到这些数据。&lt;/p&gt;</description></item><item><title>部署 Umami 到 TKE</title><link>https://www.liujiajia.me/docs/blog/2026/3/10/deploy-umami-to-tke.html</link><pubDate>Tue, 10 Mar 2026 09:41:35 +0800</pubDate><guid>https://www.liujiajia.me/docs/blog/2026/3/10/deploy-umami-to-tke.html</guid><description>&lt;h1 id="部署-umami-到-tke"&gt;部署 Umami 到 TKE &lt;a href="#%e9%83%a8%e7%bd%b2-umami-%e5%88%b0-tke" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Umami 是一个基于 Node.js 的轻量级开源埋点分析工具。&lt;/p&gt;
&lt;p&gt;官方仓库：&lt;wbr&gt;&lt;a href="https://github.com/umami-software/umami" rel="external" target="_blank"&gt;https://github.com/umami-software/umami&lt;svg width="16" height="16" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path fill="currentColor" d="M14 5c-.552 0-1-.448-1-1s.448-1 1-1h6c.552 0 1 .448 1 1v6c0 .552-.448 1-1 1s-1-.448-1-1v-3.586l-7.293 7.293c-.391.39-1.024.39-1.414 0-.391-.391-.391-1.024 0-1.414l7.293-7.293h-3.586zm-9 2c-.552 0-1 .448-1 1v11c0 .552.448 1 1 1h11c.552 0 1-.448 1-1v-4.563c0-.552.448-1 1-1s1 .448 1 1v4.563c0 1.657-1.343 3-3 3h-11c-1.657 0-3-1.343-3-3v-11c0-1.657 1.343-3 3-3h4.563c.552 0 1 .448 1 1s-.448 1-1 1h-4.563z"/&gt;&lt;/svg&gt;&lt;/a&gt;&lt;br /&gt;
官方网站：&lt;wbr&gt;&lt;a href="https://umami.is/" rel="external" target="_blank"&gt;https://umami.is/&lt;svg width="16" height="16" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path fill="currentColor" d="M14 5c-.552 0-1-.448-1-1s.448-1 1-1h6c.552 0 1 .448 1 1v6c0 .552-.448 1-1 1s-1-.448-1-1v-3.586l-7.293 7.293c-.391.39-1.024.39-1.414 0-.391-.391-.391-1.024 0-1.414l7.293-7.293h-3.586zm-9 2c-.552 0-1 .448-1 1v11c0 .552.448 1 1 1h11c.552 0 1-.448 1-1v-4.563c0-.552.448-1 1-1s1 .448 1 1v4.563c0 1.657-1.343 3-3 3h-11c-1.657 0-3-1.343-3-3v-11c0-1.657 1.343-3 3-3h4.563c.552 0 1 .448 1 1s-.448 1-1 1h-4.563z"/&gt;&lt;/svg&gt;&lt;/a&gt;&lt;br /&gt;
Demo：&lt;wbr&gt;&lt;a href="https://cloud.umami.is/analytics/us/websites" rel="external" target="_blank"&gt;https://cloud.umami.is/analytics/us/websites&lt;svg width="16" height="16" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path fill="currentColor" d="M14 5c-.552 0-1-.448-1-1s.448-1 1-1h6c.552 0 1 .448 1 1v6c0 .552-.448 1-1 1s-1-.448-1-1v-3.586l-7.293 7.293c-.391.39-1.024.39-1.414 0-.391-.391-.391-1.024 0-1.414l7.293-7.293h-3.586zm-9 2c-.552 0-1 .448-1 1v11c0 .552.448 1 1 1h11c.552 0 1-.448 1-1v-4.563c0-.552.448-1 1-1s1 .448 1 1v4.563c0 1.657-1.343 3-3 3h-11c-1.657 0-3-1.343-3-3v-11c0-1.657 1.343-3 3-3h4.563c.552 0 1 .448 1 1s-.448 1-1 1h-4.563z"/&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Konva 学习</title><link>https://www.liujiajia.me/docs/blog/2026/3/7/konva-learning.html</link><pubDate>Sat, 07 Mar 2026 21:56:59 +0800</pubDate><guid>https://www.liujiajia.me/docs/blog/2026/3/7/konva-learning.html</guid><description>&lt;h1 id="konva-学习"&gt;Konva 学习 &lt;a href="#konva-%e5%ad%a6%e4%b9%a0" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;h2 id="关联文档"&gt;关联文档 &lt;a href="#%e5%85%b3%e8%81%94%e6%96%87%e6%a1%a3" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://konvajs.org/docs/index.html" rel="external" target="_blank"&gt;Tutorials&lt;svg width="16" height="16" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path fill="currentColor" d="M14 5c-.552 0-1-.448-1-1s.448-1 1-1h6c.552 0 1 .448 1 1v6c0 .552-.448 1-1 1s-1-.448-1-1v-3.586l-7.293 7.293c-.391.39-1.024.39-1.414 0-.391-.391-.391-1.024 0-1.414l7.293-7.293h-3.586zm-9 2c-.552 0-1 .448-1 1v11c0 .552.448 1 1 1h11c.552 0 1-.448 1-1v-4.563c0-.552.448-1 1-1s1 .448 1 1v4.563c0 1.657-1.343 3-3 3h-11c-1.657 0-3-1.343-3-3v-11c0-1.657 1.343-3 3-3h4.563c.552 0 1 .448 1 1s-.448 1-1 1h-4.563z"/&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="示例"&gt;示例 &lt;a href="#%e7%a4%ba%e4%be%8b" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;iframe 
 height="450" 
 style="width: 100%;" 
 scrolling="no" 
 title="" 
 src="https://codepen.io/ryu-kaka/embed/preview/LERZOjy?default-tab=js%2Cresult&amp;amp;theme-id=light" 
 frameborder="no"
 version="1" 
 theme-id="light"
 loading="lazy" 
 allowtransparency="true"&gt;
 See the Pen &lt;a href="https://codepen.io/ryu-kaka/embed/preview/LERZOjy"&gt;
 Untitled&lt;/a&gt; by ryu-kaka (&lt;a href="https://codepen.io/ryu-kaka"&gt;@ryu-kaka&lt;/a&gt;)
 on &lt;a href="https://codepen.io"&gt;CodePen&lt;/a&gt;.
&lt;/iframe&gt;
&lt;h2 id="节点层级结构"&gt;节点层级结构 &lt;a href="#%e8%8a%82%e7%82%b9%e5%b1%82%e7%ba%a7%e7%bb%93%e6%9e%84" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="mermaid-template-0" style="min-height: 200px;"&gt;
 &lt;div id="mermaid-container-0" style="overflow: hidden; position: relative; min-height: 200px;"&gt;
 
 &lt;div id="mermaid-loading-0" class="mermaid-loading" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: white; display: flex; align-items: center; justify-content: center; z-index: 10;"&gt;
 &lt;div class="loading-spinner" style="display: flex; flex-direction: column; align-items: center; gap: 8px;"&gt;
 &lt;div class="spinner" style="width: 32px; height: 32px; border: 3px solid #f3f4f6; border-top: 3px solid #3b82f6; border-radius: 50%; animation: spin 1s linear infinite;"&gt;&lt;/div&gt;
 &lt;span style="color: #6b7280; font-size: 14px;"&gt;正在渲染图表...&lt;/span&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;pre class="mermaid" style="display: none;"&gt;graph TD
 %% 带透明度的明亮样式
 classDef stageStyle fill:#4A90E2,color:#FFFFFF,stroke:#2874A6,stroke-width:3px,rounded:10px,opacity:0.9
 classDef layerStyle fill:#7ED321,color:#FFFFFF,stroke:#4CAF50,stroke-width:2px,rounded:10px,opacity:0.9
 classDef groupStyle fill:#FFD700,color:#000000,stroke:#FFC107,stroke-width:2px,rounded:5px,opacity:0.9
 classDef shapeStyle fill:#FF6B6B,color:#FFFFFF,stroke:#FF5252,stroke-width:2px,rounded:5px,opacity:0.9

 %% 节点关系（同上）
 A[Stage] --&amp;gt; B[Layer]
 A --&amp;gt; C[Layer]
 B --&amp;gt; D[Group]
 B --&amp;gt; E[Group]
 C --&amp;gt; F[Shape]
 D --&amp;gt; G[Shape]
 E --&amp;gt; H[Group]
 E --&amp;gt; I[Shape]
 H --&amp;gt; J[Shape]

 class A stageStyle
 class B,C layerStyle
 class D,E,H groupStyle
 class F,G,I,J shapeStyle
 &lt;/pre&gt;
 &lt;/div&gt;
 
 &lt;style&gt;
 @keyframes spin {
 0% { transform: rotate(0deg); }
 100% { transform: rotate(360deg); }
 }
 
 .mermaid {
 overflow: hidden !important;
 min-height: 200px;
 }
 
 .mermaid-loading {
 transition: opacity 0.3s ease;
 }
 
 .mermaid-loading.hidden {
 opacity: 0;
 pointer-events: none;
 }
 
 
 .mermaid-template-0 {
 min-height: 200px;
 }
 .mermaid-controls-0 {
 position: absolute;
 bottom: 10px;
 right: 10px;
 display: flex;
 flex-direction: column;
 gap: 8px;
 z-index: 1000;
 opacity: 0;
 transition: opacity 0.3s;
 }
 .mermaid-template-0 {
 position: relative;
 overflow: hidden; 
 }
 .mermaid-template-0:hover .mermaid-controls-0 {
 opacity: 1;
 }
 .mermaid-controls-0 .control-row {
 display: flex;
 gap: 4px;
 justify-content: flex-end;
 }
 .mermaid-controls-0 button {
 width: 32px;
 height: 32px;
 border: 1px solid #d1d5db;
 border-radius: 4px;
 background: white;
 cursor: pointer;
 font-size: 14px;
 display: flex;
 align-items: center;
 justify-content: center;
 color: #374151;
 transition: all 0.2s;
 user-select: none;
 -webkit-user-select: none;
 -moz-user-select: none;
 -ms-user-select: none;
 }
 .mermaid-controls-0 button:hover {
 background: #f3f4f6;
 border-color: #9ca3af;
 }
 .mermaid-controls-0 button:active {
 background: #e5e7eb;
 }
 .mermaid-fullscreen-0 {
 position: fixed !important;
 top: 0;
 left: 0;
 width: 100vw !important;
 height: 100vh !important;
 z-index: 9999;
 background: white;
 display: flex;
 align-items: center;
 justify-content: center;
 overflow: hidden !important;
 }
 .mermaid-fullscreen-0 .mermaid {
 width: 100vw !important;
 height: 100vh !important;
 }
 .mermaid-fullscreen-0 svg {
 max-height: 95vh !important;
 max-width: 95vw !important;
 }
 
 
 [data-dark-mode] {
 .mermaid-loading {
 background: #1f2937 !important;
 }
 .mermaid-loading .spinner {
 border: 3px solid #374151 !important;
 border-top: 3px solid #3b82f6 !important;
 }
 .mermaid-loading span {
 color: #9ca3af !important;
 }
 .mermaid-controls-0 button {
 border: 1px solid #374151;
 background: #1f2937;
 color: #e5e7eb;
 }
 .mermaid-controls-0 button:hover {
 background: #374151;
 border-color: #4b5563;
 }
 .mermaid-controls-0 button:active {
 background: #4b5563;
 }
 .mermaid-fullscreen-0 {
 background: #1f2937;
 }
 }
 &lt;/style&gt;
 
 &lt;div class="mermaid-controls-0"&gt;
 &lt;div class="control-row"&gt;
 &lt;button id="mm-up-0" title="向上移动"&gt;↑&lt;/button&gt;
 &lt;button id="mm-fullscreen-0" title="全屏显示"&gt;⛶&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="control-row"&gt;
 &lt;button id="mm-left-0" title="向左移动"&gt;←&lt;/button&gt;
 &lt;button id="mm-reset-0" title="恢复默认"&gt;⟲&lt;/button&gt;
 &lt;button id="mm-right-0" title="向右移动"&gt;→&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="control-row"&gt;
 &lt;button id="mm-zoom-out-0" title="缩小"&gt;−&lt;/button&gt;
 &lt;button id="mm-down-0" title="向下移动"&gt;↓&lt;/button&gt;
 &lt;button id="mm-zoom-in-0" title="放大"&gt;+&lt;/button&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
(function() {
 const containerId = 'mermaid-container-0';
 const container = document.getElementById(containerId);
 const wrapperDiv = container.parentElement;
 let isFullscreen = false;
 let scale = 1;
 let translateX = 0;
 let translateY = 0;
 let initialScale = 1;
 let initialTranslateX = 0;
 let initialTranslateY = 0;
 
 function applyTransform() {
 const svg = container.querySelector('svg');
 if (svg) {
 svg.style.transform = `translate(${translateX}px, ${translateY}px) scale(${scale})`;
 
 svg.style.transformOrigin = '0 0';
 }
 }
 
 function zoomIn() {
 saveInitialState();
 const oldScale = scale;
 scale *= 1.2;
 
 
 const rect = container.getBoundingClientRect();
 const centerX = rect.width / 2;
 const centerY = rect.height / 2;
 
 
 translateX = centerX - (centerX - translateX) * (scale / oldScale);
 translateY = centerY - (centerY - translateY) * (scale / oldScale);
 
 applyTransform();
 }
 
 function zoomOut() {
 saveInitialState();
 const oldScale = scale;
 scale /= 1.2;
 
 
 const rect = container.getBoundingClientRect();
 const centerX = rect.width / 2;
 const centerY = rect.height / 2;
 
 
 translateX = centerX - (centerX - translateX) * (scale / oldScale);
 translateY = centerY - (centerY - translateY) * (scale / oldScale);
 
 applyTransform();
 }
 
 function move(dx, dy) {
 saveInitialState();
 translateX += dx;
 translateY += dy;
 applyTransform();
 }
 
 function resetView() {
 scale = initialScale;
 translateX = initialTranslateX;
 translateY = initialTranslateY;
 applyTransform();
 }
 
 function saveInitialState() {
 
 
 
 
 
 }
 
 function enterFullscreen() {
 isFullscreen = true;
 wrapperDiv.classList.add('mermaid-fullscreen-0');
 const svg = container.querySelector('svg');
 if (svg) {
 const screenWidth = window.innerWidth;
 const screenHeight = window.innerHeight;
 const svgRect = svg.getBoundingClientRect();
 const svgWidth = svgRect.width;
 const svgHeight = svgRect.height;
 
 
 const scaleX = screenWidth * 0.95 / svgWidth;
 const scaleY = screenHeight * 0.95 / svgHeight;
 scale = Math.min(scaleX, scaleY);
 
 
 translateX = (screenWidth - svgWidth * scale) / 2;
 translateY = (screenHeight - svgHeight * scale) / 2;
 initialTranslateY = translateY;
 applyTransform();
 
 
 container.style.cursor = 'grab';
 
 
 container.addEventListener('wheel', handleWheel, { passive: false });
 container.addEventListener('mousedown', handleMouseDown);
 container.addEventListener('touchstart', handleTouchStart, { passive: false });
 }
 }
 
 function exitFullscreen() {
 isFullscreen = false;
 wrapperDiv.classList.remove('mermaid-fullscreen-0');
 
 container.removeEventListener('wheel', handleWheel);
 container.removeEventListener('mousedown', handleMouseDown);
 container.removeEventListener('touchstart', handleTouchStart, { passive: false });
 
 scale = 1;
 translateX = 0;
 translateY = 0;
 initialTranslateY = translateY;
 applyTransform();
 
 
 container.style.cursor = '';
 }
 
 function toggleFullscreen() {
 if (!isFullscreen) {
 enterFullscreen();
 } else {
 exitFullscreen();
 }
 }
 
 document.addEventListener('keydown', function(e) {
 if (e.key === 'Escape' &amp;&amp; isFullscreen) {
 toggleFullscreen();
 }
 });
 
 
 function handleWheel(e) {
 if (!isFullscreen) return;
 
 e.preventDefault();
 
 const delta = e.deltaY;
 const zoomFactor = delta &gt; 0 ? 0.9 : 1.1;
 
 
 const oldScale = scale;
 
 
 scale *= zoomFactor;
 
 
 scale = Math.max(0.1, Math.min(5, scale));
 
 
 const rect = container.getBoundingClientRect();
 const mouseX = e.clientX - rect.left;
 const mouseY = e.clientY - rect.top;
 
 
 
 
 translateX = mouseX - (mouseX - translateX) * (scale / oldScale);
 translateY = mouseY - (mouseY - translateY) * (scale / oldScale);
 
 applyTransform();
 }
 
 
 let isDragging = false;
 let lastMouseX = 0;
 let lastMouseY = 0;
 
 function handleMouseDown(e) {
 if (!isFullscreen) return;
 
 
 e.preventDefault();
 
 isDragging = true;
 lastMouseX = e.clientX;
 lastMouseY = e.clientY;
 
 container.style.cursor = 'grabbing';
 
 document.addEventListener('mousemove', handleMouseMove);
 document.addEventListener('mouseup', handleMouseUp);
 }
 
 function handleMouseMove(e) {
 if (!isDragging || !isFullscreen) return;
 
 
 e.preventDefault();
 
 const deltaX = e.clientX - lastMouseX;
 const deltaY = e.clientY - lastMouseY;
 
 translateX += deltaX;
 translateY += deltaY;
 
 lastMouseX = e.clientX;
 lastMouseY = e.clientY;
 
 applyTransform();
 }
 
 function handleMouseUp() {
 isDragging = false;
 
 if (isFullscreen) {
 container.style.cursor = 'grab';
 }
 
 document.removeEventListener('mousemove', handleMouseMove);
 document.removeEventListener('mouseup', handleMouseUp);
 }
 
 
 let initialDistance = 0;
 let initialScaleOnTouch = 1;
 let initialTranslateOnTouch = { x: 0, y: 0 };
 let initialCenterOnTouch = { x: 0, y: 0 };
 
 
 let isSingleTouchDragging = false;
 let lastTouchX = 0;
 let lastTouchY = 0;
 
 function handleTouchStart(e) {
 if (!isFullscreen) return;
 
 e.preventDefault();
 
 
 if (e.touches.length === 2) {
 const touch1 = e.touches[0];
 const touch2 = e.touches[1];
 
 
 initialDistance = Math.hypot(
 touch1.clientX - touch2.clientX,
 touch1.clientY - touch2.clientY
 );
 
 
 initialScaleOnTouch = scale;
 initialTranslateOnTouch = { x: translateX, y: translateY };
 
 
 const centerX = (touch1.clientX + touch2.clientX) / 2;
 const centerY = (touch1.clientY + touch2.clientY) / 2;
 const rect = container.getBoundingClientRect();
 initialCenterOnTouch = {
 x: centerX - rect.left,
 y: centerY - rect.top
 };
 
 
 isSingleTouchDragging = false;
 }
 
 else if (e.touches.length === 1) {
 const touch = e.touches[0];
 isSingleTouchDragging = true;
 lastTouchX = touch.clientX;
 lastTouchY = touch.clientY;
 }
 
 container.addEventListener('touchmove', handleTouchMove, { passive: false });
 container.addEventListener('touchend', handleTouchEnd);
 }
 
 function handleTouchMove(e) {
 if (!isFullscreen) return;
 
 e.preventDefault();
 
 
 if (e.touches.length === 2) {
 const touch1 = e.touches[0];
 const touch2 = e.touches[1];
 
 
 const currentDistance = Math.hypot(
 touch1.clientX - touch2.clientX,
 touch1.clientY - touch2.clientY
 );
 
 
 const scaleFactor = currentDistance / initialDistance;
 scale = initialScaleOnTouch * scaleFactor;
 
 
 scale = Math.max(0.1, Math.min(5, scale));
 
 
 const centerX = (touch1.clientX + touch2.clientX) / 2;
 const centerY = (touch1.clientY + touch2.clientY) / 2;
 const rect = container.getBoundingClientRect();
 const currentCenterX = centerX - rect.left;
 const currentCenterY = centerY - rect.top;
 
 
 
 
 translateX = currentCenterX - (initialCenterOnTouch.x - initialTranslateOnTouch.x) * (scale / initialScaleOnTouch);
 translateY = currentCenterY - (initialCenterOnTouch.y - initialTranslateOnTouch.y) * (scale / initialScaleOnTouch);
 
 applyTransform();
 }
 
 else if (e.touches.length === 1 &amp;&amp; isSingleTouchDragging) {
 const touch = e.touches[0];
 const deltaX = touch.clientX - lastTouchX;
 const deltaY = touch.clientY - lastTouchY;
 
 translateX += deltaX;
 translateY += deltaY;
 
 lastTouchX = touch.clientX;
 lastTouchY = touch.clientY;
 
 applyTransform();
 }
 }
 
 function handleTouchEnd() {
 isSingleTouchDragging = false;
 container.removeEventListener('touchmove', handleTouchMove);
 container.removeEventListener('touchend', handleTouchEnd);
 }
 
 function waitForMermaid() {
 
 const loadingElement = document.getElementById('mermaid-loading-0');
 if (loadingElement) {
 loadingElement.style.display = 'flex';
 }
 
 const observer = new MutationObserver(function(mutations) {
 const svg = container.querySelector('svg');
 if (svg) {
 observer.disconnect();
 
 
 const loadingElement = document.getElementById('mermaid-loading-0');
 const preElement = container.querySelector('pre.mermaid');
 
 if (loadingElement &amp;&amp; preElement) {
 loadingElement.classList.add('hidden');
 preElement.style.display = 'block';
 
 
 setTimeout(() =&gt; {
 loadingElement.style.display = 'none';
 }, 300);
 }
 
 svg.style.transition = 'transform 0.2s';
 
 document.getElementById('mm-zoom-in-0').addEventListener('click', zoomIn);
 document.getElementById('mm-zoom-out-0').addEventListener('click', zoomOut);
 document.getElementById('mm-up-0').addEventListener('click', () =&gt; move(0, 50));
 document.getElementById('mm-down-0').addEventListener('click', () =&gt; move(0, -50));
 document.getElementById('mm-left-0').addEventListener('click', () =&gt; move(-50, 0));
 document.getElementById('mm-right-0').addEventListener('click', () =&gt; move(50, 0));
 document.getElementById('mm-reset-0').addEventListener('click', resetView);
 document.getElementById('mm-fullscreen-0').addEventListener('click', toggleFullscreen);
 }
 });
 
 observer.observe(container, { childList: true, subtree: true });
 }
 
 waitForMermaid();
})();
&lt;/script&gt;

&lt;h2 id="简介"&gt;简介 &lt;a href="#%e7%ae%80%e4%bb%8b" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="动画"&gt;动画 &lt;a href="#%e5%8a%a8%e7%94%bb" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;


 
 
 

 
 
 
 

 
 

 &lt;div class="prism-codeblock "&gt;
 &lt;pre id="17dbd22" class="language-js line-numbers"&gt;
&lt;code&gt;var anim = new Konva.Animation(function (frame) {
 var time = frame.time,
 timeDiff = frame.timeDiff,
 frameRate = frame.frameRate;
 // update stuff
}, layer);
anim.start();&lt;/code&gt;
 &lt;/pre&gt;
 &lt;/div&gt;


&lt;iframe 
 height="450" 
 style="width: 100%;" 
 scrolling="no" 
 title="" 
 src="https://codepen.io/ryu-kaka/embed/preview/xbEOMVM?default-tab=js%2Cresult&amp;amp;theme-id=light" 
 frameborder="no"
 version="1" 
 theme-id="light"
 loading="lazy" 
 allowtransparency="true"&gt;
 See the Pen &lt;a href="https://codepen.io/ryu-kaka/embed/preview/xbEOMVM"&gt;
 Untitled&lt;/a&gt; by ryu-kaka (&lt;a href="https://codepen.io/ryu-kaka"&gt;@ryu-kaka&lt;/a&gt;)
 on &lt;a href="https://codepen.io"&gt;CodePen&lt;/a&gt;.
&lt;/iframe&gt;
&lt;h3 id="序列化--反序列化"&gt;序列化 &amp;amp; 反序列化 &lt;a href="#%e5%ba%8f%e5%88%97%e5%8c%96--%e5%8f%8d%e5%ba%8f%e5%88%97%e5%8c%96" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;


 
 
 

 
 
 
 

 
 

 &lt;div class="prism-codeblock "&gt;
 &lt;pre id="76f2e6f" class="language-js line-numbers"&gt;
&lt;code&gt;var json = stage.toJSON();&lt;/code&gt;
 &lt;/pre&gt;
 &lt;/div&gt;




 
 
 

 
 
 
 

 
 

 &lt;div class="prism-codeblock "&gt;
 &lt;pre id="667bb75" class="language-js line-numbers"&gt;
&lt;code&gt;var json = &amp;#39;{&amp;#34;attrs&amp;#34;:{&amp;#34;width&amp;#34;:578,&amp;#34;height&amp;#34;:200},&amp;#34;className&amp;#34;:&amp;#34;Stage&amp;#34;,&amp;#34;children&amp;#34;:[{&amp;#34;attrs&amp;#34;:{},&amp;#34;className&amp;#34;:&amp;#34;Layer&amp;#34;,&amp;#34;children&amp;#34;:[{&amp;#34;attrs&amp;#34;:{&amp;#34;x&amp;#34;:100,&amp;#34;y&amp;#34;:100,&amp;#34;sides&amp;#34;:6,&amp;#34;radius&amp;#34;:70,&amp;#34;fill&amp;#34;:&amp;#34;red&amp;#34;,&amp;#34;stroke&amp;#34;:&amp;#34;black&amp;#34;,&amp;#34;strokeWidth&amp;#34;:4},&amp;#34;className&amp;#34;:&amp;#34;RegularPolygon&amp;#34;}]}]}&amp;#39;;

var stage = Konva.Node.create(json, &amp;#39;container&amp;#39;);&lt;/code&gt;
 &lt;/pre&gt;
 &lt;/div&gt;

&lt;h3 id="缓存"&gt;缓存 &lt;a href="#%e7%bc%93%e5%ad%98" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;


 
 
 

 
 
 
 

 
 

 &lt;div class="prism-codeblock "&gt;
 &lt;pre id="650adc4" class="language-js line-numbers"&gt;
&lt;code&gt;shape.cache();&lt;/code&gt;
 &lt;/pre&gt;
 &lt;/div&gt;


&lt;iframe 
 height="450" 
 style="width: 100%;" 
 scrolling="no" 
 title="" 
 src="https://codepen.io/ryu-kaka/embed/preview/WbGxPjZ?default-tab=js%2Cresult&amp;amp;theme-id=light" 
 frameborder="no"
 version="1" 
 theme-id="light"
 loading="lazy" 
 allowtransparency="true"&gt;
 See the Pen &lt;a href="https://codepen.io/ryu-kaka/embed/preview/WbGxPjZ"&gt;
 Untitled&lt;/a&gt; by ryu-kaka (&lt;a href="https://codepen.io/ryu-kaka"&gt;@ryu-kaka&lt;/a&gt;)
 on &lt;a href="https://codepen.io"&gt;CodePen&lt;/a&gt;.
&lt;/iframe&gt;
&lt;h2 id="mcp-model-context-protocol"&gt;MCP (Model Context Protocol) &lt;a href="#mcp-model-context-protocol" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://konvajs.org/docs/ai_tools.html" rel="external" target="_blank"&gt;AI Tools for Konva.js Development&lt;svg width="16" height="16" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path fill="currentColor" d="M14 5c-.552 0-1-.448-1-1s.448-1 1-1h6c.552 0 1 .448 1 1v6c0 .552-.448 1-1 1s-1-.448-1-1v-3.586l-7.293 7.293c-.391.39-1.024.39-1.414 0-.391-.391-.391-1.024 0-1.414l7.293-7.293h-3.586zm-9 2c-.552 0-1 .448-1 1v11c0 .552.448 1 1 1h11c.552 0 1-.448 1-1v-4.563c0-.552.448-1 1-1s1 .448 1 1v4.563c0 1.657-1.343 3-3 3h-11c-1.657 0-3-1.343-3-3v-11c0-1.657 1.343-3 3-3h4.563c.552 0 1 .448 1 1s-.448 1-1 1h-4.563z"/&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



 
 
 

 
 
 
 

 
 

 &lt;div class="prism-codeblock "&gt;
 &lt;pre id="12a93d3" class="language-bash line-numbers"&gt;
&lt;code&gt;npx crawl-chat-mcp --id=67d221efb4b9de65095a2579 --name=konva_documentation&lt;/code&gt;
 &lt;/pre&gt;
 &lt;/div&gt;

&lt;h2 id="架构"&gt;架构 &lt;a href="#%e6%9e%b6%e6%9e%84" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="mermaid-template-6" style="min-height: 200px;"&gt;
 &lt;div id="mermaid-container-6" style="overflow: hidden; position: relative; min-height: 200px;"&gt;
 
 &lt;div id="mermaid-loading-6" class="mermaid-loading" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: white; display: flex; align-items: center; justify-content: center; z-index: 10;"&gt;
 &lt;div class="loading-spinner" style="display: flex; flex-direction: column; align-items: center; gap: 8px;"&gt;
 &lt;div class="spinner" style="width: 32px; height: 32px; border: 3px solid #f3f4f6; border-top: 3px solid #3b82f6; border-radius: 50%; animation: spin 1s linear infinite;"&gt;&lt;/div&gt;
 &lt;span style="color: #6b7280; font-size: 14px;"&gt;正在渲染图表...&lt;/span&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;pre class="mermaid" style="display: none;"&gt;graph TD
 classDef stageStyle fill:#4A90E2,color:#FFFFFF,stroke:#2874A6,stroke-width:3px,rounded:10px,font-size:14px
 classDef layerStyle fill:#7ED321,color:#FFFFFF,stroke:#4CAF50,stroke-width:2px,rounded:10px,font-size:14px
 classDef groupStyle fill:#FFD700,color:#000000,stroke:#FFC107,stroke-width:2px,rounded:5px,font-size:14px
 classDef shapeStyle fill:#FF6B6B,color:#FFFFFF,stroke:#FF5252,stroke-width:2px,rounded:5px,font-size:14px

 A[&amp;#34;Stage (one per canvas area)&amp;#34;] --&amp;gt; B[&amp;#34;Layer (each layer is a separate &amp;amp;lt;canvas&amp;amp;gt; element)&amp;#34;]
 B --&amp;gt; C[&amp;#34;Group (optional, for organizing shapes)&amp;#34;]
 C --&amp;gt; D[&amp;#34;Shape (Rect, Circle, Text, Image, Line, etc.)&amp;#34;]

 class A stageStyle
 class B layerStyle
 class C groupStyle
 class D shapeStyle
 &lt;/pre&gt;
 &lt;/div&gt;
 
 &lt;style&gt;
 @keyframes spin {
 0% { transform: rotate(0deg); }
 100% { transform: rotate(360deg); }
 }
 
 .mermaid {
 overflow: hidden !important;
 min-height: 200px;
 }
 
 .mermaid-loading {
 transition: opacity 0.3s ease;
 }
 
 .mermaid-loading.hidden {
 opacity: 0;
 pointer-events: none;
 }
 
 
 .mermaid-template-6 {
 min-height: 200px;
 }
 .mermaid-controls-6 {
 position: absolute;
 bottom: 10px;
 right: 10px;
 display: flex;
 flex-direction: column;
 gap: 8px;
 z-index: 1000;
 opacity: 0;
 transition: opacity 0.3s;
 }
 .mermaid-template-6 {
 position: relative;
 overflow: hidden; 
 }
 .mermaid-template-6:hover .mermaid-controls-6 {
 opacity: 1;
 }
 .mermaid-controls-6 .control-row {
 display: flex;
 gap: 4px;
 justify-content: flex-end;
 }
 .mermaid-controls-6 button {
 width: 32px;
 height: 32px;
 border: 1px solid #d1d5db;
 border-radius: 4px;
 background: white;
 cursor: pointer;
 font-size: 14px;
 display: flex;
 align-items: center;
 justify-content: center;
 color: #374151;
 transition: all 0.2s;
 user-select: none;
 -webkit-user-select: none;
 -moz-user-select: none;
 -ms-user-select: none;
 }
 .mermaid-controls-6 button:hover {
 background: #f3f4f6;
 border-color: #9ca3af;
 }
 .mermaid-controls-6 button:active {
 background: #e5e7eb;
 }
 .mermaid-fullscreen-6 {
 position: fixed !important;
 top: 0;
 left: 0;
 width: 100vw !important;
 height: 100vh !important;
 z-index: 9999;
 background: white;
 display: flex;
 align-items: center;
 justify-content: center;
 overflow: hidden !important;
 }
 .mermaid-fullscreen-6 .mermaid {
 width: 100vw !important;
 height: 100vh !important;
 }
 .mermaid-fullscreen-6 svg {
 max-height: 95vh !important;
 max-width: 95vw !important;
 }
 
 
 [data-dark-mode] {
 .mermaid-loading {
 background: #1f2937 !important;
 }
 .mermaid-loading .spinner {
 border: 3px solid #374151 !important;
 border-top: 3px solid #3b82f6 !important;
 }
 .mermaid-loading span {
 color: #9ca3af !important;
 }
 .mermaid-controls-6 button {
 border: 1px solid #374151;
 background: #1f2937;
 color: #e5e7eb;
 }
 .mermaid-controls-6 button:hover {
 background: #374151;
 border-color: #4b5563;
 }
 .mermaid-controls-6 button:active {
 background: #4b5563;
 }
 .mermaid-fullscreen-6 {
 background: #1f2937;
 }
 }
 &lt;/style&gt;
 
 &lt;div class="mermaid-controls-6"&gt;
 &lt;div class="control-row"&gt;
 &lt;button id="mm-up-6" title="向上移动"&gt;↑&lt;/button&gt;
 &lt;button id="mm-fullscreen-6" title="全屏显示"&gt;⛶&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="control-row"&gt;
 &lt;button id="mm-left-6" title="向左移动"&gt;←&lt;/button&gt;
 &lt;button id="mm-reset-6" title="恢复默认"&gt;⟲&lt;/button&gt;
 &lt;button id="mm-right-6" title="向右移动"&gt;→&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="control-row"&gt;
 &lt;button id="mm-zoom-out-6" title="缩小"&gt;−&lt;/button&gt;
 &lt;button id="mm-down-6" title="向下移动"&gt;↓&lt;/button&gt;
 &lt;button id="mm-zoom-in-6" title="放大"&gt;+&lt;/button&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
(function() {
 const containerId = 'mermaid-container-6';
 const container = document.getElementById(containerId);
 const wrapperDiv = container.parentElement;
 let isFullscreen = false;
 let scale = 1;
 let translateX = 0;
 let translateY = 0;
 let initialScale = 1;
 let initialTranslateX = 0;
 let initialTranslateY = 0;
 
 function applyTransform() {
 const svg = container.querySelector('svg');
 if (svg) {
 svg.style.transform = `translate(${translateX}px, ${translateY}px) scale(${scale})`;
 
 svg.style.transformOrigin = '0 0';
 }
 }
 
 function zoomIn() {
 saveInitialState();
 const oldScale = scale;
 scale *= 1.2;
 
 
 const rect = container.getBoundingClientRect();
 const centerX = rect.width / 2;
 const centerY = rect.height / 2;
 
 
 translateX = centerX - (centerX - translateX) * (scale / oldScale);
 translateY = centerY - (centerY - translateY) * (scale / oldScale);
 
 applyTransform();
 }
 
 function zoomOut() {
 saveInitialState();
 const oldScale = scale;
 scale /= 1.2;
 
 
 const rect = container.getBoundingClientRect();
 const centerX = rect.width / 2;
 const centerY = rect.height / 2;
 
 
 translateX = centerX - (centerX - translateX) * (scale / oldScale);
 translateY = centerY - (centerY - translateY) * (scale / oldScale);
 
 applyTransform();
 }
 
 function move(dx, dy) {
 saveInitialState();
 translateX += dx;
 translateY += dy;
 applyTransform();
 }
 
 function resetView() {
 scale = initialScale;
 translateX = initialTranslateX;
 translateY = initialTranslateY;
 applyTransform();
 }
 
 function saveInitialState() {
 
 
 
 
 
 }
 
 function enterFullscreen() {
 isFullscreen = true;
 wrapperDiv.classList.add('mermaid-fullscreen-6');
 const svg = container.querySelector('svg');
 if (svg) {
 const screenWidth = window.innerWidth;
 const screenHeight = window.innerHeight;
 const svgRect = svg.getBoundingClientRect();
 const svgWidth = svgRect.width;
 const svgHeight = svgRect.height;
 
 
 const scaleX = screenWidth * 0.95 / svgWidth;
 const scaleY = screenHeight * 0.95 / svgHeight;
 scale = Math.min(scaleX, scaleY);
 
 
 translateX = (screenWidth - svgWidth * scale) / 2;
 translateY = (screenHeight - svgHeight * scale) / 2;
 initialTranslateY = translateY;
 applyTransform();
 
 
 container.style.cursor = 'grab';
 
 
 container.addEventListener('wheel', handleWheel, { passive: false });
 container.addEventListener('mousedown', handleMouseDown);
 container.addEventListener('touchstart', handleTouchStart, { passive: false });
 }
 }
 
 function exitFullscreen() {
 isFullscreen = false;
 wrapperDiv.classList.remove('mermaid-fullscreen-6');
 
 container.removeEventListener('wheel', handleWheel);
 container.removeEventListener('mousedown', handleMouseDown);
 container.removeEventListener('touchstart', handleTouchStart, { passive: false });
 
 scale = 1;
 translateX = 0;
 translateY = 0;
 initialTranslateY = translateY;
 applyTransform();
 
 
 container.style.cursor = '';
 }
 
 function toggleFullscreen() {
 if (!isFullscreen) {
 enterFullscreen();
 } else {
 exitFullscreen();
 }
 }
 
 document.addEventListener('keydown', function(e) {
 if (e.key === 'Escape' &amp;&amp; isFullscreen) {
 toggleFullscreen();
 }
 });
 
 
 function handleWheel(e) {
 if (!isFullscreen) return;
 
 e.preventDefault();
 
 const delta = e.deltaY;
 const zoomFactor = delta &gt; 0 ? 0.9 : 1.1;
 
 
 const oldScale = scale;
 
 
 scale *= zoomFactor;
 
 
 scale = Math.max(0.1, Math.min(5, scale));
 
 
 const rect = container.getBoundingClientRect();
 const mouseX = e.clientX - rect.left;
 const mouseY = e.clientY - rect.top;
 
 
 
 
 translateX = mouseX - (mouseX - translateX) * (scale / oldScale);
 translateY = mouseY - (mouseY - translateY) * (scale / oldScale);
 
 applyTransform();
 }
 
 
 let isDragging = false;
 let lastMouseX = 0;
 let lastMouseY = 0;
 
 function handleMouseDown(e) {
 if (!isFullscreen) return;
 
 
 e.preventDefault();
 
 isDragging = true;
 lastMouseX = e.clientX;
 lastMouseY = e.clientY;
 
 container.style.cursor = 'grabbing';
 
 document.addEventListener('mousemove', handleMouseMove);
 document.addEventListener('mouseup', handleMouseUp);
 }
 
 function handleMouseMove(e) {
 if (!isDragging || !isFullscreen) return;
 
 
 e.preventDefault();
 
 const deltaX = e.clientX - lastMouseX;
 const deltaY = e.clientY - lastMouseY;
 
 translateX += deltaX;
 translateY += deltaY;
 
 lastMouseX = e.clientX;
 lastMouseY = e.clientY;
 
 applyTransform();
 }
 
 function handleMouseUp() {
 isDragging = false;
 
 if (isFullscreen) {
 container.style.cursor = 'grab';
 }
 
 document.removeEventListener('mousemove', handleMouseMove);
 document.removeEventListener('mouseup', handleMouseUp);
 }
 
 
 let initialDistance = 0;
 let initialScaleOnTouch = 1;
 let initialTranslateOnTouch = { x: 0, y: 0 };
 let initialCenterOnTouch = { x: 0, y: 0 };
 
 
 let isSingleTouchDragging = false;
 let lastTouchX = 0;
 let lastTouchY = 0;
 
 function handleTouchStart(e) {
 if (!isFullscreen) return;
 
 e.preventDefault();
 
 
 if (e.touches.length === 2) {
 const touch1 = e.touches[0];
 const touch2 = e.touches[1];
 
 
 initialDistance = Math.hypot(
 touch1.clientX - touch2.clientX,
 touch1.clientY - touch2.clientY
 );
 
 
 initialScaleOnTouch = scale;
 initialTranslateOnTouch = { x: translateX, y: translateY };
 
 
 const centerX = (touch1.clientX + touch2.clientX) / 2;
 const centerY = (touch1.clientY + touch2.clientY) / 2;
 const rect = container.getBoundingClientRect();
 initialCenterOnTouch = {
 x: centerX - rect.left,
 y: centerY - rect.top
 };
 
 
 isSingleTouchDragging = false;
 }
 
 else if (e.touches.length === 1) {
 const touch = e.touches[0];
 isSingleTouchDragging = true;
 lastTouchX = touch.clientX;
 lastTouchY = touch.clientY;
 }
 
 container.addEventListener('touchmove', handleTouchMove, { passive: false });
 container.addEventListener('touchend', handleTouchEnd);
 }
 
 function handleTouchMove(e) {
 if (!isFullscreen) return;
 
 e.preventDefault();
 
 
 if (e.touches.length === 2) {
 const touch1 = e.touches[0];
 const touch2 = e.touches[1];
 
 
 const currentDistance = Math.hypot(
 touch1.clientX - touch2.clientX,
 touch1.clientY - touch2.clientY
 );
 
 
 const scaleFactor = currentDistance / initialDistance;
 scale = initialScaleOnTouch * scaleFactor;
 
 
 scale = Math.max(0.1, Math.min(5, scale));
 
 
 const centerX = (touch1.clientX + touch2.clientX) / 2;
 const centerY = (touch1.clientY + touch2.clientY) / 2;
 const rect = container.getBoundingClientRect();
 const currentCenterX = centerX - rect.left;
 const currentCenterY = centerY - rect.top;
 
 
 
 
 translateX = currentCenterX - (initialCenterOnTouch.x - initialTranslateOnTouch.x) * (scale / initialScaleOnTouch);
 translateY = currentCenterY - (initialCenterOnTouch.y - initialTranslateOnTouch.y) * (scale / initialScaleOnTouch);
 
 applyTransform();
 }
 
 else if (e.touches.length === 1 &amp;&amp; isSingleTouchDragging) {
 const touch = e.touches[0];
 const deltaX = touch.clientX - lastTouchX;
 const deltaY = touch.clientY - lastTouchY;
 
 translateX += deltaX;
 translateY += deltaY;
 
 lastTouchX = touch.clientX;
 lastTouchY = touch.clientY;
 
 applyTransform();
 }
 }
 
 function handleTouchEnd() {
 isSingleTouchDragging = false;
 container.removeEventListener('touchmove', handleTouchMove);
 container.removeEventListener('touchend', handleTouchEnd);
 }
 
 function waitForMermaid() {
 
 const loadingElement = document.getElementById('mermaid-loading-6');
 if (loadingElement) {
 loadingElement.style.display = 'flex';
 }
 
 const observer = new MutationObserver(function(mutations) {
 const svg = container.querySelector('svg');
 if (svg) {
 observer.disconnect();
 
 
 const loadingElement = document.getElementById('mermaid-loading-6');
 const preElement = container.querySelector('pre.mermaid');
 
 if (loadingElement &amp;&amp; preElement) {
 loadingElement.classList.add('hidden');
 preElement.style.display = 'block';
 
 
 setTimeout(() =&gt; {
 loadingElement.style.display = 'none';
 }, 300);
 }
 
 svg.style.transition = 'transform 0.2s';
 
 document.getElementById('mm-zoom-in-6').addEventListener('click', zoomIn);
 document.getElementById('mm-zoom-out-6').addEventListener('click', zoomOut);
 document.getElementById('mm-up-6').addEventListener('click', () =&gt; move(0, 50));
 document.getElementById('mm-down-6').addEventListener('click', () =&gt; move(0, -50));
 document.getElementById('mm-left-6').addEventListener('click', () =&gt; move(-50, 0));
 document.getElementById('mm-right-6').addEventListener('click', () =&gt; move(50, 0));
 document.getElementById('mm-reset-6').addEventListener('click', resetView);
 document.getElementById('mm-fullscreen-6').addEventListener('click', toggleFullscreen);
 }
 });
 
 observer.observe(container, { childList: true, subtree: true });
 }
 
 waitForMermaid();
})();
&lt;/script&gt;

&lt;h2 id="核心功能"&gt;核心功能 &lt;a href="#%e6%a0%b8%e5%bf%83%e5%8a%9f%e8%83%bd" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;形状&lt;/strong&gt;：矩形（Rect）、圆形（Circle）、椭圆形（Ellipse）、直线（Line）、箭头（Arrow）、弧线（Arc）、环形（Ring）、扇形（Wedge）、星形（Star）、正多边形（RegularPolygon）、路径（Path）、文本（Text）、文本路径（TextPath）、图像（Image）、精灵图（Sprite）、标签（Label）以及自定义形状&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;事件系统&lt;/strong&gt;：支持点击（Click）、双击（double-click）、鼠标悬停（mouseover）、鼠标移出（mouseout）、触摸开始（touchstart）、触摸移动（touchmove）、点击（tap）、拖动（drag）等事件，并具备冒泡和委托机制&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;拖放功能&lt;/strong&gt;：内置拖放功能，包含边界限制、吸附对齐以及拖放事件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;动画&lt;/strong&gt;：通过 &lt;code&gt;Konva.Animation&lt;/code&gt; 实现基于帧的动画，通过 &lt;code&gt;Konva.Tween&lt;/code&gt; 实现属性补间动画，提供 30 多种缓动函数&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;滤镜&lt;/strong&gt;：模糊（Blur）、亮度调整（Brighten）、对比度调整（Contrast）、灰度（Grayscale）、色调饱和度亮度调整（HSL）、反相（Invert）、添加噪点（Noise）、像素化（Pixelate）、复古色调（Sepia）、阈值调整（Threshold）以及自定义滤镜&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;序列化&lt;/strong&gt;：使用 &lt;code&gt;toJSON()&lt;/code&gt; 和 &lt;code&gt;Konva.Node.create()&lt;/code&gt; 来保存和恢复整个画布状态&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;导出&lt;/strong&gt;：通过 &lt;code&gt;toDataURL()&lt;/code&gt; 和 &lt;code&gt;toBlob()&lt;/code&gt; 实现高质量图像导出（支持 PNG、JPEG 格式），借助第三方库实现 PDF 导出&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;选择与变换&lt;/strong&gt;：内置 &lt;code&gt;Transformer&lt;/code&gt; 用于交互式的缩放、旋转和比例调整&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;性能&lt;/strong&gt;：基于图层渲染、形状缓存以及优化 API，可处理数千个形状&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;跨平台&lt;/strong&gt;：在桌面和移动浏览器上均可使用，全面支持触摸事件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node.js&lt;/strong&gt;：通过 canvas npm 包实现服务器端画布渲染&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TypeScript&lt;/strong&gt;：内置 TypeScript 类型定义&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="svg"&gt;SVG &lt;a href="#svg" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;


 
 
 

 
 
 
 

 
 

 &lt;div class="prism-codeblock "&gt;
 &lt;pre id="76be449" class="language-js line-numbers"&gt;
&lt;code&gt;Konva.Image.fromURL(&amp;#39;/image.svg&amp;#39;, (image) =&amp;gt; {
 layer.add(image);
});&lt;/code&gt;
 &lt;/pre&gt;
 &lt;/div&gt;


&lt;iframe 
 height="450" 
 style="width: 100%;" 
 scrolling="no" 
 title="" 
 src="https://codepen.io/ryu-kaka/embed/preview/ogzLVNL?default-tab=js%2Cresult&amp;amp;theme-id=light" 
 frameborder="no"
 version="1" 
 theme-id="light"
 loading="lazy" 
 allowtransparency="true"&gt;
 See the Pen &lt;a href="https://codepen.io/ryu-kaka/embed/preview/ogzLVNL"&gt;
 Untitled&lt;/a&gt; by ryu-kaka (&lt;a href="https://codepen.io/ryu-kaka"&gt;@ryu-kaka&lt;/a&gt;)
 on &lt;a href="https://codepen.io"&gt;CodePen&lt;/a&gt;.
&lt;/iframe&gt;</description></item><item><title>修复 IntelliJ IDEA 中 Maven 窗口中运行 goal 报错的问题</title><link>https://www.liujiajia.me/docs/blog/2026/2/26/fix-run-maven-goal-failure-in-intellij-deal.html</link><pubDate>Thu, 26 Feb 2026 13:38:07 +0800</pubDate><guid>https://www.liujiajia.me/docs/blog/2026/2/26/fix-run-maven-goal-failure-in-intellij-deal.html</guid><description>&lt;h1 id="修复-intellij-idea-中-maven-窗口中运行-goal-报错的问题"&gt;修复 IntelliJ IDEA 中 Maven 窗口中运行 goal 报错的问题 &lt;a href="#%e4%bf%ae%e5%a4%8d-intellij-idea-%e4%b8%ad-maven-%e7%aa%97%e5%8f%a3%e4%b8%ad%e8%bf%90%e8%a1%8c-goal-%e6%8a%a5%e9%94%99%e7%9a%84%e9%97%ae%e9%a2%98" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;报错日志如下：&lt;/p&gt;



 
 
 

 
 
 
 

 
 
 

 &lt;div class="prism-codeblock "&gt;
 &lt;pre id="72c6a1e" class="language-log line-numbers wrap-lines"&gt;
&lt;code&gt;C:\Users\佳佳\AppData\Roaming\JetBrains\IdeaIC2025.2\plugins\maven\lib\maven3\bin\mvn.cmd -Didea.version=2025.2.6.1 -Dmaven.ext.class.path=C:\Users\佳佳\AppData\Roaming\JetBrains\IdeaIC2025.2\plugins\maven\lib\maven-event-listener.jar -Djansi.passthrough=true -Dstyle.color=always -Dmaven.repo.local=D:\.m2\repository deploy -f pom.xml
系统找不到指定的路径。&lt;/code&gt;
 &lt;/pre&gt;
 &lt;/div&gt;

&lt;p&gt;但是同样的命令复制到命令行是可以正常运行的。&lt;/p&gt;</description></item><item><title>Twemoji 使用总结</title><link>https://www.liujiajia.me/docs/blog/2026/2/10/twemoji-usage-summary.html</link><pubDate>Tue, 10 Feb 2026 13:47:56 +0800</pubDate><guid>https://www.liujiajia.me/docs/blog/2026/2/10/twemoji-usage-summary.html</guid><description>&lt;h1 id="twemoji-使用总结"&gt;Twemoji 使用总结 &lt;a href="#twemoji-%e4%bd%bf%e7%94%a8%e6%80%bb%e7%bb%93" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;定制页面需要支持特定的表情包（twemoji）需要实现的功能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 Twemoji 库来渲染 Emoji 字符（本质上就是将 Emoji 字符替换为对应的图片，twemoji 提供了对应的 SVG 图片）；&lt;/li&gt;
&lt;li&gt;要求输入的 Emoji 字符必须是 twemoji 库支持的，否则不进行渲染（特意搜了一下才知道，手机上的 emoji 图形并不是开源的）；&lt;/li&gt;
&lt;li&gt;限制输入的长度（需要限制视觉上的长度，这边发现单个表情最长的有 15 个字符）；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;主要依赖于 &lt;a data-bs-delay="{&amp;#34;hide&amp;#34;:300,&amp;#34;show&amp;#34;:550}" data-bs-html="true" data-bs-title="&lt;a href='https://www.liujiajia.me/docs/blog/2026/2/10/js-intl-segmenter.html'&gt;&lt;p&gt;2&lt;/p&gt;</description></item><item><title>JS Intl.Segmenter 介绍</title><link>https://www.liujiajia.me/docs/blog/2026/2/10/js-intl-segmenter.html</link><pubDate>Tue, 10 Feb 2026 13:40:29 +0800</pubDate><guid>https://www.liujiajia.me/docs/blog/2026/2/10/js-intl-segmenter.html</guid><description>&lt;h1 id="js-intlsegmenter-介绍"&gt;JS Intl.Segmenter 介绍 &lt;a href="#js-intlsegmenter-%e4%bb%8b%e7%bb%8d" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;你想详细了解 JavaScript 中的 &lt;code&gt;Intl.Segmenter&lt;/code&gt; 对象，它是 ES2022 引入的国际化 API，核心作用是按照不同语言的书写规则对文本进行精准分段（比如按字符、单词、句子拆分）。&lt;/p&gt;</description></item><item><title>Skills 简介</title><link>https://www.liujiajia.me/docs/blog/2026/2/9/ai-skills.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.liujiajia.me/docs/blog/2026/2/9/ai-skills.html</guid><description>&lt;h1 id="skills-简介"&gt;Skills 简介 &lt;a href="#skills-%e7%ae%80%e4%bb%8b" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;hr /&gt;
&lt;h1 id="什么是-skill"&gt;什么是 Skill？ &lt;a href="#%e4%bb%80%e4%b9%88%e6%98%af-skill" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Skill 即技能，一般放在 skills 文件夹内，一个技能一个文件夹，一个技能通常包括 &lt;strong&gt;SKILL.md&lt;/strong&gt; 文件，相关的文档和可运行的脚本等。&lt;/p&gt;
&lt;div class="w-2/3"&gt;
&lt;p&gt;&lt;div class="img-container"&gt;
 &lt;img id="img-1782831548620189079" src="./ai-skills/2.png" alt="" loading="lazy" data-dev-mark-image-destination="./ai-skills/2.png" class="previewable-image"&gt;

&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;h1 id="skill-文件结构"&gt;Skill 文件结构 &lt;a href="#skill-%e6%96%87%e4%bb%b6%e7%bb%93%e6%9e%84" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;一个 SKILL 文件通常包括一个 YAML 头和 Markdown 格式的技能描述。YAML 头用于定义 Skill 的元数据，如名称、描述、标签等。Markdown 格式的技能描述则详细介绍 Skill 的功能、使用方法、注意事项等。&lt;/p&gt;</description></item><item><title>Hugo 中设置单个引用图片的样式</title><link>https://www.liujiajia.me/docs/blog/2026/1/12/hugo-set-image-style.html</link><pubDate>Mon, 12 Jan 2026 17:34:45 +0800</pubDate><guid>https://www.liujiajia.me/docs/blog/2026/1/12/hugo-set-image-style.html</guid><description>&lt;h1 id="hugo-中设置单个引用图片样式的邪修方案"&gt;Hugo 中设置单个引用图片样式的邪修方案 &lt;a href="#hugo-%e4%b8%ad%e8%ae%be%e7%bd%ae%e5%8d%95%e4%b8%aa%e5%bc%95%e7%94%a8%e5%9b%be%e7%89%87%e6%a0%b7%e5%bc%8f%e7%9a%84%e9%82%aa%e4%bf%ae%e6%96%b9%e6%a1%88" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Markdown 中引入图片时，经常需要调整图片的宽度，但是原生的 Markdown 中并不支持单独对某个图片进行样式设置。&lt;/p&gt;



 
 
 

 
 
 
 

 
 

 &lt;div class="prism-codeblock "&gt;
 &lt;pre id="22416f7" class="language-markdown line-numbers"&gt;
&lt;code&gt;![图片描述](./images/img-1.png)&lt;/code&gt;
 &lt;/pre&gt;
 &lt;/div&gt;

&lt;p&gt;尝试过如下几个方案，但都不是很理想。&lt;/p&gt;</description></item><item><title>使用 fabirc.js 在服务端生成立体文本图片</title><link>https://www.liujiajia.me/docs/blog/2026/1/11/fabricjs-text-3d.html</link><pubDate>Sun, 11 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.liujiajia.me/docs/blog/2026/1/11/fabricjs-text-3d.html</guid><description>&lt;h1 id="使用-fabircjs-在服务端生成立体文本图片"&gt;使用 fabirc.js 在服务端生成立体文本图片 &lt;a href="#%e4%bd%bf%e7%94%a8-fabircjs-%e5%9c%a8%e6%9c%8d%e5%8a%a1%e7%ab%af%e7%94%9f%e6%88%90%e7%ab%8b%e4%bd%93%e6%96%87%e6%9c%ac%e5%9b%be%e7%89%87" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;因项目需要在后端生成文字的立体图片，虽然本人是 Java 开发，还是在 AI 的帮助下，实现了这个功能。&lt;/p&gt;</description></item><item><title>修改 Mermaid 字体</title><link>https://www.liujiajia.me/docs/blog/2025/12/30/change-mermaid-font-family.html</link><pubDate>Tue, 30 Dec 2025 21:33:44 +0800</pubDate><guid>https://www.liujiajia.me/docs/blog/2025/12/30/change-mermaid-font-family.html</guid><description>&lt;h1 id="修改-mermaid-字体"&gt;修改 Mermaid 字体 &lt;a href="#%e4%bf%ae%e6%94%b9-mermaid-%e5%ad%97%e4%bd%93" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;直接使用 CSS 修改 Mermaid 图表中的字体时，可能会导致文本显示不全。&lt;/p&gt;
&lt;p&gt;可以在初始化 mermaid 时，通过 &lt;code&gt;fontFamily&lt;/code&gt; 属性执行字体。然后在页面加载完成后，再执行初始化处理，以防止字体显示不全。&lt;/p&gt;</description></item><item><title>Express 学习之 shoutbox 项目</title><link>https://www.liujiajia.me/docs/blog/2025/12/30/express-shoutbox.html</link><pubDate>Tue, 30 Dec 2025 11:29:18 +0800</pubDate><guid>https://www.liujiajia.me/docs/blog/2025/12/30/express-shoutbox.html</guid><description>&lt;h1 id="express-学习之-shoutbox-项目"&gt;Express 学习之 shoutbox 项目 &lt;a href="#express-%e5%ad%a6%e4%b9%a0%e4%b9%8b-shoutbox-%e9%a1%b9%e7%9b%ae" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;这是《Node.js 实战》一书中介绍的 Express 示例项目，代码基本上和书中一致，只有访问 redis 的部分方法和书中有一些差异。&lt;/p&gt;</description></item><item><title>关于在 Fabric.js 中注册字体覆盖的问题</title><link>https://www.liujiajia.me/docs/blog/2025/12/29/about-register-font-override-in-fabric.html</link><pubDate>Mon, 29 Dec 2025 16:23:34 +0800</pubDate><guid>https://www.liujiajia.me/docs/blog/2025/12/29/about-register-font-override-in-fabric.html</guid><description>&lt;h1 id="关于在-fabricjs-中注册字体覆盖的问题"&gt;关于在 Fabric.js 中注册字体覆盖的问题 &lt;a href="#%e5%85%b3%e4%ba%8e%e5%9c%a8-fabricjs-%e4%b8%ad%e6%b3%a8%e5%86%8c%e5%ad%97%e4%bd%93%e8%a6%86%e7%9b%96%e7%9a%84%e9%97%ae%e9%a2%98" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;今天发现生成定制图片中的字体变成了默认字体。因为特殊原因，定制中的字体使用的后端生成的方式。生成字体图片的服务是 Node.js 写的，通过 fabric.js 生成对应的图片。字体的注册是通过 &lt;code&gt;fabric.nodeCanvas.registerFont&lt;/code&gt; 方法实现的。&lt;/p&gt;</description></item><item><title>字体格式转换</title><link>https://www.liujiajia.me/docs/blog/2025/12/23/font-format-convert.html</link><pubDate>Tue, 23 Dec 2025 18:02:01 +0800</pubDate><guid>https://www.liujiajia.me/docs/blog/2025/12/23/font-format-convert.html</guid><description>&lt;h1 id="字体格式转换"&gt;字体格式转换 &lt;a href="#%e5%ad%97%e4%bd%93%e6%a0%bc%e5%bc%8f%e8%bd%ac%e6%8d%a2" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;本来是想通过 AI 写一个将 OTF 转换为 TTF 的脚本，结果豆包生成的代码一直没跑通。&lt;/p&gt;
&lt;p&gt;最后发现已经有一个线程的工具（&lt;a href="https://github.com/awesometoolbox/otf2ttf" rel="external" target="_blank"&gt;otf2ttf&lt;svg width="16" height="16" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path fill="currentColor" d="M14 5c-.552 0-1-.448-1-1s.448-1 1-1h6c.552 0 1 .448 1 1v6c0 .552-.448 1-1 1s-1-.448-1-1v-3.586l-7.293 7.293c-.391.39-1.024.39-1.414 0-.391-.391-.391-1.024 0-1.414l7.293-7.293h-3.586zm-9 2c-.552 0-1 .448-1 1v11c0 .552.448 1 1 1h11c.552 0 1-.448 1-1v-4.563c0-.552.448-1 1-1s1 .448 1 1v4.563c0 1.657-1.343 3-3 3h-11c-1.657 0-3-1.343-3-3v-11c0-1.657 1.343-3 3-3h4.563c.552 0 1 .448 1 1s-.448 1-1 1h-4.563z"/&gt;&lt;/svg&gt;&lt;/a&gt;）了，而且还是基于 &lt;a href="https://github.com/fonttools/fonttools" rel="external" target="_blank"&gt;fontTools&lt;svg width="16" height="16" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path fill="currentColor" d="M14 5c-.552 0-1-.448-1-1s.448-1 1-1h6c.552 0 1 .448 1 1v6c0 .552-.448 1-1 1s-1-.448-1-1v-3.586l-7.293 7.293c-.391.39-1.024.39-1.414 0-.391-.391-.391-1.024 0-1.414l7.293-7.293h-3.586zm-9 2c-.552 0-1 .448-1 1v11c0 .552.448 1 1 1h11c.552 0 1-.448 1-1v-4.563c0-.552.448-1 1-1s1 .448 1 1v4.563c0 1.657-1.343 3-3 3h-11c-1.657 0-3-1.343-3-3v-11c0-1.657 1.343-3 3-3h4.563c.552 0 1 .448 1 1s-.448 1-1 1h-4.563z"/&gt;&lt;/svg&gt;&lt;/a&gt; 官方仓库里提供的脚本 &lt;a href="https://github.com/fonttools/fonttools/blob/main/Snippets/otf2ttf.py" rel="external" target="_blank"&gt;Snippets/otf2ttf.py&lt;svg width="16" height="16" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path fill="currentColor" d="M14 5c-.552 0-1-.448-1-1s.448-1 1-1h6c.552 0 1 .448 1 1v6c0 .552-.448 1-1 1s-1-.448-1-1v-3.586l-7.293 7.293c-.391.39-1.024.39-1.414 0-.391-.391-.391-1.024 0-1.414l7.293-7.293h-3.586zm-9 2c-.552 0-1 .448-1 1v11c0 .552.448 1 1 1h11c.552 0 1-.448 1-1v-4.563c0-.552.448-1 1-1s1 .448 1 1v4.563c0 1.657-1.343 3-3 3h-11c-1.657 0-3-1.343-3-3v-11c0-1.657 1.343-3 3-3h4.563c.552 0 1 .448 1 1s-.448 1-1 1h-4.563z"/&gt;&lt;/svg&gt;&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>为了 N</title><link>https://www.liujiajia.me/docs/blog/2025/11/29/n-no-tameni.html</link><pubDate>Sat, 29 Nov 2025 09:45:50 +0800</pubDate><guid>https://www.liujiajia.me/docs/blog/2025/11/29/n-no-tameni.html</guid><description>&lt;h1 id="为了-n"&gt;为了 N &lt;a href="#%e4%b8%ba%e4%ba%86-n" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;div class="markmap-template-0"&gt;
 &lt;div id="markmap-loading-0" class="markmap-loading" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 500px; background: #f8fafc; border-radius: 8px;"&gt;
 &lt;div style="text-align: center; color: #64748b;"&gt;
 &lt;div style="margin-bottom: 8px;"&gt;
 &lt;svg width="32" height="32" viewBox="0 0 38 38" xmlns="http://www.w3.org/2000/svg"&gt;
 &lt;defs&gt;
 &lt;linearGradient x1="8.042%" y1="0%" x2="65.682%" y2="23.865%" id="a"&gt;
 &lt;stop stop-color="#64748b" stop-opacity="0" offset="0%"/&gt;
 &lt;stop stop-color="#64748b" stop-opacity=".631" offset="63.146%"/&gt;
 &lt;stop stop-color="#64748b" offset="100%"/&gt;
 &lt;/linearGradient&gt;
 &lt;/defs&gt;
 &lt;g fill="none" fill-rule="evenodd"&gt;
 &lt;g transform="translate(1 1)"&gt;
 &lt;path d="M36 18c0-9.94-8.06-18-18-18" id="Oval-2" stroke="url(#a)" stroke-width="2"&gt;
 &lt;animateTransform
 attributeName="transform"
 type="rotate"
 from="0 18 18"
 to="360 18 18"
 dur="0.9s"
 repeatCount="indefinite" /&gt;
 &lt;/path&gt;
 &lt;circle fill="#64748b" cx="36" cy="18" r="1"&gt;
 &lt;animateTransform
 attributeName="transform"
 type="rotate"
 from="0 18 18"
 to="360 18 18"
 dur="0.9s"
 repeatCount="indefinite" /&gt;
 &lt;/circle&gt;
 &lt;/g&gt;
 &lt;/g&gt;
 &lt;/svg&gt;
 &lt;/div&gt;
 &lt;div style="font-size: 14px;"&gt;思维导图加载中...&lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;svg id="markmap-container-0" style="width: 100%; height: 500px; display: none;"&gt;&lt;/svg&gt;
 &lt;style&gt;
 .markmap-controls-0 {
 position: absolute;
 bottom: 10px;
 right: 10px;
 display: flex;
 flex-direction: column;
 gap: 8px;
 z-index: 1000;
 opacity: 0;
 transition: opacity 0.3s;
 }
 .markmap-template-0 {
 position: relative;
 overflow: hidden; 
 }
 .markmap-template-0:hover .markmap-controls-0 {
 opacity: 1;
 }
 .markmap-controls-0 .control-row {
 display: flex;
 gap: 4px;
 justify-content: flex-end;
 }
 .markmap-controls-0 button {
 width: 32px;
 height: 32px;
 border: 1px solid #d1d5db;
 border-radius: 4px;
 background: white;
 cursor: pointer;
 font-size: 14px;
 display: flex;
 align-items: center;
 justify-content: center;
 color: #374151;
 transition: all 0.2s;
 }
 .markmap-controls-0 button:hover {
 background: #f3f4f6;
 border-color: #9ca3af;
 }
 .markmap-controls-0 button:active {
 background: #e5e7eb;
 }
 .markmap-fullscreen-0 {
 position: fixed !important;
 top: 0;
 left: 0;
 width: 100vw !important;
 height: 100vh !important;
 z-index: 9999;
 background: white;
 }
 .markmap-fullscreen-0 svg {
 height: 100vh !important;
 }
 .markmap-loading {
 transition: opacity 0.3s ease-in-out;
 }
 
 
 [data-dark-mode] {
 .markmap-container-0 {
 filter: invert(100%);
 }
 .markmap-loading {
 background: #1f2937 !important;
 }
 .markmap-loading div {
 color: #9ca3af !important;
 }
 .markmap-loading svg stop {
 stop-color: #9ca3af !important;
 }
 .markmap-loading svg circle {
 fill: #9ca3af !important;
 }
 .markmap-controls-0 button {
 border: 1px solid #374151;
 background: #1f2937;
 color: #e5e7eb;
 }
 .markmap-controls-0 button:hover {
 background: #374151;
 border-color: #4b5563;
 }
 .markmap-controls-0 button:active {
 background: #4b5563;
 }
 .markmap-fullscreen-0 {
 background: #1f2937;
 }
 }
 &lt;/style&gt;
 &lt;div class="markmap-controls-0"&gt;
 &lt;div class="control-row"&gt;
 &lt;button id="mm-up-0" title="向上移动"&gt;↑&lt;/button&gt;
 &lt;button id="mm-fullscreen-0" title="全屏显示"&gt;⛶&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="control-row"&gt;
 &lt;button id="mm-left-0" title="向左移动"&gt;←&lt;/button&gt;
 &lt;button id="mm-reset-0" title="恢复默认"&gt;⟲&lt;/button&gt;
 &lt;button id="mm-right-0" title="向右移动"&gt;→&lt;/button&gt;
 &lt;/div&gt;
 &lt;div class="control-row"&gt;
 &lt;button id="mm-zoom-out-0" title="缩小"&gt;−&lt;/button&gt;
 &lt;button id="mm-down-0" title="向下移动"&gt;↓&lt;/button&gt;
 &lt;button id="mm-zoom-in-0" title="放大"&gt;+&lt;/button&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;script src="https://unpkg.com/d3@7.9.0/dist/d3.min.js"&gt;&lt;/script&gt;
&lt;script src="https://unpkg.com/markmap-lib@0.18.12/dist/browser/index.iife.js"&gt;&lt;/script&gt;
&lt;script src="https://unpkg.com/markmap-view@0.18.12/dist/browser/index.js"&gt;&lt;/script&gt;
&lt;script&gt;

window.addEventListener('load', function() {
 try {
 
 const { markmap } = window;
 if (typeof markmap === 'undefined') {
 throw new Error('markmap 核心模块未加载，请检查依赖');
 }

 
 const container = document.getElementById('markmap-container-0');
 const loadingElement = document.getElementById('markmap-loading-0');
 const markdown = `\n\n## 人物关系\n\n- 野口贵弘\n - 天空玫瑰花园\n - M 商社\n- 野口奈央子\n - 天空玫瑰花园\n- N·衫下希美\n - 青景村 37-5\n - 野蔷薇庄 102\n- N·安腾望\n - 野蔷薇庄 201\n - M 商社\n- N·成濑慎司\n - 青景村 58-3\n - 立花公寓\n - “夏绿蒂·广田”餐厅\n- N·西崎真人\n - 野蔷薇庄 101\n\n`;
 

 const { Transformer, builtInPlugins } = window.markmap;
 
 
 const transformer = new Transformer(builtInPlugins);
 const transformResult = transformer.transform(markdown);
 
 const { root, features } = transformResult;

 
 
 const assets = transformer.getUsedAssets(features);
 const { Markmap, loadCSS, loadJS } = markmap;

 
 
 
 
 
 
 
 

 
 
 const options = {
 autoFit: true,
 pan: false,
 scrollForPan: false,
 zoom: false,
 };
 const mp = Markmap.create('#markmap-container-0', options, root);
 
 
 loadingElement.style.display = 'none';
 container.style.display = 'block';
 const mindmap = document.getElementById('markmap-container-0');
 const wrapperDiv = mindmap.parentElement;
 let isFullscreen = false;
 let initialTransform = null;
 
 
 let initialDistance = 0;
 let initialScaleOnTouch = 1;
 let initialTranslateOnTouch = { x: 0, y: 0 };
 let initialCenterOnTouch = { x: 0, y: 0 };
 
 
 let isSingleTouchDragging = false;
 let lastTouchX = 0;
 let lastTouchY = 0;
 
 mindmap.addEventListener('touchstart', function(e) {
 if (!isFullscreen) return;
 
 e.preventDefault();
 
 
 if (e.touches.length === 2) {
 const touch1 = e.touches[0];
 const touch2 = e.touches[1];
 
 
 initialDistance = Math.hypot(
 touch1.clientX - touch2.clientX,
 touch1.clientY - touch2.clientY
 );
 
 
 const transform = d3.zoomTransform(mp.svg.node());
 initialScaleOnTouch = transform.k;
 initialTranslateOnTouch = { x: transform.x, y: transform.y };
 
 
 const centerX = (touch1.clientX + touch2.clientX) / 2;
 const centerY = (touch1.clientY + touch2.clientY) / 2;
 const rect = mindmap.getBoundingClientRect();
 initialCenterOnTouch = {
 x: centerX - rect.left,
 y: centerY - rect.top
 };
 
 
 isSingleTouchDragging = false;
 }
 
 else if (e.touches.length === 1) {
 const touch = e.touches[0];
 isSingleTouchDragging = true;
 lastTouchX = touch.clientX;
 lastTouchY = touch.clientY;
 }
 
 mindmap.addEventListener('touchmove', handleTouchMove, { passive: false });
 mindmap.addEventListener('touchend', handleTouchEnd);
 });
 
 function handleTouchMove(e) {
 if (!isFullscreen) return;
 
 e.preventDefault();
 
 
 if (e.touches.length === 2) {
 const touch1 = e.touches[0];
 const touch2 = e.touches[1];
 
 
 const currentDistance = Math.hypot(
 touch1.clientX - touch2.clientX,
 touch1.clientY - touch2.clientY
 );
 
 
 const scaleFactor = currentDistance / initialDistance;
 const newScale = initialScaleOnTouch * scaleFactor;
 
 
 const limitedScale = Math.max(0.1, Math.min(5, newScale));
 
 
 const centerX = (touch1.clientX + touch2.clientX) / 2;
 const centerY = (touch1.clientY + touch2.clientY) / 2;
 const rect = mindmap.getBoundingClientRect();
 const currentCenterX = centerX - rect.left;
 const currentCenterY = centerY - rect.top;
 
 
 
 
 const newX = currentCenterX - (initialCenterOnTouch.x - initialTranslateOnTouch.x) * (limitedScale / initialScaleOnTouch);
 const newY = currentCenterY - (initialCenterOnTouch.y - initialTranslateOnTouch.y) * (limitedScale / initialScaleOnTouch);
 
 
 const newTransform = d3.zoomIdentity
 .translate(newX, newY)
 .scale(limitedScale);
 
 mp.svg.call(mp.zoom.transform, newTransform);
 }
 
 else if (e.touches.length === 1 &amp;&amp; isSingleTouchDragging) {
 const touch = e.touches[0];
 const deltaX = touch.clientX - lastTouchX;
 const deltaY = touch.clientY - lastTouchY;
 
 
 const transform = d3.zoomTransform(mp.svg.node());
 const newTransform = transform.translate(deltaX, deltaY);
 
 mp.svg.call(mp.zoom.transform, newTransform);
 
 lastTouchX = touch.clientX;
 lastTouchY = touch.clientY;
 }
 }
 
 function handleTouchEnd() {
 isSingleTouchDragging = false;
 mindmap.removeEventListener('touchmove', handleTouchMove);
 mindmap.removeEventListener('touchend', handleTouchEnd);
 }

 document.addEventListener('keydown', function(e) {
 if (e.key === 'Escape' &amp;&amp; isFullscreen) {
 toggleFullscreen();
 }
 });
 
 setTimeout(() =&gt; {
 const width = mp.state.rect.x2 - mp.state.rect.x1;
 const height = mp.state.rect.y2 - mp.state.rect.y1;
 const aspectRatio = -1 &lt; 0 ? height / width : -1 ;
 
 function setMindmapHeight(mindmap, aspectRatio) {
 const realHeight = mindmap.clientWidth * aspectRatio + 30;
 mindmap.style.height = realHeight + 'px';
 }

 function fitMindmap() {
 setMindmapHeight(mindmap, aspectRatio);
 setTimeout(() =&gt; {
 mp.fit();
 }, 100);
 }

 window.addEventListener('resize', fitMindmap);
 window.addEventListener('lotusdocs:layout-change', fitMindmap);
 
 setMindmapHeight(mindmap, aspectRatio);
 
 setTimeout(() =&gt; {
 const transform = d3.zoomTransform(mp.svg.node());
 initialTransform = {
 x: transform.x,
 y: transform.y,
 k: transform.k
 };
 }, 100);
 }, 10);
 
 function saveInitialTransform() {
 if (!initialTransform) {
 const transform = d3.zoomTransform(mp.svg.node());
 initialTransform = {
 x: transform.x,
 y: transform.y,
 k: transform.k
 };
 }
 }
 
 function zoomIn() {
 saveInitialTransform();
 const svg = mp.svg.node();
 const width = svg.clientWidth;
 const height = svg.clientHeight;
 const center = [width / 2, height / 2];
 mp.svg.call(mp.zoom.scaleBy, 1.2, center);
 }
 
 function zoomOut() {
 saveInitialTransform();
 const svg = mp.svg.node();
 const width = svg.clientWidth;
 const height = svg.clientHeight;
 const center = [width / 2, height / 2];
 mp.svg.call(mp.zoom.scaleBy, 1 / 1.2, center);
 }
 
 function move(dx, dy) {
 saveInitialTransform();
 const transform = d3.zoomTransform(mp.svg.node());
 const newTransform = transform.translate(dx, dy);
 mp.svg.call(mp.zoom.transform, newTransform);
 }
 
 function resetView() {
 if (!isFullscreen) {
 mp.fit();
 }
 }
 
 function toggleFullscreen() {
 if (!isFullscreen) {
 wrapperDiv.classList.add('markmap-fullscreen-0');
 isFullscreen = true;
 } else {
 wrapperDiv.classList.remove('markmap-fullscreen-0');
 isFullscreen = false;
 }
 mp.fit();
 mp.setOptions({
 autoFit: !isFullscreen,
 zoom: isFullscreen,
 pan: isFullscreen,
 
 });
 }
 
 document.getElementById('mm-zoom-in-0').addEventListener('click', zoomIn);
 document.getElementById('mm-zoom-out-0').addEventListener('click', zoomOut);
 document.getElementById('mm-up-0').addEventListener('click', () =&gt; move(0, 50));
 document.getElementById('mm-down-0').addEventListener('click', () =&gt; move(0, -50));
 document.getElementById('mm-left-0').addEventListener('click', () =&gt; move(-50, 0));
 document.getElementById('mm-right-0').addEventListener('click', () =&gt; move(50, 0));
 document.getElementById('mm-reset-0').addEventListener('click', resetView);
 document.getElementById('mm-fullscreen-0').addEventListener('click', toggleFullscreen);
 } catch (e) {
 console.error('Markmap 初始化错误:', e);
 const container = document.getElementById('markmap-container-0');
 const loadingElement = document.getElementById('markmap-loading-0');
 
 
 loadingElement.style.display = 'none';
 container.style.display = 'block';
 container.innerHTML = `&lt;div style="color: #dc2626; padding: 1rem; border: 1px solid #fecaca; border-radius: 0.375rem; background-color: #fef2f2;"&gt;
 &lt;strong&gt;思维导图加载失败：&lt;/strong&gt;${e.message}&lt;br&gt;
 请检查 markmap 库是否正确加载
 &lt;/div&gt;`;
 }
});
&lt;/script&gt;</description></item><item><title>心流 2.0</title><link>https://www.liujiajia.me/docs/blog/2025/11/23/flow-2-0.html</link><pubDate>Sun, 23 Nov 2025 22:00:17 +0800</pubDate><guid>https://www.liujiajia.me/docs/blog/2025/11/23/flow-2-0.html</guid><description>&lt;h1 id="心流-20"&gt;心流 2.0 &lt;a href="#%e5%bf%83%e6%b5%81-20" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;h2 id="导言-认识心流"&gt;导言 认识心流 &lt;a href="#%e5%af%bc%e8%a8%80-%e8%ae%a4%e8%af%86%e5%bf%83%e6%b5%81" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;对意识的掌控决定了生活质量。 &amp;ndash; 米哈里（《心流》，1990 年）&lt;/li&gt;
&lt;li&gt;塞利格曼 2011 幸福架构 PERMA：
&lt;ol&gt;
&lt;li&gt;积极情绪（Positive emotions）：在当下体验幸福、快乐、爱、感激等；&lt;/li&gt;
&lt;li&gt;投入感（Engagement）：在参与生活中的各类活动时，高度专注，或体验到心流；&lt;/li&gt;
&lt;li&gt;积极关系（Relationships）：能够与他人建立并维持积极、互惠互利的关系，以爱与感激的体验为特征；&lt;/li&gt;
&lt;li&gt;意义感（Meaning）：感到与超越自我的事物有联结，或者服务于更高的目标；&lt;/li&gt;
&lt;li&gt;成就感（Accomplishment）：精通某一特定兴趣领域，或是实现重要（或具有挑战性）的生活和工作目标。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;塞利格曼 2020 PERMA+4 架构
&lt;ol&gt;
&lt;li&gt;身体健康（Physical health）：体现在生理、功能和心理方面的高健康水平；&lt;/li&gt;
&lt;li&gt;积极思维（Mindset）：具有成长性思维，对生活报以乐观、面向未来的心态，并把挑战或挫折看做成长机会。这也是积极心理资本、毅力和坚毅的体现；&lt;/li&gt;
&lt;li&gt;积极环境（Environment）：与个人偏好相符的物理环境质量（包括时空方面的元素，如自然光、新鲜空气、人身安全和积极心理氛围）；&lt;/li&gt;
&lt;li&gt;经济安全（Economic security）：感到财务安全稳定，个人需求得到满足。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="第一部分-心流的科学"&gt;第一部分 心流的科学 &lt;a href="#%e7%ac%ac%e4%b8%80%e9%83%a8%e5%88%86-%e5%bf%83%e6%b5%81%e7%9a%84%e7%a7%91%e5%ad%a6" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="第一章-心流与最优体验"&gt;第一章 心流与最优体验 &lt;a href="#%e7%ac%ac%e4%b8%80%e7%ab%a0-%e5%bf%83%e6%b5%81%e4%b8%8e%e6%9c%80%e4%bc%98%e4%bd%93%e9%aa%8c" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;心流体验发生的条件
&lt;ol&gt;
&lt;li&gt;清晰的目标
&lt;ul&gt;
&lt;li&gt;目标必须具有某种内在的意义、有挑战性，且令人心生愉悦。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;即时反馈
&lt;ul&gt;
&lt;li&gt;目标必须能够通过及时的反馈来评估进度和效果。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;挑战与技能平衡
&lt;ul&gt;
&lt;li&gt;目标必须能够在挑战与技能之间找到平衡，以保持心流体验的持续和有效。&lt;/li&gt;
&lt;li&gt;技能越高，越会不断追求更大的挑战，这使我们能够发挥自己的潜能。&lt;/li&gt;
&lt;li&gt;决定我们感受的不是我们实际拥有的技能，而是我们认为自己拥有的技能。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;心流体验的特点
&lt;ol&gt;
&lt;li&gt;全神贯注&lt;/li&gt;
&lt;li&gt;知行合一&lt;/li&gt;
&lt;li&gt;浑然忘我
&lt;ul&gt;
&lt;li&gt;当我们处于心流中时，自我意识会完全消失，自我本身也会消失。&lt;/li&gt;
&lt;li&gt;现代社会的运行规则会助长自我意识，这意味着，要放下自我需要更多的意愿和努力。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;掌控自如
&lt;ul&gt;
&lt;li&gt;感觉对自己的行为有一种掌控感，并能够对任务中接下来发生的事情做出直觉上的反应。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;无时间感&lt;/li&gt;
&lt;li&gt;内在动机
&lt;ul&gt;
&lt;li&gt;内在动机指的是一个人在做某件事是因为他本来就喜欢或感兴趣。&lt;/li&gt;
&lt;li&gt;体验本身就是奖励。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;现代社会中的心流
&lt;ul&gt;
&lt;li&gt;现在我们在数字世界中投入了大量注意力。&lt;/li&gt;
&lt;li&gt;心流确实存在于数字媒体世界。&lt;/li&gt;
&lt;li&gt;在今天的时代，获得最优体验需要更强的意向性。&lt;/li&gt;
&lt;li&gt;并非所有性格类型的人都同样容易体验到心流状态。具有自得其乐人格的人，更有可能体验并保持心流状态。&lt;/li&gt;
&lt;li&gt;微心流&lt;/li&gt;
&lt;li&gt;宏心流/核心心流&lt;/li&gt;
&lt;li&gt;微心流体验来得太容易，可能会抑制我们主动去追求更多宏心流体验。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="第二章-集体心流"&gt;第二章 集体心流 &lt;a href="#%e7%ac%ac%e4%ba%8c%e7%ab%a0-%e9%9b%86%e4%bd%93%e5%bf%83%e6%b5%81" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;2010 沃克：三种心流体验类型
&lt;ol&gt;
&lt;li&gt;个体心流&lt;/li&gt;
&lt;li&gt;共存式社交心流&lt;/li&gt;
&lt;li&gt;互动式社交心流&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;创造集体心流的十个要素
&lt;ol&gt;
&lt;li&gt;集体目标&lt;/li&gt;
&lt;li&gt;认真倾听&lt;/li&gt;
&lt;li&gt;全神贯注&lt;/li&gt;
&lt;li&gt;尽在掌握&lt;/li&gt;
&lt;li&gt;自我融合&lt;/li&gt;
&lt;li&gt;平等参与&lt;/li&gt;
&lt;li&gt;熟悉度&lt;/li&gt;
&lt;li&gt;沟通&lt;/li&gt;
&lt;li&gt;共同推进&lt;/li&gt;
&lt;li&gt;危机意识&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="第二部分-生活情境中的心流-20"&gt;第二部分 生活情境中的心流 2.0 &lt;a href="#%e7%ac%ac%e4%ba%8c%e9%83%a8%e5%88%86-%e7%94%9f%e6%b4%bb%e6%83%85%e5%a2%83%e4%b8%ad%e7%9a%84%e5%bf%83%e6%b5%81-20" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="第三章-新数字化和混合型工作世界"&gt;第三章 新数字化和混合型工作世界 &lt;a href="#%e7%ac%ac%e4%b8%89%e7%ab%a0-%e6%96%b0%e6%95%b0%e5%ad%97%e5%8c%96%e5%92%8c%e6%b7%b7%e5%90%88%e5%9e%8b%e5%b7%a5%e4%bd%9c%e4%b8%96%e7%95%8c" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;在人们的各个生活领域中，职场是寻找和培养心流、人际联结感、意义感和幸福感最重要的场所之一。&lt;/li&gt;
&lt;li&gt;在职场中，领导者、管理者和员工通常更关注负面体验，而不是工作中的中性或积极体验。&lt;/li&gt;
&lt;li&gt;积极组织心理学&lt;/li&gt;
&lt;li&gt;重要趋势
&lt;ul&gt;
&lt;li&gt;工作的去中心化&lt;/li&gt;
&lt;li&gt;数据驱动的评估和发展计划增加&lt;/li&gt;
&lt;li&gt;人工流程的自动化&lt;/li&gt;
&lt;li&gt;人工智能、社交机器人和虚拟工作空间&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;后新冠疫情时代，人们普遍难以投入工作，导致工作表现受到严重影响。&lt;/li&gt;
&lt;li&gt;工作已经成为当代生活的重心，已取代宗教和政治成为推动社会进步的核心力量。&lt;/li&gt;
&lt;li&gt;我们生命中最美好的时刻，并非那些被动接受、松弛安逸的时光 &amp;ndash; 尽管如果我们在努力之后收获这些体验，也很愉快，但是最美好的时刻往往发生在一个人资源挑战身心潜能的极致，去完成&lt;mark&gt;某项艰难而有价值的事情&lt;/mark&gt;的过程中。&lt;/li&gt;
&lt;li&gt;在工作中，人们感到自己有技能且面临挑战，因此感到更快乐、更强大、更有创造力，且有满足感。&lt;/li&gt;
&lt;li&gt;人类的注意力持续时间已经减少至 8 秒，比 2000 年发现的 12 秒减少了 4 秒。虽然可获取的信息量大幅增加，但人类摄入信息的能力提升速度却远远赶不上技术与信息增长的速度。&lt;/li&gt;
&lt;li&gt;诚然，技术进步使我们今天在工作中可以即时访问、共享和传输海量信息，然而，这一切也造成&lt;mark&gt;信息过载&lt;/mark&gt;，如果海量信息不能得到有效管理，则可能严重阻碍工作中心流的发生。&lt;mark&gt;在许多情况下，信息就等同于干扰。&lt;/mark&gt;&lt;/li&gt;
&lt;li&gt;“工作悖论”：尽管大多数人逃避工作，更愿意花时间休闲，但他们也报告说自己在工作中拥有一些最积极的体验，而在休闲时间里却常常情绪低落。&lt;/li&gt;
&lt;li&gt;工作中的心流还被发现可以缓解工作疲劳。&lt;/li&gt;
&lt;li&gt;促进工作中心流体验发生的策略
&lt;ol&gt;
&lt;li&gt;识别自己的喜好、创造力、生产力高峰时段。&lt;/li&gt;
&lt;li&gt;创建自我反馈机制。&lt;/li&gt;
&lt;li&gt;批量完成相似的任务。&lt;/li&gt;
&lt;li&gt;在关系互动中保持临在和专注。&lt;/li&gt;
&lt;li&gt;养成你的心流准备习惯。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="第四章-在运动与休闲中发现心流"&gt;第四章 在运动与休闲中发现心流 &lt;a href="#%e7%ac%ac%e5%9b%9b%e7%ab%a0-%e5%9c%a8%e8%bf%90%e5%8a%a8%e4%b8%8e%e4%bc%91%e9%97%b2%e4%b8%ad%e5%8f%91%e7%8e%b0%e5%bf%83%e6%b5%81" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;“休闲”活动
&lt;ol&gt;
&lt;li&gt;工作之余，或其他生产维持活动之外的时间。&lt;/li&gt;
&lt;li&gt;在特定文化中被人们视为休闲追求的活动。&lt;/li&gt;
&lt;li&gt;&lt;mark&gt;一种自由选择的、有内在奖赏的积极体验。&lt;/mark&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;在秀气心流休闲活动时，你可以问自己以下五个问题
&lt;ol&gt;
&lt;li&gt;你是想投入更多体力还是更多脑力？&lt;/li&gt;
&lt;li&gt;你能投入多少时间？
&lt;ul&gt;
&lt;li&gt;帕金森定律：工作会自动占满我们为完成它所分配的时间。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;什么活动符合你的身心节律和生活节奏？&lt;/li&gt;
&lt;li&gt;什么能激发你的内在动机？&lt;/li&gt;
&lt;li&gt;我现在的感觉如何？&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;与心流相关的四类游戏体验
&lt;ol&gt;
&lt;li&gt;效能感&lt;/li&gt;
&lt;li&gt;认同感&lt;/li&gt;
&lt;li&gt;穿越感&lt;/li&gt;
&lt;li&gt;认知负荷&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;在创造心流方面，生活中其他领域的活动很难与体育运动相提并论。当身体各项功能与具有结构感和竞技性的体育运动相结合时，就为心流的产生提供了绝佳的有利条件。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="第五章-数字社会中的心流"&gt;第五章 数字社会中的心流 &lt;a href="#%e7%ac%ac%e4%ba%94%e7%ab%a0-%e6%95%b0%e5%ad%97%e7%a4%be%e4%bc%9a%e4%b8%ad%e7%9a%84%e5%bf%83%e6%b5%81" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;沉迷并不等同于心流 &amp;ndash; 心流是一种整体、有意义的体验，它需要你发挥技能来应对某项挑战。&lt;/p&gt;</description></item><item><title>图片颜色替换工具</title><link>https://www.liujiajia.me/docs/tools/tran-by-canvas.html</link><pubDate>Wed, 12 Nov 2025 17:37:04 +0800</pubDate><guid>https://www.liujiajia.me/docs/tools/tran-by-canvas.html</guid><description>&lt;h1 id="图片颜色替换工具"&gt;图片颜色替换工具 &lt;a href="#%e5%9b%be%e7%89%87%e9%a2%9c%e8%89%b2%e6%9b%bf%e6%8d%a2%e5%b7%a5%e5%85%b7" class="anchor" aria-hidden="true"&gt;&lt;i class="material-icons align-middle"&gt;link&lt;/i&gt;&lt;/a&gt;&lt;/h1&gt;&lt;div class="container my-4"&gt;
 &lt;div class="card p-4 shadow-sm"&gt;
 &lt;div class="mb-4"&gt;
 &lt;div class="mb-3"&gt;
 &lt;label for="upload" class="form-label text-muted"&gt;选择图片文件&lt;/label&gt;
 &lt;input type="file" id="upload" accept="image/*" class="form-control"&gt;
 &lt;/div&gt;
 &lt;div class="d-flex gap-2 mb-3"&gt;
 &lt;button id="download" disabled class="btn btn-primary"&gt;
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-download me-1" viewBox="0 0 16 16"&gt;
 &lt;path d="M8 1a.5.5 0 0 1 .5.5v11a.5.5 0 0 1-1 0v-11A.5.5 0 0 1 8 1z"/&gt;
 &lt;path d="M8 3a.5.5 0 0 0-.5.5v5.793l-2.146-2.147a.5.5 0 1 0-.708.708l3 3a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 9.293V3.5A.5.5 0 0 0 8 3z"/&gt;
 &lt;/svg&gt;
 下载修改后的图片
 &lt;/button&gt;
 &lt;button id="replaceAgain" disabled class="btn btn-secondary"&gt;
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-clockwise me-1" viewBox="0 0 16 16"&gt;
 &lt;path d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z"/&gt;
 &lt;path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z"/&gt;
 &lt;/svg&gt;
 重新替换颜色
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="row"&gt;
 &lt;div class="col-md-6 mb-4"&gt;
 &lt;div class="card p-3 bg-light"&gt;
 &lt;h5 class="card-title mb-3 text-primary"&gt;颜色判断阈值（RGB）&lt;/h5&gt;
 &lt;div class="row"&gt;
 &lt;div class="col-4 mb-2"&gt;
 &lt;label for="thresholdR" class="form-label small"&gt;R 值&lt;/label&gt;
 &lt;input type="number" id="thresholdR" min="0" max="255" value="250" placeholder="R" class="form-control form-control-sm"&gt;
 &lt;/div&gt;
 &lt;div class="col-4 mb-2"&gt;
 &lt;label for="thresholdG" class="form-label small"&gt;G 值&lt;/label&gt;
 &lt;input type="number" id="thresholdG" min="0" max="255" value="250" placeholder="G" class="form-control form-control-sm"&gt;
 &lt;/div&gt;
 &lt;div class="col-4 mb-2"&gt;
 &lt;label for="thresholdB" class="form-label small"&gt;B 值&lt;/label&gt;
 &lt;input type="number" id="thresholdB" min="0" max="255" value="250" placeholder="B" class="form-control form-control-sm"&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="form-text small"&gt;当像素 RGB 值都大于阈值时会被替换&lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="col-md-6 mb-4"&gt;
 &lt;div class="card p-3 bg-light"&gt;
 &lt;h5 class="card-title mb-3 text-success"&gt;替换颜色值（RGB）&lt;/h5&gt;
 &lt;div class="row"&gt;
 &lt;div class="col-3 mb-2"&gt;
 &lt;label for="replaceR" class="form-label small"&gt;R&lt;/label&gt;
 &lt;input type="number" id="replaceR" min="0" max="255" value="250" placeholder="R" class="form-control form-control-sm"&gt;
 &lt;/div&gt;
 &lt;div class="col-3 mb-2"&gt;
 &lt;label for="replaceG" class="form-label small"&gt;G&lt;/label&gt;
 &lt;input type="number" id="replaceG" min="0" max="255" value="250" placeholder="G" class="form-control form-control-sm"&gt;
 &lt;/div&gt;
 &lt;div class="col-3 mb-2"&gt;
 &lt;label for="replaceB" class="form-label small"&gt;B&lt;/label&gt;
 &lt;input type="number" id="replaceB" min="0" max="255" value="250" placeholder="B" class="form-control form-control-sm"&gt;
 &lt;/div&gt;
 &lt;div class="col-3 mb-2"&gt;
 &lt;label for="replaceA" class="form-label small"&gt;透明度&lt;/label&gt;
 &lt;input type="number" id="replaceA" min="0" max="255" value="255" placeholder="A" class="form-control form-control-sm"&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="form-text small"&gt;设置替换后的 RGB 值和透明度&lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="mt-4 border rounded p-2 bg-white"&gt;
 &lt;div class="text-center mb-2 text-muted"&gt;预览区域&lt;/div&gt;
 &lt;div class="d-flex justify-content-center"&gt;
 &lt;canvas id="canvas" class="img-fluid rounded"&gt;&lt;/canvas&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;!-- 使用说明 --&gt;
 &lt;div class="card mt-4 p-4"&gt;
 &lt;h5 class=""&gt;使用说明&lt;/h5&gt;
 &lt;ul class="list-unstyled"&gt;
 &lt;li class="mb-1"&gt;1. 点击上传按钮选择需要处理的图片&lt;/li&gt;
 &lt;li class="mb-1"&gt;2. 设置颜色判断阈值，当像素 RGB 值都大于阈值时会被替换&lt;/li&gt;
 &lt;li class="mb-1"&gt;3. 设置要替换的目标颜色 RGB 值和透明度&lt;/li&gt;
 &lt;li class="mb-1"&gt;4. 点击"重新替换颜色"按钮应用新的设置&lt;/li&gt;
 &lt;li class="mb-1"&gt;5. 点击"下载修改后的图片"保存结果&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
// 确保 DOM 加载完成
 document.addEventListener('DOMContentLoaded', function() {
 // 初始化元素引用
 const upload = document.getElementById('upload');
 const download = document.getElementById('download');
 const replaceAgain = document.getElementById('replaceAgain');
 const canvas = document.getElementById('canvas');
 const thresholdRInput = document.getElementById('thresholdR');
 const thresholdGInput = document.getElementById('thresholdG');
 const thresholdBInput = document.getElementById('thresholdB');
 const replaceRInput = document.getElementById('replaceR');
 const replaceGInput = document.getElementById('replaceG');
 const replaceBInput = document.getElementById('replaceB');
 const replaceAInput = document.getElementById('replaceA');

 // 添加安全检查
 if (!canvas.getContext) {
 alert('抱歉，您的浏览器不支持 Canvas 功能');
 return;
 }

 const ctx = canvas.getContext('2d');
 let originalImageData = null; // 保存原始图片数据
 let currentImage = null; // 保存当前图片对象

 // 获取输入值的安全函数，带默认值
 function getSafeInputValue(inputElement, defaultValue) {
 const value = parseInt(inputElement.value, 10);
 return isNaN(value) ? defaultValue : Math.max(0, Math.min(255, value));
 }

 // 替换颜色的函数
 function replaceColors() {
 // 检查是否有原始图像数据
 if (!originalImageData || !canvas.width || !canvas.height) {
 return;
 }

 // 先恢复原始图像数据
 ctx.putImageData(originalImageData, 0, 0);

 // 获取Canvas图像数据
 const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
 const data = imageData.data;

 // 获取阈值输入值
 const thresholdR = getSafeInputValue(thresholdRInput, 250);
 const thresholdG = getSafeInputValue(thresholdGInput, 250);
 const thresholdB = getSafeInputValue(thresholdBInput, 250);

 // 获取替换颜色输入值
 const replaceR = getSafeInputValue(replaceRInput, 250);
 const replaceG = getSafeInputValue(replaceGInput, 250);
 const replaceB = getSafeInputValue(replaceBInput, 250);
 const replaceA = getSafeInputValue(replaceAInput, 255);

 // 遍历像素并替换颜色
 for (let i = 0; i &lt; data.length; i += 4) {
 const r = data[i];
 const g = data[i + 1];
 const b = data[i + 2];

 // 判断是否需要替换颜色
 if (r &gt; thresholdR &amp;&amp; g &gt; thresholdG &amp;&amp; b &gt; thresholdB) {
 data[i] = replaceR; // R
 data[i + 1] = replaceG; // G
 data[i + 2] = replaceB; // B
 data[i + 3] = replaceA; // A
 }
 }

 // 更新画布
 ctx.putImageData(imageData, 0, 0);

 // 启用下载按钮
 download.disabled = false;
 }

 // 重置表单和画布
 function resetForm() {
 upload.value = '';
 download.disabled = true;
 replaceAgain.disabled = true;
 canvas.width = 0;
 canvas.height = 0;
 originalImageData = null;
 currentImage = null;
 }

 // 验证图片文件
 function isValidImageFile(file) {
 return file &amp;&amp; file.type.startsWith('image/');
 }

 // 处理图片加载和显示
 function handleImageUpload(file) {
 // 释放之前的资源
 if (currentImage) {
 URL.revokeObjectURL(currentImage.src);
 }

 const img = new Image();
 img.onload = () =&gt; {
 // 处理大图片，限制最大尺寸
 const maxWidth = 5000;
 const maxHeight = 5000;
 let width = img.width;
 let height = img.height;

 if (width &gt; maxWidth || height &gt; maxHeight) {
 const aspectRatio = width / height;
 if (width &gt; height) {
 width = maxWidth;
 height = width / aspectRatio;
 } else {
 height = maxHeight;
 width = height * aspectRatio;
 }
 }

 // 设置 canvas 尺寸
 canvas.width = width;
 canvas.height = height;

 // 清空画布并绘制图片（保持宽高比）
 ctx.clearRect(0, 0, canvas.width, canvas.height);
 ctx.drawImage(img, 0, 0, width, height);

 // 保存原始图像数据
 originalImageData = ctx.getImageData(0, 0, canvas.width, canvas.height);

 // 执行颜色替换
 replaceColors();

 // 启用重新替换按钮
 replaceAgain.disabled = false;

 // 更新当前图片引用
 currentImage = img;
 };

 img.onerror = () =&gt; {
 alert('图片加载失败，请尝试其他图片文件');
 resetForm();
 };

 // 设置图片源
 img.src = URL.createObjectURL(file);
 }

 // 文件上传事件处理
 upload.addEventListener('change', e =&gt; {
 const file = e.target.files[0];
 if (!file) return;

 if (!isValidImageFile(file)) {
 alert('请上传有效的图片文件');
 resetForm();
 return;
 }

 handleImageUpload(file);
 });

 // 重新替换按钮点击事件
 replaceAgain.addEventListener('click', () =&gt; {
 // 添加视觉反馈
 replaceAgain.classList.add('btn-loading');
 replaceAgain.disabled = true;

 // 使用 setTimeout 确保 UI 更新
 setTimeout(() =&gt; {
 replaceColors();
 replaceAgain.classList.remove('btn-loading');
 replaceAgain.disabled = false;
 }, 50);
 });

 // 点击下载按钮保存图片
download.addEventListener('click', () =&gt; {
 try {
 const link = document.createElement('a');
 const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
 link.download = `converted-image-${timestamp}.png`; // 使用时间戳作为文件名，避免覆盖
 link.href = canvas.toDataURL('image/png'); // 转成 Base64 图片数据

 // 使用现代方式触发下载
 if (link.click) {
 link.click();
 } else {
 // 兼容性处理
 const event = new MouseEvent('click');
 link.dispatchEvent(event);
 }
 } catch (error) {
 console.error('下载失败:', error);
 alert('图片下载失败，请尝试刷新页面后重试');
 }
 });

 // 为颜色输入添加实时更新功能
 const colorInputs = [
 thresholdRInput, thresholdGInput, thresholdBInput,
 replaceRInput, replaceGInput, replaceBInput, replaceAInput
 ];

 colorInputs.forEach(input =&gt; {
 input.addEventListener('change', () =&gt; {
 // 确保输入值在有效范围内
 const value = getSafeInputValue(input, 255);
 input.value = value;
 });
 });
});
&lt;/script&gt;</description></item></channel></rss>