JavaScript网页设计案例:动态交互式任务列表

        在现代网页开发中,JavaScript被广泛应用于实现动态交互效果。看完这一篇你就可以设计一个动态任务列表,全面展示HTML、CSS和JavaScript在前端开发中的实际应用。通过本案例,你将深入了解事件监听、DOM操作以及用户交互设计的实现过程。


案例需求

在设计动态任务列表时,我们需要满足以下功能需求:

  1. 动态添加任务,并显示在列表中。
  2. 勾选任务表示完成状态,并通过样式标记。
  3. 单独删除任务。
  4. 一键清空所有任务。
  5. 持久化任务数据,支持刷新页面后数据保留。

HTML结构

首先,创建一个基础的HTML页面,包含任务输入框、添加按钮和任务展示区域。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>任务列表</title><link rel="stylesheet" href="styles.css">
</head>
<body><div class="container"><h1>任务列表</h1><div class="task-input"><input type="text" id="task-input" placeholder="输入任务..."><button id="add-task">添加任务</button></div><ul id="task-list"></ul><button id="clear-tasks">清空所有任务</button></div><script src="script.js"></script>
</body>
</html>

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: #ffffff;padding: 20px;border-radius: 5px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);width: 300px;
}h1 {text-align: center;color: #333;
}.task-input {display: flex;gap: 10px;margin-bottom: 20px;
}input[type="text"] {flex: 1;padding: 10px;border: 1px solid #ccc;border-radius: 4px;
}button {background-color: #007bff;color: #fff;border: none;border-radius: 4px;padding: 10px 15px;cursor: pointer;transition: background-color 0.3s;
}button:hover {background-color: #0056b3;
}#task-list {list-style-type: none;padding: 0;
}#task-list li {display: flex;justify-content: space-between;align-items: center;padding: 10px;border-bottom: 1px solid #ddd;
}#task-list li.completed {text-decoration: line-through;color: #aaa;
}

JavaScript功能实现

编写JavaScript代码,完成核心功能,包括任务添加、标记完成、删除和清空。

document.addEventListener('DOMContentLoaded', () => {const taskInput = document.getElementById('task-input');const addTaskButton = document.getElementById('add-task');const taskList = document.getElementById('task-list');const clearTasksButton = document.getElementById('clear-tasks');// 从本地存储加载任务const loadTasks = () => {const tasks = JSON.parse(localStorage.getItem('tasks')) || [];tasks.forEach(task => {addTaskToList(task.text, task.completed);});};// 保存任务到本地存储const saveTasks = () => {const tasks = Array.from(taskList.children).map(taskItem => ({text: taskItem.firstChild.textContent,completed: taskItem.classList.contains('completed')}));localStorage.setItem('tasks', JSON.stringify(tasks));};// 添加任务到列表const addTaskToList = (taskText, completed = false) => {const taskItem = document.createElement('li');taskItem.innerHTML = `${taskText} <button class="delete-task">删除</button>`;if (completed) {taskItem.classList.add('completed');}taskList.appendChild(taskItem);// 绑定事件taskItem.addEventListener('click', (e) => {if (e.target.classList.contains('delete-task')) {taskItem.remove();saveTasks();} else {taskItem.classList.toggle('completed');saveTasks();}});};// 添加任务addTaskButton.addEventListener('click', () => {const taskText = taskInput.value.trim();if (taskText === '') {alert('任务内容不能为空!');return;}addTaskToList(taskText);taskInput.value = '';saveTasks();});// 清空所有任务clearTasksButton.addEventListener('click', () => {taskList.innerHTML = '';saveTasks();});// 初始化加载任务loadTasks();
});

功能亮点

1. 动态交互

用户可以实时添加任务,任务状态和列表内容即时更新,提升了用户体验。

2. 数据持久化

通过localStorage,任务数据可在页面刷新后保留,为用户提供连续的使用体验。

3. 任务操作

用户可单独标记完成、删除任务,或一键清空所有任务,实现灵活的任务管理。


运行效果

  1. 打开页面后,可以在输入框中输入任务名称。
  2. 点击“添加任务”按钮,任务将显示在列表中。
  3. 点击任务可以切换完成状态,已完成任务会以划线标记。
  4. 点击“删除”按钮可移除单个任务。
  5. 点击“清空所有任务”按钮可清空整个任务列表。
  6. 刷新页面后,任务数据依然可见。
  7. 运行结果如图

