当前位置:网站首页>【代码案例】网页版表白墙 & 待办事项 (包含完整源码)
【代码案例】网页版表白墙 & 待办事项 (包含完整源码)
2022-07-23 03:41:00 【Stella_sss】
嗨~~今天给大家分享分享两个使用html、css 和 js 实现的网页案例。分别是表白墙和待办事项。
表白墙
1. 创建内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>表白墙</title>
</head>
<body>
<!-- 创建表白墙 -->
<h1>表白墙</h1>
<p>输入后点击提交,会将信息显示在表格中</p>
<span>谁:</span>
<input type="text">
<span>对谁:</span>
<input type="text">
<span>说什么:</span>
<input type="text">
<input type="button" value="提交">
</body>
</html>

2. 调整样式
上面的效果还不太好看,所以我们给它调整一下样式。
首先将各个html 的标签分类放好。如下:
<div class="container">
<h1>表白墙</h1>
<p>输入后点击提交,会将信息显示在表格中</p>
<div class="row">
<span>谁:</span>
<input class="edit" type="text">
</div>
<div class="row">
<span>对谁:</span>
<input class="edit" type="text">
</div>
<div class="row">
<span>说什么:</span>
<input class="edit" type="text">
</div>
<div class="row">
<input type="button" value="提交" class="submit">
</div>
</div>
然后再使用style标签和CSS选择器进行样式的调整。
<!-- 调整样式 -->
<style>
* {
margin: 0;
padding: 0;
}
.container {
width: 400px;
margin: 0 auto;
}
h1 {
text-align: center;
padding: 20px 0;
}
p {
color: #666;
text-align: center;
font-size: 14px;
padding: 10px 0;
}
.row {
height: 40px;
display: flex;
justify-content: center;
align-items: center;
}
span {
width: 100px;
line-height: 40px;
}
.edit {
width: 200px;
height: 30px;
}
.submit {
width: 304px;
height: 40px;
color: white;
background-color: orange;
border: none;
}
</style>

3. 实现提交
<!-- 实现提交 -->
<script>
// 给点击按钮注册点击事件
var submit = document.querySelector('.submit');
submit.onclick = function() {
//1. 获取到编辑框的内容
var edits = document.querySelectorAll('.edit');
var from = edits[0].value;
var to = edits[1].value;
var message = edits[2].value;
console.log(from + "," + to + "," + message);
if (from == '' || to == '' || message == '') {
return;
}
//2. 构造新元素
var row = document.createElement('div');
row.className = 'row';
row.innerHTML = from + '对' + to + '说:' + message;
//3. 添加新元素
var container = document.querySelector('.container');
container.appendChild(row);
//4. 同时清理之前输入框的内容
for (var i = 0; i < 3; i++) {
edits[i].value = '';
}
}
</script>
尝试提交一个:
最终样式

待办事项
1. 添加内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>我的待办清单</title>
</head>
<body>
<div class="nav">
<input type="text" class="task">
<button>新建任务</button>
</div>
<div class="container">
<div class="todo">
<h3>未完成</h3>
</div>
<div class="done">
<h3>已完成</h3>
</div>
</div>
</body>
</html>

这里非常丑陋对吧!所以我们要对其进行调整~
2. 调整样式
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.container {
width: 800px;
margin: 0 auto;
display: flex;
}
.todo, .done {
width: 50%;
height: 100%;
}
.container h3 {
height: 50px;
text-align: center;
line-height: 50px;
background-color: #333;
color: #fff;
}
.nav {
width: 800px;
height: 100px;
margin: 0 auto;
display: flex;
align-items: center;
}
.nav input {
width: 600px;
height: 50px;
}
.nav button {
width: 200px;
height: 50px;
border: none;
background-color: orange;
color: #fff;
}
</style>
实现功能
新增待办事项
<!-- 实现功能 -->
<script>
// 新增待办事项
var addTaskBtn = document.querySelector('.nav button');
addTaskBtn.onclick = function() {
//1. 获取任务内容
var input = document.querySelector('.nav input');
var task = input.value;
//2. 根据任务内容创建新元素
var row = document.createElement('div');
row.className = 'row';
var checkbox = document.createElement('input');
checkbox.type = 'checkbox';
var span = document.createElement('span');
span.innerHTML = task;
var button = document.createElement('button');
button.innerHTML = '删除';
row.appendChild(checkbox);
row.appendChild(span);
row.appendChild(button);
//3. 将新节点放到未完成列表中
var todo = document.querySelector('.todo');
todo.appendChild(row);
//4. 清空输入框中的内容
input.value = '';
}
</script>

