JavaScript 网页设计案例:互动留言板

目录

 

案例:互动留言板

1. 初始HTML结构

2. CSS 样式

3. JavaScript 功能实现

4. JavaScript 实现细节解析

4.1 DOMContentLoaded 事件

4.2 获取 DOM 元素

4.3 动态创建和添加留言

4.4 删除和编辑功能

5. 留言板功能扩展与优化

5.1 键盘快捷键

5.2 本地存储功能

技术总结表

总结


 

  JavaScript 是现代网页设计中的关键语言,它能够让网页实现丰富的动态交互和功能。本文将通过一个互动留言板的案例,展示如何使用 JavaScript 来进行网页设计。我们将从 HTML 结构的定义,到 JavaScript 实现留言的添加、删除、编辑等功能,全面讲解如何用 JavaScript 构建一个简易但实用的互动网页。

案例:互动留言板

  我们将设计一个简单的互动留言板,用户可以输入留言内容,点击提交后会显示在留言列表中。留言列表支持实时编辑和删除功能。这一案例主要涉及到 DOM 操作、事件处理、元素动态生成等 JavaScript 基础知识。


1. 初始HTML结构

  首先,我们需要定义网页的基本 HTML 结构,包括一个文本输入框、提交按钮和一个显示留言的区域。HTML 提供了网页的基础结构,而动态交互部分将通过 JavaScript 实现。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Interactive Message Board</title><style>body {font-family: Arial, sans-serif;margin: 20px;}.container {max-width: 600px;margin: auto;}h1 {text-align: center;}#message-list {list-style: none;padding: 0;}#message-list li {background: #f4f4f4;margin: 10px 0;padding: 10px;border: 1px solid #ddd;display: flex;justify-content: space-between;align-items: center;}button {margin-left: 10px;cursor: pointer;}</style>
</head>
<body><div class="container"><h1>留言板</h1><input type="text" id="message-input" placeholder="输入您的留言"><button id="submit-button">提交</button><ul id="message-list"></ul></div><script src="script.js"></script>
</body>
</html>

2. CSS 样式

  简单的样式设计使页面更直观易用。每条留言以列表项 (<li>) 显示,并附带删除和编辑按钮。我们使用了基础的 CSS 来定义输入框、按钮和列表的样式,确保用户界面简洁、美观。

body {font-family: Arial, sans-serif;margin: 20px;
}
.container {max-width: 600px;margin: auto;
}
h1 {text-align: center;
}
#message-list {list-style: none;padding: 0;
}
#message-list li {background: #f4f4f4;margin: 10px 0;padding: 10px;border: 1px solid #ddd;display: flex;justify-content: space-between;align-items: center;
}
button {margin-left: 10px;cursor: pointer;
}

3. JavaScript 功能实现

  下面是我们实现留言板动态功能的核心部分,即 JavaScript 代码。主要功能包括:

  • 获取用户输入的留言。
  • 动态生成新的留言并插入列表。
  • 实现删除留言和编辑留言功能。
document.addEventListener('DOMContentLoaded', () => {const messageInput = document.getElementById('message-input');const submitButton = document.getElementById('submit-button');const messageList = document.getElementById('message-list');// 点击“提交”按钮,提交留言submitButton.addEventListener('click', () => {const messageText = messageInput.value.trim();  // 去除输入前后的空白if (messageText === '') {alert('留言不能为空!');return;}addMessage(messageText);  // 添加留言到列表messageInput.value = '';  // 清空输入框});// 添加留言到列表函数function addMessage(text) {const li = document.createElement('li');  // 创建<li>元素li.innerHTML = `<span>${text}</span><div><button class="edit-btn">编辑</button><button class="delete-btn">删除</button></div>`;messageList.appendChild(li);  // 将新留言添加到列表// 删除按钮事件li.querySelector('.delete-btn').addEventListener('click', () => {messageList.removeChild(li);  // 从列表中删除该留言});// 编辑按钮事件li.querySelector('.edit-btn').addEventListener('click', () => {const newMessage = prompt('修改您的留言:', text);  // 弹出对话框输入新内容if (newMessage !== null && newMessage.trim() !== '') {li.querySelector('span').textContent = newMessage.trim();  // 更新留言内容}});}
});

