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

一,界面介绍

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

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

示例:

(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)
              //创建span
              let 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 div
                    let parent = this.parentNode
                    //找到todo div
                    let grand = parent.parentNode
                    //在todo div中删除row
                    grand.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.value
              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)
              //创建span
              let 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 div
                    let parent = this.parentNode
                    //找到todo div
                    let grand = parent.parentNode
                    //在todo div中删除row
                    grand.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.parentNode
                      let target

                      if(this.checked)
                      {
                        target = document.querySelector('.done')
                      }
                      else
                      {
                        target=document.querySelector('.todo')
                      }

                      target.appendChild(row)
                    
                  }
             }

         }
</script>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

影视cms泛目录用什么程序?苹果cms二次开发泛目录插件

影视CMS泛目录一般使用的程序有很多种&#xff0c;&#xff08;maccmscn&#xff09;以下是其中几种常见的程序&#xff1a; WordPress&#xff1a;WordPress是一个非常流行的开源内容管理系统&#xff0c;可以通过安装一些插件来实现影视CMS泛目录功能。其中&#xff0c;一款常…

Linux中的进程间通信之共享内存

共享内存 共享内存示意图 共享内存数据结构 struct shmid_ds {struct ipc_perm shm_perm; /* operation perms */int shm_segsz; /* size of segment (bytes) */__kernel_time_t shm_atime; /* last attach time */__kernel_time_t shm_dtime; /* last detach time */__kerne…

招联2025校招内推倒计时

【投递方式】 直接扫下方二维码&#xff0c;或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus&#xff0c;使用内推码 igcefb 投递&#xff09; 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…

制作离线版Koczkatamas工具包

一、下载源码 从https://github.com/koczkatamas/koczkatamas.github.io下载koczkatamas.github.io-master.zip 二、解压 $ unzip koczkatamas.github.io-master.zip三、运行index.html 可以看到输入一个字符后&#xff0c;下面的各种编码都没有显示&#xff0c;则表示运行…

力扣刷题 | 两数之和

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 给定一个整数数组 nums 和…

UOM无人机空域快速申请技术详解

UOM无人机空域快速申请技术详解主要包括以下几个步骤&#xff1a; 一、准备阶段 1. 实名登记&#xff1a;首先&#xff0c;您需要在相应的民航部门进行无人机的实名登记&#xff0c;这是合法飞行的前提。 2. 了解规定&#xff1a;熟悉并遵守当地关于无人机飞行的法律法规&am…

【微服务】初识(day1)

基础概念 集群 集群是将一个系统完整的部署到多个服务器&#xff0c;每个服务器提供系统的所有服务&#xff0c;多个服务器可以通过负载均衡完成任务&#xff0c;每个服务器都可以称为集群的节点。 分布式 分布式是将一个系统拆分为多个子系统&#xff0c;多个子系统部署在…

YOLO--前置基础词-学习总结

RFBNet是什么意思 RFBNet 是一种用于目标检测的深度学习网络&#xff0c;它的名字来源于 "Receptive Field Block Network"&#xff08;感受野块网络&#xff09;。简单来说&#xff0c;RFBNet 是一种可以让计算机更好地“看”图像中不同大小的物体的方法。 在图像处…

【重学 MySQL】五十四、整型数据类型

【重学 MySQL】五十四、整型数据类型 整型类型TINYINTSMALLINTMEDIUMINTINT&#xff08;或INTEGER&#xff09;BIGINT 可选属性UNSIGNEDZEROFILL显示宽度&#xff08;M&#xff09;AUTO_INCREMENT注意事项 适合场景TINYINTSMALLINTMEDIUMINTINT&#xff08;或INTEGER&#xff0…

tftp传文件被服务器拒绝进入tftp: server error: (768) Access to staonline.pcap denied

环境&#xff1a;测试一个ac下挂ap&#xff0c;ap下的抓包文件传出时&#xff0c;出现问题&#xff1a; ac的wan口ip是192.168.186.167/24&#xff0c;gw是192.168.186.1&#xff0c;下挂ap的ip是192.168.202.199/24&#xff0c;ac上开子接口192.168.202.1/24&#xff0c;ac上开…

C++ | Leetcode C++题解之第456题132模式

题目&#xff1a; 题解&#xff1a; class Solution { public:bool find132pattern(vector<int>& nums) {int n nums.size();vector<int> candidate_i {nums[0]};vector<int> candidate_j {nums[0]};for (int k 1; k < n; k) {auto it_i upper_…

微服务获取用户信息和OpenFeign传递用户

问题一&#xff1a; 网关已经完成登录校验并获取登录用户身份信息。但是当网关将请求转发到微服务时&#xff0c;微服务又该如何获取用户身份呢&#xff1f; 由于网关发送请求到微服务依然采用的是Http请求&#xff0c;因此我们可以将用户信息以请求头的方式传递到下游微服务…

PC端微信小程序如何调试?

向往常一样运行开微信小程序开发者工具 如果只弹出pc端小程序&#xff0c;没有出现调试的界面&#xff1a;点击胶囊按钮的三个…选择重新进入小程序 即可依次展开相应的功能调试&#xff0c;改完代码没反应再刷新看看&#xff0c;再没反应就再次重新点击编译并自动调试。

论文 | Model-tuning Via Prompts Makes NLP Models Adversarially Robust

这篇论文研究了使用提示 (Prompting) 方法微调预训练语言模型&#xff0c;以提高其在对抗样本攻击下的鲁棒性。论文的主要贡献如下&#xff1a; 1.MVP 比 MLP-FT 更鲁棒&#xff1a; 论文比较了 MVP (Model-tuning Via Prompts) 和传统的 MLP-FT (Fine-tuning with an MLP head…

C++模版SFIANE应用踩的一个小坑

一天一个C大佬同事&#xff0c;突然截图过来一段代码&#xff1a;这写的啥呀&#xff0c;啰里吧嗦的&#xff0c;这个构造函数模板参数T1感觉是多余的呀 template<class T> class TestClass { public:TestClass(){}//函数1template<class T1 T, std::enable_if_t<…

VTC视频时序控制器,TPG图像测试数据发生器,LCD驱动——FPGA学习笔记19

详情可以见LCD篇 LCD彩条显示——FPGA学习笔记10_依次显示红绿蓝三个通道-CSDN博客 一、VTC简介 Video Timing Controller 缩写 VTC 是我们在所有涉及 FPGA 图像、 FPGA 视频类方案中经常用到的一种用于产生视频时序的控制器。 本课以 VGA 为切入点&#xff0c; 学习视频传输…

Java IO流全面教程

此笔记来自于B站黑马程序员 File 创建对象 public class FileTest1 {public static void main(String[] args) {// 1.创建一个 File 对象&#xff0c;指代某个具体的文件// 路径分隔符// File f1 new File("D:/resource/ab.txt");// File f1 new FIle("D:\\…

【Golang】Go语言中时间time相关处理方法

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

将列表中的各字符串sn连接成为一个字符串s使用;将各sn间隔开os.pathsep.join()

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 将列表中的各字符串sn 连接成为一个字符串s 使用;将各sn间隔开 os.pathsep.join() [太阳]选择题 下列说法中正确的是? import os paths ["/a", "/b/c", "/d&q…

Linux 系统五种帮助命令的使用

Linux 系统五种帮助命令的使用 本文将介绍 Linux 系统中常用的帮助命令&#xff0c;包括 man、–help、whatis、apropos 和 info 命令。这些命令对于新手和有经验的用户来说&#xff0c;都是查找命令信息、理解命令功能的有力工具。 文章目录 Linux 系统五种帮助命令的使用一…