JavaScript网页设计案例(任务管理器)

任务管理器

  • 功能描述:用户可以添加任务、删除任务,并且任务列表在页面刷新后不会丢失,还能进行任务过滤与搜索。
  • 代码实现思路
    • HTML 结构:创建输入框用于输入任务、按钮用于添加任务,以及无序列表用于展示任务列表。
    • CSS 样式:对页面和各个元素进行样式设置,如背景颜色、边框、字体等,让页面看起来更美观。
    • JavaScript 逻辑 :利用addEventListener监听事件,获取用户输入并添加到任务列表,通过localStorage实现任务的持久化存储。

代码实现(HTML+CSS+JS)

复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>任务管理器</title>
    <style>
        /* CSS 样式 */
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
            margin: 0;
            padding: 0;
        }

        .container {
            max-width: 600px;
            margin: 50px auto;
            background-color: #fff;
            padding: 20px;
            border-radius: 5px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }

        h1 {
            text-align: center;
        }

        input[type="text"] {
            width: 70%;
            padding: 10px;
            margin-right: 10px;
            border: 1px solid #ccc;
            border-radius: 3px;
        }

        button {
            padding: 10px 20px;
            background-color: #007BFF;
            color: #fff;
            border: none;
            border-radius: 3px;
            cursor: pointer;
        }

        button:hover {
            background-color: #0056b3;
        }

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

        li {
            padding: 10px;
            border-bottom: 1px solid #ccc;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }

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

        li button {
            background-color: #dc3545;
            color: #fff;
            border: none;
            padding: 5px 10px;
            border-radius: 3px;
            cursor: pointer;
        }

        li button:hover {
            background-color: #c82333;
        }
    </style>
</head>

<body>
    <div class="container">
        <h1>任务管理器</h1>
        <input type="text" id="taskInput" placeholder="输入任务">
        <button id="addTaskButton">添加任务</button>
        <input type="text" id="searchInput" placeholder="搜索任务">
        <ul id="taskList"></ul>
    </div>
    <script>
        // 获取 DOM 元素
        const taskInput = document.getElementById('taskInput');
        const addTaskButton = document.getElementById('addTaskButton');
        const taskList = document.getElementById('taskList');
        const searchInput = document.getElementById('searchInput');

        // 从 localStorage 中获取任务列表
        let tasks = JSON.parse(localStorage.getItem('tasks')) || [];

        // 渲染任务列表
        function renderTasks() {
            taskList.innerHTML = '';
            const searchTerm = searchInput.value.toLowerCase();
            tasks.forEach((task, index) => {
                if (task.text.toLowerCase().includes(searchTerm)) {
                    const li = document.createElement('li');
                    li.innerHTML = `
                        <input type="checkbox" ${task.completed? 'checked' : ''} onchange="toggleTask(${index})">
                        <span>${task.text}</span>
                        <button onclick="deleteTask(${index})">删除</button>
                    `;
                    if (task.completed) {
                        li.classList.add('completed');
                    }
                    taskList.appendChild(li);
                }
            });
        }

        // 添加任务
        function addTask() {
            const taskText = taskInput.value.trim();
            if (taskText) {
                tasks.push({ text: taskText, completed: false });
                localStorage.setItem('tasks', JSON.stringify(tasks));
                taskInput.value = '';
                renderTasks();
            }
        }

        // 删除任务
        function deleteTask(index) {
            tasks.splice(index, 1);
            localStorage.setItem('tasks', JSON.stringify(tasks));
            renderTasks();
        }

        // 标记任务完成
        function toggleTask(index) {
            tasks[index].completed =!tasks[index].completed;
            localStorage.setItem('tasks', JSON.stringify(tasks));
            renderTasks();
        }

        // 搜索任务
        function searchTasks() {
            renderTasks();
        }

        // 事件监听
        addTaskButton.addEventListener('click', addTask);
        searchInput.addEventListener('input', searchTasks);

        // 初始渲染
        renderTasks();
    </script>
</body>

</html>

将上述代码保存为一个 .html 文件(例如 task_manager.html),然后在浏览器中打开该文件,即可看到任务管理器的效果。

代码说明

  • HTML 部分:创建了输入框、添加按钮、搜索框和无序列表,用于输入任务、添加任务、搜索任务和展示任务列表。
  • CSS 部分:对页面进行了基本的样式设置,包括背景颜色、边框、字体等,使页面看起来更美观。
  • JavaScript 部分
    • 使用localStorage来存储任务列表,确保页面刷新后任务列表不会丢失。
    • addTask函数用于添加新任务,并更新localStorage
    • deleteTask函数用于删除指定索引的任务,并更新localStorage
    • toggleTask函数用于标记任务完成状态,并更新localStorage
    • searchTasks函数用于根据搜索框输入过滤任务列表。
    • renderTasks函数用于渲染任务列表,根据任务的完成状态添加样式。

运行效果

相关推荐
橙子家7 小时前
浏览器缓存之【身份与会话管理】:Cookies 和 Private state tokens
前端
To_OC8 小时前
LC 49 字母异位词分组:想到哈希表很简单,选对 key 才是精髓
javascript·算法·leetcode
最新资讯动态8 小时前
HDC 2026 | 对话鲸鸿动能:存量时代,品牌如何夺回营销“主动权”?
前端
最新资讯动态8 小时前
游戏出海,从产品走向体系
前端
最新资讯动态8 小时前
20人团队跑出百万DAU、大厂也来抢量:谁在鸿蒙生态跑出加速度
前端
最新资讯动态8 小时前
千万开发者背后,鸿蒙商业化的B面
前端
爱勇宝10 小时前
AI 时代:智商决定起点,情商决定走多远
前端·ai编程
kyriewen10 小时前
用了半年 Claude Code 后,我尝试关掉它写了一周代码——结果比想象中严重
前端·javascript·ai编程
IT_陈寒11 小时前
Vite的静态资源打包让我熬夜到三点,这坑千万别跳
前端·人工智能·后端
山河木马12 小时前
矩阵专题0-webGL中的矩阵
javascript·webgl·计算机图形学