1. 项目概述:用豆包打造你的第一个番茄时钟
刚接触时间管理的新手们,番茄工作法绝对是你不可错过的入门利器。这个由Francesco Cirillo创立的时间管理方法,核心在于25分钟专注工作+5分钟休息的循环模式。而今天我们要做的,就是利用豆包这个新兴工具来快速实现一个属于自己的番茄时钟。
豆包作为一款国产AI工具,其简洁的交互界面和强大的自然语言处理能力,让它成为编写小型功能性程序的绝佳选择。相比传统编程方式,通过自然语言指令让豆包生成代码,可以大幅降低技术门槛——这正是新手最需要的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 番茄时钟的核心设计思路
2.1 功能需求拆解
一个基础的番茄时钟需要包含以下核心功能模块:
- 计时器功能:25分钟倒计时和5分钟休息计时
- 状态显示:当前是工作还是休息状态
- 循环计数:完成几个番茄周期
- 提示音效:阶段切换时的声音提醒
2.2 技术实现方案选择
在豆包中实现这个功能,我们有两种主要路径:
- 纯前端实现:使用HTML+CSS+JavaScript单文件方案
- 调用豆包API:通过接口实现更复杂的功能
对于新手来说,第一种方案更加友好。我们可以直接让豆包生成一个完整的HTML文件,包含所有必要的代码和样式,下载后双击就能运行。
3. 实操步骤详解
3.1 给豆包的完整指令示例
plaintext复制请创建一个单文件HTML番茄时钟,要求:
1. 包含25分钟工作计时和5分钟休息计时
2. 有开始/暂停/重置按钮
3. 显示当前状态(工作中/休息中)
4. 显示完成的番茄周期数
5. 阶段切换时有提示音
6. 界面简洁美观,使用绿色表示工作时段,蓝色表示休息时段
7. 所有代码包含在一个HTML文件中
8. 添加适当的CSS样式使界面美观
3.2 代码结构解析
豆包生成的代码通常会包含以下几个部分:
html复制<!DOCTYPE html>
<html>
<head>
<title>番茄时钟</title>
<style>
/* CSS样式部分 */
body {
font-family: Arial, sans-serif;
text-align: center;
margin-top: 50px;
}
.timer-container {
/* 计时器容器样式 */
}
/* 更多样式... */
</style>
</head>
<body>
<div class="timer-container">
<h1>番茄时钟</h1>
<div id="timer">25:00</div>
<div id="status">准备开始</div>
<div id="cycles">已完成周期: 0</div>
<button id="startBtn">开始</button>
<button id="pauseBtn">暂停</button>
<button id="resetBtn">重置</button>
</div>
<audio id="alertSound" src="data:audio/mpeg;base64,..."></audio>
<script>
// JavaScript代码部分
let workDuration = 25 * 60; // 25分钟转换为秒
let breakDuration = 5 * 60; // 5分钟转换为秒
let secondsLeft = workDuration;
let timerInterval;
let isWorking = true;
let cyclesCompleted = 0;
// 更多JavaScript代码...
</script>
</body>
</html>
3.3 关键功能实现细节
- 计时器核心逻辑:
javascript复制function updateTimer() {
const minutes = Math.floor(secondsLeft / 60);
const seconds = secondsLeft % 60;
document.getElementById('timer').textContent =
`${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
if (secondsLeft === 0) {
document.getElementById('alertSound').play();
if (isWorking) {
// 工作时段结束,切换到休息
secondsLeft = breakDuration;
isWorking = false;
document.getElementById('status').textContent = '休息中';
document.body.style.backgroundColor = '#e6f3ff';
} else {
// 休息时段结束,切换回工作
secondsLeft = workDuration;
isWorking = true;
cyclesCompleted++;
document.getElementById('status').textContent = '工作中';
document.getElementById('cycles').textContent =
`已完成周期: ${cyclesCompleted}`;
document.body.style.backgroundColor = '#e6ffe6';
}
} else {
secondsLeft--;
}
}
- 按钮控制逻辑:
javascript复制document.getElementById('startBtn').addEventListener('click', () => {
if (!timerInterval) {
timerInterval = setInterval(updateTimer, 1000);
}
});
document.getElementById('pauseBtn').addEventListener('click', () => {
clearInterval(timerInterval);
timerInterval = null;
});
document.getElementById('resetBtn').addEventListener('click', () => {
clearInterval(timerInterval);
timerInterval = null;
secondsLeft = isWorking ? workDuration : breakDuration;
updateTimer();
});
4. 个性化定制技巧
4.1 界面美化建议
想让你的番茄时钟更有个性?可以尝试这些修改:
- 修改配色方案:
css复制/* 工作时段背景色 */
body.working {
background-color: #ffebee; /* 浅红色 */
}
/* 休息时段背景色 */
body.breaking {
background-color: #e8f5e9; /* 浅绿色 */
}
- 添加进度条:
html复制<div class="progress-container">
<div id="progressBar" class="progress-bar"></div>
</div>
<style>
.progress-container {
width: 80%;
margin: 20px auto;
height: 10px;
background-color: #f0f0f0;
border-radius: 5px;
}
.progress-bar {
height: 100%;
width: 100%;
background-color: #4CAF50;
border-radius: 5px;
transition: width 1s linear;
}
</style>
<script>
// 在updateTimer函数中添加
const progressPercent = (secondsLeft / (isWorking ? workDuration : breakDuration)) * 100;
document.getElementById('progressBar').style.width = `${progressPercent}%`;
</script>
4.2 功能增强方案
- 自定义时长:
html复制<div>
<label>工作时间(分钟): </label>
<input type="number" id="workTime" value="25" min="1">
</div>
<div>
<label>休息时间(分钟): </label>
<input type="number" id="breakTime" value="5" min="1">
</div>
<script>
document.getElementById('startBtn').addEventListener('click', () => {
workDuration = parseInt(document.getElementById('workTime').value) * 60;
breakDuration = parseInt(document.getElementById('breakTime').value) * 60;
secondsLeft = workDuration;
// 其余代码...
});
</script>
- 任务列表功能:
html复制<div class="task-list">
<h3>今日任务</h3>
<ul id="tasks">
<!-- 任务将通过JS动态添加 -->
</ul>
<input type="text" id="newTask" placeholder="添加新任务">
<button id="addTask">添加</button>
</div>
<script>
// 任务管理功能
const tasks = [];
document.getElementById('addTask').addEventListener('click', () => {
const taskText = document.getElementById('newTask').value.trim();
if (taskText) {
tasks.push(taskText);
renderTasks();
document.getElementById('newTask').value = '';
}
});
function renderTasks() {
const tasksList = document.getElementById('tasks');
tasksList.innerHTML = '';
tasks.forEach((task, index) => {
const li = document.createElement('li');
li.textContent = task;
tasksList.appendChild(li);
});
}
</script>
5. 常见问题与解决方案
5.1 豆包生成的代码不工作怎么办?
-
检查基础结构:
- 确保有完整的HTML文档结构(DOCTYPE, html, head, body标签)
- 确认所有JavaScript代码都在
