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

news2024/11/23 22:45:28

一,界面介绍

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

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

示例:

(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>

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

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

相关文章

【知乎直答】批量多线程生成原创文章软件-AI智能搜索聚合

【知乎直答】批量多线程生成原创文章软件介绍&#xff1a; 1、知乎发布的全新AI产品“知乎直答”是其AI搜索功能的产品化成果&#xff0c;旨在提升用户的提问、搜索体验以及结果生成和归纳的质量。 2、数据基础&#xff1a;该产品基于知乎平台上的真实问答数据及全网高质量问答…

Chromium 中前端js XMLHttpRequest接口c++代码实现

在JavaScript中发出HTTP请求的主要方式包括&#xff1a;XMLHttpRequest对象、Fetch API、Axios库和各种其他的HTTP客户端库。 本人主要分析下XMLHttpRequest接口在c中对应实现 一、上前端代码 <!DOCTYPE html> <html lang"en"> <head> <meta…

Go基础学习11-测试工具gomock和monkey的使用

文章目录 基础回顾MockMock是什么安装gomockMock使用1. 创建user.go源文件2. 使用mockgen生成对应的Mock文件3. 使用mockgen命令生成后在对应包mock下可以查看生成的mock文件4. 编写测试代码5. 运行代码并查看输出 GomonkeyGomonkey优势安装使用对函数进行monkey对结构体中方法…

Marp精华总结(二)进阶篇

概述 这是Marp精华总结的第二篇&#xff0c;主要补充第一篇未提到的一些内容。 系列目录 Marp精华总结&#xff08;一&#xff09;基础篇Marp精华总结&#xff08;二&#xff09;进阶篇Marp精华总结&#xff08;三&#xff09;高级篇 自适应标题 通过在标题行中插入<!-…

历经十年/头发都快掉光/秘钥生成器终极版/机器码/到期功能限制/运行时间限制/日期防篡改/跨平台

一、项目介绍 1.0 前言说明 标题一点都不夸张&#xff0c;从第一版的秘钥生成器到今天这个版本&#xff0c;确实经历了十年的时间&#xff0c;最初的版本做的非常简陋&#xff0c;就是搞了个异或加密&#xff0c;控制运行时间&#xff0c;后面又增加设备数量的控制&#xff0…

JavaFX加载fxml文件几种方法

环境&#xff1a;idea&#xff0c;maven创建JavaFX工程 工程目录如下&#xff1a; MusicPlayer.java package cn.com;import java.io.IOException;import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.geometry.Insets; import javafx.geo…

目标检测 Deformable DETR(2021)详细解读

文章目录 前言整体网络架构可变形注意力模块backbone生成多尺度特征多尺度位置编码prediction heads两个变体 前言 为解决DETR attention的计算量大导致收敛速度慢、小目标检测效果差的问题&#xff1a;提出了Deformable Attention&#xff0c;其注意力模块只关注一个query周围…

ML 系列: (10)— ML 中的不同类型的学习

一、说明 我们之前将机器学习方法分为三类&#xff1a;监督学习、无监督学习和强化学习。机器学习方法可以分为不同的类型&#xff0c;我们将在下面讨论最重要的类型。 二、懒惰学习与急切学习 预先学习的工作原理是使用训练数据构建模型&#xff0c;然后使用此模型评估测试数据…

STM32F103C8----3-3 蜂鸣器(跟着江科大学STM32)

一&#xff0c;电路图 &#xff08;接线图&#xff09; 面包板的的使用请参考&#xff1a;《面包板的使用_面包板的详细使用方法-CSDN博客》 二&#xff0c;目的/效果 3-3 蜂鸣器 三&#xff0c;创建Keil项目 详细参考&#xff1a;《STM32F103C8----2-1 Keil5搭建STM32项目模…

MySQL 中的 EXPLAIN 命令详解

在 MySQL 数据库中&#xff0c;EXPLAIN命令是一个非常强大的工具&#xff0c;它可以提供关于 SQL 查询执行计划的关键信息。理解这些信息对于优化查询性能至关重要。本文将详细介绍 MySQL 中的EXPLAIN命令提供的关键信息。 一、什么是 EXPLAIN 命令 EXPLAIN命令用于获取 MySQ…

Java多态(向上转型、动态绑定)+结合题目理解原理

第一次尝试使用markdowm写博客哈 文章目录 1.多态的引入2.重写和重载3.避免在构造方法里面去调用重写4.向上转型和向下转型5.让你真正明白什么是多态6.通过一些习题进行理解 1.多态的引入 首先说一下&#xff0c;这个想要使用多态需要我们满足的条件&#xff0c;然后具体的进行…

进程概念(冯诺依曼体系结构、操作系统、进程)-- 详解

目录 一、冯诺依曼体系结构1、概念2、硬件层面的数据流3、关于冯诺依曼的知识点强调4、CPU 工作原理5、补充&#xff08;CPU 和寄存器、高速缓存以及主存之间的关系&#xff09; 二、操作系统&#xff08;Operating System&#xff09;1、概念2、定位3、设计 OS 的目的4、如何理…

Linux高级编程_28_进程

文章目录 进程并行与并发单道与多道程序进程控制块(PCB)了解PCB存储位置进程号&#xff1a;进程号&#xff1a;&#xff08;PID&#xff09;进程组号&#xff1a;&#xff08;PGID&#xff09;父进程号&#xff1a;&#xff08;PPID&#xff09; fork函数 多进程创建进程状态进…

基于vue框架的大学生勤工俭学咨询服务系统的设计与实现60uw9(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;大学生,企业,招聘信息,在线咨询,咨询回复,职位应聘 开题报告内容 基于Vue框架的大学生勤工俭学咨询服务系统的设计与实现 开题报告 一、研究背景 随着高等教育的普及与就业市场的竞争加剧&#xff0c;大学生勤工俭学已成为一种普遍现…

<<机器学习实战>>1-9节笔记

2.前言与导学 从关注算法的分类与特性到关注算法适合解决哪类问题 很多经典算法不再有效&#xff0c;但特征工程、集成学习越来越有效&#xff0c;和深度学习分别适合于不同领域 3、基本概念 如果预测目标是离散的&#xff0c;则是分类问题&#xff0c;否则回归 机器学习相比…

【AIGC】ChatGPT开发者必备:如何获取 OpenAI 的 API Key

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;API Key的重要性&#x1f4af;获取API Key的基本步骤&#x1f4af;定价策略和使用建议&#x1f4af;小结 &#x1f4af;前言 在现代应用开发中&#xff0c;获取OpenAI的…

TCP Analysis Flags 之 TCP ZeroWindowProbe

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…

什么是沉默成本?超详细+通俗易懂版

沉默成本是一个在会计学、金融学以及经济学中常用的概念&#xff0c;但更常见的表述是沉没成本&#xff08;Sunk Cost&#xff09;。沉没成本指的是已经发生且无法收回的成本&#xff0c;这些成本与当前的决策无关&#xff0c;但往往会影响人们的决策过程。以下是对沉没成本的详…

【MySQL】Ubuntu环境下MySQL的安装与卸载

目录 1.MYSQL的安装 2.MYSQL的卸载 1.MYSQL的安装 首先我们要看看我们环境里面有没有已经安装好的MySQL 我们发现是默认是没有的。 我们还可以通过下面这个命令来确认有没有mysql的安装包 首先我们得知道我们当前的系统版本是什么 lsb_release -a 我们在找apt源的时候&a…