一起学习网 一起学习网


创建简单Todo List应用指南

开发 Todo List, HTML, CSS, JavaScript, localStorage 01-18

如何实现一个简单的Todo List应用(基于HTML、CSS和JavaScript)

项目简介

在本篇文章中,我们将创建一个简单的Todo List(待办事项)应用。通过这个项目,您将学习如何用HTML构建页面结构,用CSS美化设计,并用JavaScript实现核心功能,如添加任务、删除任务和标记任务为完成状态。


目标功能

  1. 用户可以输入任务并将其添加到列表中。
  2. 用户可以删除不需要的任务。
  3. 用户可以标记任务为已完成并取消标记。
  4. 数据在刷新后不会丢失(使用浏览器本地存储)。

具体实现步骤

1. 创建文件结构

创建一个文件夹,包含以下三个文件:

  • index.html:页面结构。
  • style.css:页面样式。
  • script.js:逻辑功能。

2. 编写HTML页面

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Todo List</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <div class="container">
    <h1>Todo List</h1>
    <div class="input-area">
      <input type="text" id="taskInput" placeholder="Enter a task">
      <button id="addTaskBtn">Add Task</button>
    </div>
    <ul id="taskList"></ul>
  </div>
  <script src="script.js"></script>
</body>
</html>

3. 添加CSS样式

/* style.css */
body {
  font-family: Arial, sans-serif;
  background-color: #f4f4f9;
  margin: 0;
  padding: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}

.container {
  background: #fff;
  padding: 20px 30px;
  border-radius: 8px;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
  width: 400px;
  text-align: center;
}

h1 {
  margin-bottom: 20px;
}

.input-area {
  display: flex;
  gap: 10px;
  margin-bottom: 20px;
}

input {
  flex: 1;
  padding: 10px;
  border: 1px solid #ccc;
  border-radius: 4px;
}

button {
  padding: 10px 20px;
  background-color: #0284c7;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}

button:hover {
  background-color: #0369a1;
}

ul {
  list-style: none;
  padding: 0;
}

li {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px;
  background: #f9f9f9;
  border: 1px solid #ddd;
  border-radius: 4px;
  margin-bottom: 10px;
}

li.completed {
  text-decoration: line-through;
  color: #888;
}

li button {
  background: none;
  border: none;
  cursor: pointer;
  color: #ff4b5c;
}

li button:hover {
  color: #e63946;
}

4. 编写JavaScript逻辑

// script.js

// 获取页面元素
const taskInput = document.getElementById('taskInput');
const addTaskBtn = document.getElementById('addTaskBtn');
const taskList = document.getElementById('taskList');

// 加载本地存储中的任务数据
document.addEventListener('DOMContentLoaded', loadTasks);

// 点击添加任务按钮
addTaskBtn.addEventListener('click', addTask);

// 添加任务到列表
function addTask() {
  const taskText = taskInput.value.trim();
  if (taskText === '') {
    alert('Please enter a task!');
    return;
  }

  // 添加任务元素
  const li = createTaskElement(taskText);
  taskList.appendChild(li);

  // 保存任务到本地存储
  saveTask(taskText);

  // 清空输入框
  taskInput.value = '';
}

// 创建任务元素
function createTaskElement(taskText) {
  const li = document.createElement('li');
  li.textContent = taskText;

  // 完成任务功能
  li.addEventListener('click', () => {
    li.classList.toggle('completed');
  });

  // 删除任务功能
  const deleteBtn = document.createElement('button');
  deleteBtn.textContent = 'Delete';
  deleteBtn.addEventListener('click', () => {
    li.remove();
    deleteTask(taskText);
  });

  li.appendChild(deleteBtn);
  return li;
}

// 保存任务到本地存储
function saveTask(taskText) {
  const tasks = JSON.parse(localStorage.getItem('tasks')) || [];
  tasks.push(taskText);
  localStorage.setItem('tasks', JSON.stringify(tasks));
}

// 删除任务从本地存储
function deleteTask(taskText) {
  const tasks = JSON.parse(localStorage.getItem('tasks')) || [];
  const filteredTasks = tasks.filter(task => task !== taskText);
  localStorage.setItem('tasks', JSON.stringify(filteredTasks));
}

// 加载本地存储中的任务
function loadTasks() {
  const tasks = JSON.parse(localStorage.getItem('tasks')) || [];
  tasks.forEach(taskText => {
    const li = createTaskElement(taskText);
    taskList.appendChild(li);
  });
}

功能说明

  1. HTML核心结构
    HTML部分是应用的基础框架,包含一个任务输入框、一个添加按钮和一个用于显示任务的列表。

  2. CSS样式定义
    CSS用来美化界面,使Todo List看起来简洁、清晰,并且包含交互性的hover效果。

  3. JavaScript逻辑实现
    JavaScript负责核心逻辑:

    • 添加新任务到列表中。
    • 双击任务可以将其标记为"完成"。
    • 删除任务按钮可以移除任务。
    • 使用本地存储(localStorage)保存和加载任务数据,做到刷新后数据不丢失。

效果预览

完成上述步骤后,打开index.html文件,您将看到一个Todo List应用,用户可以添加任务、标记完成任务、删除任务并且数据会持久化存储。如果需要还可以基于此进一步扩展功能!


总结

通过这个项目,我们学习了如何将HTML、CSS和JavaScript相结合来构建一个简单的应用程序。同时,我们介绍了如何使用浏览器的本地存储功能来持久化数据。如果您希望继续练习,可以尝试添加复杂功能,例如任务排序、优先级分类等。这是您迈向前端开发的一个优秀起点!


编辑:一起学习网