4. JavaScript 实现细节解析

4.1 DOMContentLoaded 事件

  DOMContentLoaded 确保页面所有的 DOM 元素都已经加载完成,方便我们获取和操作页面上的元素。

document.addEventListener('DOMContentLoaded', () => {// 确保 DOM 元素加载完毕后执行的代码
});

4.2 获取 DOM 元素

  通过 document.getElementById() 获取输入框、提交按钮以及用于显示留言的 <ul> 列表区域。这些元素是后续操作的目标对象。

 
const messageInput = document.getElementById('message-input');
const submitButton = document.getElementById('submit-button');
const messageList = document.getElementById('message-list');

 

4.3 动态创建和添加留言

  用户点击“提交”按钮后,JavaScript 会创建一个新的列表项 (<li>),其中包含用户输入的留言内容以及编辑和删除按钮。我们通过 createElement() 创建 DOM 元素,并使用 appendChild() 将其添加到列表中。

 
const li = document.createElement('li');  // 创建 <li> 元素
li.innerHTML = `<span>${text}</span> ...`;  // 设置留言内容
messageList.appendChild(li);  // 将 <li> 添加到列表

 

4.4 删除和编辑功能

  每条留言都有“删除”和“编辑”按钮:

  • 删除功能:当用户点击“删除”按钮时,使用 removeChild() 将该留言从列表中移除。
  • 编辑功能:点击“编辑”按钮时,弹出 prompt 对话框,允许用户输入新的内容并更新留言。
 
li.querySelector('.delete-btn').addEventListener('click', () => {messageList.removeChild(li);  // 删除该留言
});li.querySelector('.edit-btn').addEventListener('click', () => {const newMessage = prompt('修改您的留言:', text);  // 输入新留言内容if (newMessage !== null && newMessage.trim() !== '') {li.querySelector('span').textContent = newMessage.trim();  // 更新内容}
});

 

5. 留言板功能扩展与优化

  目前的留言板实现了基本的功能,但还有一些可以改进和扩展的地方:

5.1 键盘快捷键

  为提升用户体验,可以增加键盘快捷键功能,使用户按下 Enter 键后直接提交留言。可以在 input 元素上监听 keypress 事件:

 