可以看到,新增加的布局挤在了一起,因此我们对其样式进行调整,可以直接在上面的 style 标签内对样式进行设置。
.row {
height: 50px;
display: flex;
align-items: center;
}
.row input {
margin: 0 10px;
}
.row span {
width: 300px;
}
.row button {
width: 50px;
height: 40px;
}

更改后,整体看起来更加舒适。
已完成事项
注意,这里应该是当用户点击未完成事项前面的复选框时,页面再将元素放到已完成事项中。
// 此处的代码仍然是写在addTaskBtn的点击事件中
// 已完成
// 1.给checkbox注册点击事件
checkbox.onclick = function() {
// 获取父元素
var row = this.parentNode;
// 先出发checked为true,在调用onclick函数
if (this.checked) {
var target = document.querySelector('.done');
} else {
var target = document.querySelector('.todo');
}
target.appendChild(row);
}

可以看到,点击待办事项前面的复选框之后,事项移动到了已完成中,再点击已完成中的复选框,则事项又回到未完成列表中。

删除任务
最后,我们给事项后面的删除按注册点击事件,完成删除任务的功能。
同样是直接将代码添加在在addTaskBtn的点击事件中。
// 删除任务
button.onclick = function() {
var row = this.parentNode;
var grandParent = row.parentNode;
grandParent.removeChild(row);
}
效果就留给大家自己去试试吧~
最后
今天的两个案例就分享到这里啦~
相信这对你来说一点都不难!
通过这两个案例的练习,你一定对前面介绍的内容有了掌握得更加熟练了!
最后,完整代码已经上传到gitee啦~
如果对于前面分段给出的代码不太理解,欢迎到我的码云上自取啦!
如果你觉得这篇文章对你有帮助,记得给我一键三连噢~~
边栏推荐
- How to add an operator in ONEFLOW
- C语言柔性数组
- "Lost wake up problem" in multithreading | why do wait() and notify() need to be used with the synchronized keyword?
- Is it safe for Huatai Securities to open an account online? Is it true
- 什么是Per-Title编码?
- EasyCVR平台CGO回放回调参数缺失导致设备录像无法播放,该如何解决?
- redis分片集群如何搭建与使用
- 22、wpf之Combobox使用小记
- L-半胱氨酸修饰的金纳米粒子(Cys-GNPs)和牛血清白蛋白/生物素化白蛋白纳米粒
- 新的项目实现的技术点如有需要可以指导
猜你喜欢

What is per title encoding?

Decompile the jar package / class file / modify the jar package using the decompile plug-in of idea

1. Assignment statement

【C语言基础】15 位运算

C language file operation

Learn and understand Architecture Design from business development

Data middle office, Bi business interview (III): how to choose the right interviewees

C language flexible array

九张图纵观加密市场周期规律

How to build and use redis fragment cluster
随机推荐
【300+精选大厂面试题持续分享】大数据运维尖刀面试题专栏(七)
GNN third party Library: pyg (pytorch geometric) [the library based on pytorch can help users quickly build and train their own graph neural network model] [deepwalk, line, GCN, gat, etc.]
Langue C - quelques exercices classiques de langue C
leetcode-99.恢复二叉搜索树
Learn and understand Architecture Design from business development
mysql三表查询问题
金仓数据库 KingbaseES SQL 语言参考手册 (8. 函数(一))
STM32——输入捕获实验
网络通信原理与IP地址的分配原理,网络七层由下往上分别为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层
A brief tutorial for soft exam system architecture designer | requirements engineering
What is the experience of writing concurrent tool classes (semaphore, cyclicbarrier, countdownlatch) by yourself in line 30?
L-cysteine modified gold nanoparticles (Cys GNPs) and bovine serum albumin / biotinylated albumin nanoparticles
宇视NVR设备接入EasyCVR平台,离线后无法上线该如何解决?
[300 + selected interview questions from big companies continued to share] big data operation and maintenance sharp knife interview question column (VII)
"Lost wake up problem" in multithreading | why do wait() and notify() need to be used with the synchronized keyword?
Self organization is the two-way rush of managers and members
Arcgis 计算两个栅格图层相关性
缓存穿透、缓存击穿、缓存雪崩
内存屏障中的读写屏障——并发问题
[basics of C language] 14 file, declaration and format input and output