优化与扩展

1. 搜索功能

可以为任务列表添加搜索框,实时筛选任务。

2. 分类管理

支持对任务进行分类,例如工作、学习、生活等。

3. 响应式设计

优化页面布局,使其在移动设备上同样具有良好的用户体验。

4. 数据库集成

将任务数据存储在数据库中,实现跨设备同步。


总结

通过本案例,你学会了如何使用JavaScript实现动态任务列表功能,包括事件监听、DOM操作和数据持久化。该案例为初学者提供了全面的实践机会,同时也可以作为更复杂应用的基础。希望本案例能帮助你进一步提升JavaScript开发技能,打造更强大、更实用的网页应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/891139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】索引 面试题

文章目录 适合创建索引的情况创建索引的注意事项MySQL中不适合创建索引的情况索引失效的常见情况 索引定义与作用 索引是帮助MySQL高效获取数据的有序数据结构&#xff0c;通过维护特定查找算法的数据结构&#xff08;如B树&#xff09;&#xff0c;以某种方式引用数据&#xf…

使用Excel制作通达信自定义“序列数据“

序列数据的视频教程演示 Excel制作通达信自定义序列数据 1.序列数据的制作方法&#xff1a;删掉没有用的数据&#xff08;行与列&#xff09;和股代码格式处理&#xff0c;是和外部数据的制作方法是相同&#xff0c;自己上面看历史博文。只需要判断一下&#xff0c;股代码跟随的…

【ELK】ES单节点升级为集群模式--太细了!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言准备工作1. 查看现状【单节点】2. 原节点改集群模式3. 改es配置文件&#xff0c;增加集群相关配置项4. *改docker映射的端口* 启动新节点5. docker-compose起一…

关于区块链的安全和隐私

背景 区块链技术在近年来发展迅速&#xff0c;被认为是安全计算的突破&#xff0c;但其安全和隐私问题在不同应用中的部署仍处于争论焦点。 目的 对区块链的安全和隐私进行全面综述&#xff0c;帮助读者深入了解区块链的相关概念、属性、技术和系统。 结构 首先介绍区块链…

webauthn介绍及应用

1、webauthn介绍 官网&#xff1a;https://webauthn.io/ 1.1、什么是webauthn&#xff1f; webauthn即Web Authentication&#xff0c;是一个符合W3C标准的Web认证规范。它通过公私钥加密技术&#xff0c;实现无密码认证&#xff0c;用户仅需通过pin码、指纹、面部识别、usb …

ElasticSearch如何做性能优化?

大家好&#xff0c;我是锋哥。今天分享关于【ElasticSearch如何做性能优化?】面试题。希望对大家有帮助&#xff1b; ElasticSearch如何做性能优化? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Elasticsearch 是一个开源的分布式搜索引擎&#xff0c;广泛用于…

瑞芯微全新芯片平台RK3506优势详解,高集成低功耗,为工业而生 触觉智能测评

RK3506是瑞芯微Rockchip在2024年第四季度全新推出的Arm嵌入式芯片平台&#xff0c;三核Cortex-A7单核Cortex-M0多核异构设计&#xff0c;CPU频率达1.5Ghz, M0 MCU为200Mhz。 而RK3506芯片平台下的工业级芯片型号RK3506J&#xff0c;具备-40-85℃的工业宽温性能、发热量小&#…

Docker 安装全攻略:从入门到上手

Docker 安装全攻略&#xff1a;从入门到上手 在当今的软件开发与部署领域&#xff0c;Docker 已经成为了一项不可或缺的关键技术。它能够将应用程序及其依赖项打包成轻量级、可移植的容器&#xff0c;极大地简化了开发、测试和部署的流程。本文将详细讲解在不同操作系统下 Doc…

【 Sonarqube】可视化Java项目单元测试覆盖率统计框架搭建

一、项目背景&#xff1a; 一个小公司的朋友反应他们那边Java项目单元测试有&#xff0c;但还没有可视化统计覆盖率数据&#xff0c;没法统计就不能直观的看到单测的覆盖率&#xff0c;Java的覆盖率统计框架还是比较成熟&#xff0c;部署起来也不是很难&#xff0c;下面我们逐…

PTA数据结构编程题7-1最大子列和问题