messageInput.addEventListener('keypress', (e) => {if (e.key === 'Enter') {submitButton.click();  // 模拟点击“提交”按钮}
});

 

5.2 本地存储功能

  为了防止用户刷新页面后留言丢失,可以使用浏览器的 localStorage 实现留言的本地存储。每当用户添加或删除留言时,更新 localStorage 中的数据。

 
localStorage.setItem('messages', JSON.stringify(messages));  // 保存到本地存储
const storedMessages = JSON.parse(localStorage.getItem('messages'));  // 从本地存储读取

技术总结表

技术/方法作用示例代码
getElementById()获取 DOM 元素document.getElementById('element')
addEventListener()为元素添加事件监听器element.addEventListener('click', handler)
createElement()动态创建新的 DOM 元素document.createElement('li')
appendChild()将新创建的元素添加到父元素parent.appendChild(child)
removeChild()从父元素中删除子元素parent.removeChild(child)
prompt()弹出一个对话框,让用户输入新内容prompt('请输入内容')
innerHTML设置或获取元素的 HTML 内容element.innerHTML = '<span>内容</span>'
trim()去掉字符串前后的空白message.trim()
localStorage浏览器本地存储,保存数据以便页面刷新后仍保留localStorage.setItem('key', 'value')

总结

  这个互动留言板的设计展示了如何通过JavaScript 操作 DOM 元素,动态生成内容并与用户交互。通过 JavaScript,可以轻松地为网页添加功能,如表单提交、动态列表创建、删除和修改等。同时,利用 localStorage 实现了简单的数据持久化,这为网页的增强型设计提供了更多可能性。

  这只是 JavaScript 在网页开发中众多应用的一个小例子,随着对 JavaScript 更深入的学习和实践,你可以构建出更加复杂和实用的动态网页功能。

a1139b7ffd9c428b9347f9b283b23f27.jpeg

 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

互联网前端之 CSS 常见属性与三层结构

目录 现在互联网前端三层 CSS 常见属性 关注作者微信公众号&#xff0c;开启探索更多 CSS 知识的精彩之旅。在这里&#xff0c;你将收获丰富的CSS专业内容&#xff0c;深入了解这一网页开发语言的奥秘&#xff0c;不断拓展你的知识边界&#xff0c;提升技能水平。快来关注吧&…

窗户检测系统源码分享

窗户检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

一文读懂DaemonSet以及实践攻略

一文读懂DaemonSet以及实践攻略 目录 1 概念 1.1 什么是DaemonSet1.2 DaemonSet 的工作机制1.3 适用场景1.4 DaemonSet 与 Deployment 的区别1.5 DaemonSet的通信模式 2 实践案例&#xff1a;部署和更新 Fluentd 日志收集器 2.1 部署Fluentd DaemonSet 2.1.1 定义Fluentd Dae…

2012年408考研真题-数据结构

8.【2012统考真题】求整数n(n≥0)的阶乘的算法如下&#xff0c;其时间复杂度是(&#xff09;。 int fact(int n){ if(n<1) return 1; return n*fact (n-1); } A. O(log2n) B. O(n) C. O(nlog2n) D. O(n^2) 解析&#xff1a; 观察代码&#xff0c;我们不…

【代码】使用c#实现串口通信的基础模板

一、分享代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;using System.IO.Ports; using…

SAP中BW与OFFICE 64位兼容性问题解决实例

近期遇到一个BW与OFFICE的兼容性问题。新电脑(WIN11)安装使用SAP正常&#xff0c;安装OFFICE 2016 64位版时&#xff0c;BEx Aanlysis无法打开(没有提示&#xff0c;下位框不出现)。安装OFFICE 2016 32位版时&#xff0c;BW的Aanlysis可正常使用。 这个BEx Aanlysis我理解是SA…

链表--(1)链表的概念

前言引入 之前我们学习了数组这一概念,使用数组可以在编程时增加程序的灵活性。但在c语言中不允许定义动态数组的类型也不能随意调整数组的大小,往往会导致内存空间的浪费。由此我们推出链表。链表是动态进行内存分配的一种结构,它可以随时为其结点分配需要的存储空间也方便…

爬虫框架之Scrapy介绍——高效方便

# 近年来大数据分析、数据可视化和python等课程逐渐在大学各个学科中铺展开来&#xff0c;这样一来爬虫在平时小作业和期中、期末报告中出现的频率也逐渐变高。那么单一的使用requests库&#xff0c;自己从头到尾的的设计&#xff0c;考虑数据提取、线程管理和数据存储等方方面…

干货:分享6款ai论文写作助手,一键生成原创论文(步骤+工具)

写一篇论文是一个复杂的过程&#xff0c;涉及多个步骤&#xff0c;包括选题、研究、撰写、编辑和校对。AI可以在其中的一些步骤中提供帮助&#xff0c;但最终的论文还是需要人类作者的深入思考和创造性输入。以下是六款值得推荐的AI论文写作助手&#xff0c;其中特别推荐千笔-A…

前端开发之原型模式

介绍 原型模式本质就是借用一个已有的实例做原型&#xff0c;在这原型基础上快速复制出一个和原型一样的一个对象。 class CloneDemo {name clone democlone(): CloneDemo {return new CloneDemo()} } 原型原型链 函数&#xff08;class&#xff09;都有显示原型 prototyp…

Redis-01 入门和十大数据类型

Redis支持两种持久化方式&#xff1a;RDB持久化和AOF持久化。 1.RDB持久化是将Redis的数据以快照的形式保存在磁盘上&#xff0c;可以手动触发或通过配置文件设置定时触发。RDB保存的是Redis在某个时间点上的数据快照&#xff0c;可以通过恢复RDB文件来恢复数据。 2.AOF持久化…

深蓝学院-- 量产自动驾驶中的规划控制算法 小鹏

文章目录 0. 前言1.发展现状2.行车功能中难点问题及解决思路问题1&#xff1a;车道居中辅助&#xff0c;画龙&#xff0c;蛇行问题。问题2&#xff1a;外界环境扰动以及传感器信息缺失下的横向控制难点问题3&#xff1a;大坡度平稳停车 3. 泊车功能中难点问题及解决思路问题1&a…

尚品汇-秒杀下单实现-页面轮询查询订单状态(五十三)

目录&#xff1a; &#xff08;1&#xff09;整合秒杀业务 &#xff08;2&#xff09;秒杀下单 &#xff08;3&#xff09;秒杀下单监听 &#xff08;4&#xff09;页面轮询接口 &#xff08;1&#xff09;整合秒杀业务 秒杀的主要目的就是获取一个下单资格&#xff0c;拥…

【iOS】——JSONModel源码

JSONModel用法 基本用法 将传入的字典转换成模型&#xff1a; 首先定义模型类&#xff1a; interface Person : JSONModel property (nonatomic, copy) NSString *name; property (nonatomic, copy) NSString *sex; property (nonatomic, assign) NSInteger age; end接…

索引的介绍

目录 1.索引的介绍 1.1 什么是索引 1.2 为什么要使用索引 2.索引应该选择哪种数据结构 3.MYSQL中的页 3.1为什么要使用页 3.2页文件头和页文件尾 3.3 页主体 3.3页目录 3.4数据页头 4.B在MYSQL索引中的应用 4.1计算三层树高的B树可以存放多少条记录 5.索引分类 5.1 主…

居中左右对齐且加粗的蓝色文本

//test.html <!DOCTYPE html> <html> <head> <title>我的网页</title> <link rel"stylesheet" href"styles.css"> </head> <body> <p class"left-text">这是居左对齐且加粗的…

Element走马灯组件循环播放两个页面是方向不一致

摘要&#xff1a;使用Carousel 走马灯循环播放同一类型的图片、文字等内容&#xff0c;会在循环内容为两组是出现下图 [1]中的现象。本文记录下如何解决 之前项目遇到过一次这个问题&#xff0c;由于indicator-position 指示器不用显示&#xff0c;则判断内容长度为2时&#xf…

springboot通过tomcat部署项目(包含jar、war两种方式,迄今为止全网最详细!2024更新..建议收藏,教学!万字长文!)

本博客参考的所有文章均已在结尾声明&#xff01;&#xff01;&#xff01; 在 Spring Boot 项目中&#xff0c;有两种常见的部署方式&#xff1a; 1、使用 Spring Boot 自带的 内置 Tomcat&#xff0c;将项目打包为 jar 并直接运行。 2、使用 外置 Tomcat&#xff0c;将项目打…

【电路笔记】-运算放大器比较器

运算放大器比较器 文章目录 运算放大器比较器1、概述2、表示2.1 同相比较器2.2 反相比较器3、临界点转换4、施密特触发器4.1 同相触发器4.2 反相触发器4.3 应用5、总结1、概述 在前面的大多数运算放大器文章中,电路都有一个到反相输入的反馈环路。 这种设计是最常见的,因为它…

海外社媒干货:Twitter的特点及运营策略

当你在海外社交媒体上运营&#xff0c;了解不同平台的特点和具体实践是非常重要的。本期让小编来为你介绍推特&#xff08;Twitter&#xff09;以及一些相关的运营干货&#xff1a; &#xff08;图片源于网络&#xff09; Twitter简介 推特是一家美国社交网络及微博客服务的公…