使用前端三剑客实现一个备忘录

ops/2024/10/20 3:54:26/

一,界面介绍

这个备忘录的界面效果如下:

可以实现任务的增删,并且在任务被勾选后会被放到已完成的下面。

示例:

(1),增加一个任务

(2),勾选任务

 

(3),删除任务

 二,代码实现

1,使用html进行界面设计

我们先将这个界面分为两部分,分别是第一部分:

 第二部分:

 设计的框架代码如下:

    <div class="nov"><input type="text"><button>新建事项</button></div><div class="container"><div class="todo"><div class="row"><h3>已完成</h3><span>吃饭</span><button>删除</button></div></div><div class="done"><h3>未完成</h3></div></div>

 效果如下:

2,使用css进行样式设计

<style>//将所元素的内边距和外边距设置为0px,并且设置盒子大小为原大小*{margin: 0px;padding: 0px;box-sizing: border-box;}//设置.nav类的大小和显示方式为flexbox,并且垂直居中,上边距为100px.nav{width: 800px;height: 100px;margin: 0px auto;padding: 0px;display: flex;align-items: center;margin-top: 100px;}//设置input的大小和边距,以及圆角.nav input{width: 600px;height: 60px;margin: 0px auto;border-radius: 0px;}//设置button的大小和圆角以及背景颜色和字体颜色.nav button{width: 200px;height: 60px;margin: 0px auto;border-radius: 0px;background-color: orange;color: white;}//设置按钮点击后的动作.nav button:active{color: blue;background-color: red;}//设置container类的样式.container{width: 800px;height: 60px;margin: 0px auto;display: flex;text-align: center;}h3{width: 400px;height: 60px;color: white;padding-top: 15px;background-color: black;}.row{height: 50px;display: flex;align-items: center;}.row input{width: 20px;margin-right: 0px;}.row span{width: 200px;margin-left: 0px;padding-left: 0px;text-align: left;}.row button{width: 40px;height: 30px;}.row button:active{background-color: red;color: blueviolet;}</style>

效果:

3,使用js进行动态效果展示

使用js就是要实现添加和删除,以及在事件被勾选后放到已完成队列当中的功能。