我参考的B站up的思路 题目 题目链接 给定K个整数组成的序列{ N 1 ​ , N 2 ​ , …, N K ​ }&#xff0c;“连续子列”被定义为{ N i ​ , N i1 ​ , …, N j ​ }&#xff0c;其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 1…

jangow-01-1.0.1靶机

靶机 ip&#xff1a;192.168.152.155 把靶机的网络模式调成和攻击机kali一样的网络模式&#xff0c;我的kali是NAT模式, 在系统启动时(长按shift键)直到显示以下界面 ,我们选第二个&#xff0c;按回车。 继续选择第二个&#xff0c;这次按 e 进入编辑页面 接下来&#xff0c;…

在Windows上读写Linux磁盘镜像的一种方法

背景 嵌入式开发中&#xff0c;经常会把系统的Linux磁盘镜像保存到Windows上&#xff0c;以便上传到网盘备份或发送给工厂&#xff0c;但是如果想读取/修改镜像中的某个文件&#xff0c;一般有2种方案&#xff1a; 直接访问 就是用虚拟磁盘软件将镜像文件挂载成磁盘&#xf…

apisix的hmac-auth认证

目录 1、apisix的hmac认证Authorization头信息 2、signature的lua生成源码 3、java生成签证的简单示例 4、postman调用如下 apisix的hmac-auth认证&#xff0c;介绍可以看官方文档 hmac-auth | Apache APISIX -- Cloud-Native API Gateway 照着官方文档&#xff0c;发现生…

大数据导论汇总

第一章 作业 2、请阐述把数据变得可用需要经过哪几个步骤. 答&#xff1a;一共要经历三个步骤&#xff1a;数据清洗、数据管理、数据分析。 第一步&#xff1a;数据清洗。使用数据的第一步通常是数据清洗&#xff0c;也就是把数据变成一种可用的状态。这个过程需要借助工具去…

React 组件的通信方式

在 React 应用开发中&#xff0c;组件之间的通信是构建复杂用户界面和交互逻辑的关键。正确地实现组件通信能够让我们的应用更加灵活和易于维护。以下是几种常见的 React组件通信方式。 一、父子组件通信 1. 通过 props 传递数据&#xff08;父组件向子组件传递数据&#xff0…

【JDBC】转账案例

回顾 使用工具类查询表 需求&#xff1a; 查询student表的所有数据&#xff0c;把数据封装到一个集合中 数据准备 #创建表 CREATE TABLE student( sid INT, name VARCHAR(100), age INT, sex VARCHAR(100) ) #插入数据 INSERT INTO student VALUES(1,张三,18,女),(2…

dede-cms关于shell漏洞

一.文件式管理器 1.新建文件 新建一个php文件&#xff0c;内容写个php脚本语言 访问&#xff0c;可以运行 2.文件上传 上传一个php文件&#xff0c;内容同样写一个php代码 访问&#xff0c;运行成功 二.模块-广告管理 来到模块-广告管理——>增加一个新广告 在这里试一下…

k-Means聚类算法 HNUST【数据分析技术】(2025)

1.理论知识 K-means算法&#xff0c;又称为k均值算法。K-means算法中的k表示的是聚类为k个簇&#xff0c;means代表取每一个聚类中数据值的均值作为该簇的中心&#xff0c;或者称为质心&#xff0c;即用每一个的类的质心对该簇进行描述。K-Means算法接受参数K&#xff1b;然后将…

Opencv之对图片的处理和运算

Opencv实现对图片的处理和修改 目录 Opencv实现对图片的处理和修改灰度图读取灰度图转换灰度图 RBG图单通道图方法一方法二 单通道图显色合并单通道图 图片截取图片打码图片组合缩放格式1格式2 图像运算图像ma[m:n,x:y]b[m1:n1,x1:y1] add加权运算 灰度图 读取灰度图 imread(‘…

【算法思想04】二分查找

文章目录 1. 基本思想与实现1.1 基本思想1.2 值m的计算方式1.3 查找失败时的返回值1.4 代码实现1.4.1 循环1.4.2 递归 2. 性能分析2.1 时间复杂度2.2 与顺序查找的效率比较 3. 应用3.1 前提3.2 变体3.2.1 最基本的二分查找3.2.2 寻找左侧边界的二分查找3.2.3 寻找右侧边界的二分…