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函数用于渲染任务列表,根据任务的完成状态添加样式。

运行效果

相关推荐
明教卢师傅20 分钟前
JavaScript前后端交互-AJAX/fetch
javascript·ajax·交互
hhmy12345638 分钟前
表格结构标签
java·服务器·前端
喵叔哟43 分钟前
5. 【Vue实战--孢子记账--Web 版开发】-- 主页UI
前端·vue.js·ui
鱼骨不是鱼翅1 小时前
Spring Web MVC基础第一篇
前端·spring·mvc
小林熬夜学编程2 小时前
【Python】第七弹---Python基础进阶:深入字典操作与文件处理技巧
开发语言·前端·python·算法
大模型铲屎官2 小时前
HTML常见文本标签解析:从基础到进阶的全面指南
前端·css·html·编程·html5·文本标签
还是鼠鼠2 小时前
图书管理系统 Axios 源码__获取图书列表
前端·javascript·ajax·bootstrap
Riesenzahn3 小时前
如何通过表单下载文件?
前端·javascript
补三补四3 小时前
html的字符实体和颜色表示
前端·html5
真滴book理喻3 小时前
CSS核心
前端·javascript·css