1,添加事件到todo盒子中
function newObj(){//先得到输入框内的信息let input = document.querySelector('.nav input')console.dir(input)//为了调试let input_info = input.value//输入框没有内容就不执行下面的代码if(input_info=="") return//创建div盒子let div = document.createElement('div')//创建复选框let check_button = document.createElement('input')check_button.type='checkbox'console.log(check_button)//创建spanlet span = document.createElement('span')span.innerHTML = input_info;console.log(span.innerHTML)//创建删除按钮let button = document.createElement('button')button.innerHTML="删除"//整合到div中div.appendChild(check_button)div.appendChild(span)div.appendChild(button)//设置div的样式div.className="row"//将div放到todo下面let todo = document.querySelector('.todo')todo.appendChild(div)}
2,设置删除事件
              //先找到所有的删除按钮let buttons = document.querySelectorAll(".row button")console.log(buttons)//遍历按钮,让这些删除按钮绑定上删除事件for(i=0;i<buttons.length;i++){buttons[i].onclick=function(){  //找到row divlet parent = this.parentNode//找到todo divlet grand = parent.parentNode//在todo div中删除rowgrand.removeChild(parent)}}
3,未完成事件被勾选后放到已完成事件下面
            //遍历复选框for(i = 0;i<check_buttons.length;i++){//绑定事件check_buttons[i].onclick=function(){let row = this.parentNode//插入者let target//判断插入者if(this.checked){target = document.querySelector('.done')}else{target=document.querySelector('.todo')}//插入target.appendChild(row)}}

三,所有代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><style>*{margin: 0px;padding: 0px;box-sizing: border-box;}.nav{width: 800px;height: 100px;margin: 0px auto;padding: 0px;display: flex;align-items: center;margin-top: 100px;}.nav input{width: 600px;height: 60px;margin: 0px auto;border-radius: 0px;}.nav button{width: 200px;height: 60px;margin: 0px auto;border-radius: 0px;background-color: orange;color: white;}.nav button:active{color: blue;background-color: red;}.container{width: 800px;height: 60px;margin: 0px auto;display: flex;text-align: center;}h3{width: 400px;height: 60px;color: white;padding-top: 15px;background-color: black;}.row{height: 50px;display: flex;align-items: center;}.row input{width: 20px;margin-right: 0px;}.row span{width: 200px;margin-left: 0px;padding-left: 0px;text-align: left;}.row button{width: 40px;height: 30px;}.row button:active{background-color: red;color: blueviolet;}</style><body><div class="nav"><input type="text"><button onclick="newObj()">新建事项</button></div><div class="container"><div class="todo"><h3>未完成</h3><div class="row"><input type="checkbox"><span>吃饭</span><button>删除</button></div></div><div class="done"><h3>已完成</h3></div></div></body><script>function newObj(){//先得到输入框内的信息let input = document.querySelector('.nav input')console.dir(input)//为了调试let input_info = input.valueinput.value=""if(input_info=="") return//创建div盒子let div = document.createElement('div')//创建复选框let check_button = document.createElement('input')check_button.type='checkbox'console.log(check_button)//创建spanlet span = document.createElement('span')span.innerHTML = input_info;console.log(span.innerHTML)//创建删除按钮let button = document.createElement('button')button.innerHTML="删除"//整合到div中div.appendChild(check_button)div.appendChild(span)div.appendChild(button)//设置div的样式div.className="row"//将div放到todo下面let todo = document.querySelector('.todo')todo.appendChild(div)//先找到所有的删除按钮let buttons = document.querySelectorAll(".row button")console.log(buttons)//遍历按钮,让这些删除按钮绑定上删除事件for(i=0;i<buttons.length;i++){buttons[i].onclick=function(){  //找到row divlet parent = this.parentNode//找到todo divlet grand = parent.parentNode//在todo div中删除rowgrand.removeChild(parent)}}//找到所有的复选框let check_buttons = document.querySelectorAll('.row input')//遍历复选框,看看是否被勾选for(i = 0;i<check_buttons.length;i++){check_buttons[i].onclick=function(){let row = this.parentNodelet targetif(this.checked){target = document.querySelector('.done')}else{target=document.querySelector('.todo')}target.appendChild(row)}}}
</script>
</html>


http://www.ppmy.cn/ops/122546.html

相关文章

蓝桥杯【物联网】零基础到国奖之路:十四. 扩展模块之温湿度传感器

蓝桥杯【物联网】零基础到国奖之路:十四. 扩展模块之温湿度传感器 第一节 硬件解读第二节 CubeMX配置第三节 模版代码 第一节 硬件解读 STS3x-DIS是sensirion新一代温湿度传感器。精度较高&#xff0c;速度较快。SHT3x内部集成了湿度传感器和温度传感器&#xff0c;ADC采样输入…

wordpress父分类和归档页调用子分类名称和链接

在WordPress中&#xff0c;要在父分类和归档页调用子分类的名称和链接&#xff0c;可以使用以下方法&#xff1a; 使用get_categories()函数获取子分类&#xff1a; <?php $parent_category_id 1; // 替换为父分类的ID $args array(parent > $parent_category_id,or…

卡码网104.建造最大岛屿

题目 104. 建造最大岛屿 (kamacoder.com) 代码&#xff08;ACM 首刷看解析&#xff09;&#xff1a; #include<iostream> #include<vector> #include<unordered_map> #include<unordered_set> using namespace std;int dir[4][2] {1,0,-1,0,0,1,0,-…

B树简介:高效数据存储与检索的利器

在计算机科学领域&#xff0c;B树是一种自平衡的多叉树数据结构&#xff0c;广泛应用于数据库和文件系统中。与二叉树不同&#xff0c;B树每个节点可以有多个子节点&#xff0c;这使得它在处理大量数据时表现出色&#xff0c;尤其适合用于外部存储和大规模数据的快速查找。本文…

【编程基础知识】掌握Spring MVC:从入门到精通

摘要&#xff1a; 本文将深入探讨Spring MVC框架的核心概念、组件和工作流程。读者将学习如何将Spring MVC应用于现代Web应用程序开发中&#xff0c;并通过实际代码示例和流程图&#xff0c;理解其强大的功能和灵活性。文章最后&#xff0c;我们将通过一个Excel表格总结全文内容…

Golang | Leetcode Golang题解之第463题岛屿的周长

题目&#xff1a; 题解&#xff1a; type pair struct{ x, y int } var dir4 []pair{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}func islandPerimeter(grid [][]int) (ans int) {n, m : len(grid), len(grid[0])for i, row : range grid {for j, v : range row {if v 1 {for _, d :…

数据结构(二叉树)

1. 树相关术语 父结点/双亲结点&#xff1a;如果一个结点有子结点那么它就是父结点或者双亲结点&#xff1b;例如A是BCDEFG的父结点&#xff0c;J是PQ的父结点等等&#xff1b;子结点&#xff1a;一个结点含有的子树的根节点称为该结点的子结点&#xff1b;如上图的H是D的子结点…

使用C++结合Qt实现聊天室:QTcpSocket实现远程实时通信

既然是要实现远程实时通信&#xff0c;那么就需要用到网络协议。我们需要用到TCP/IP协议&#xff0c;不过Q提供了标准库QTcpSocket&#xff0c;我们只需要能够使用这个库就行了。这个标准库将远程连接通信功能封装的很好&#xff0c;详情可以查看QTcpSocket的文档&#xff0c;在…