告别拖延症,制作自己的专属任务清单

页面效果

先看看页面的效果吧,代码可以直接在下面自取哦~

添加任务的页面

删除任务的页面

代码分析

代码中html分析

  1. 定义一个id为app,class为container的div容器;
  2. 在该容器内再定义class为input-group的div容器,并在该容器内定义一个class为label的div容器,class为content的input输入框和class为btn的button;
  3. 在该容器内再定义class为list的div容器,用于存放列表。

代码的css涉及的小知识点,注意!!!

  1. 弹性容器默认的主轴为x轴,子容器全部在主轴上对齐;
  2. 子容器默认继承弹性父容器100%的高;
  3. flex: 是否要放大 是否要缩小 设置的宽度;
  4. 居中:justify-content: center; align-items: center;
  5. .item:nth-child(1):class为item的第一个孩子容器。

代码中js分析

要实现添加,删除和渲染清单的功能

代码思路
ini 复制代码
var todoData = [];

var addTodo = document.querySelector('.btn');//按钮
var todoList = document.getElementById('todo-list');//获取ul
var close = document.querySelector('.close');//关闭按钮

对一些功能进行封装,提高代码的可维护性和可读性:

  • 添加功能:先获取添加按钮的容器,然后给它绑定一个监听事件,当点击的时候触发回调函数,给定一个数组,用于存放todoList,获取输入框的内容,加入数组,通过渲染数组将todoList显示出来;
javascript 复制代码
function addNewTodo(){
  //获取input的内容
  if (document.getElementById('newTodo').value.trim() != '') {
     todoData.push({
        id:Math.floor(Date.now()),//时间戳
        title:document.getElementById('newTodo').value,
        completed:true
     });

     //渲染新的li
     render();
  }
};
  • 删除功能:先获列表和关闭按钮容器,然后给列表容器绑定一个监听事件,当点击的时候触发回调函数,先判断是否点击删除按钮,如果点击了就获取关闭按钮的兄弟元素的内容,再查找该内容在数组中的下标,然后通过下标在数组中进行删除,再渲染数组进行更新;
csharp 复制代码
function deleteTodo(event) {
   if (event.target.classList.contains('close')){
      //首先获取关闭按钮元素
   var close = event.target;
   //获取close兄弟元素的内容
   var content = close.previousElementSibling.textContent;
   //查找要删除元素的下标
   var index = todoData.findIndex(item => item.title === content);
   //删除该指定元素
   todoData.splice(index, 1);
   //渲染li
   render();
   }
}
  • 渲染功能:先定义一个空字符串,通过数组自带的遍历方法进行遍历,将该数组的元素通过列表显示,将其赋值给str,最后将str设为todoList容器的内容。
ini 复制代码
//将todoData中的数据渲染出来
function render(){
    var str = '';

    todoData.forEach(function(item){
       str += `
    <li class="item">
       <div class="flex">
           <input type="checkbox" class="item-check">
           <p class="item-content">${item.title}</p>
           <span class="close">x</span><!-- uusx -->
       </div>
    </li>
       `;
    });
    todoList.innerHTML = str;
};
arduino 复制代码
addTodo.addEventListener('click', addNewTodo);
todoList.addEventListener('click',deleteTodo)

结语

在快节奏的现代生活中,有效地管理和规划时间变得尤为重要。本篇文章分享了如何制作任务清单todolist,希望能帮助到你呀,从今天起,让任务清单成为你成功路上的忠实伙伴,一起迈向更加美好的未来。

相关推荐
独立开阀者_FwtCoder几秒前
面试官:为什么在 Vue3 中 ref 变量要用 .value?
前端·javascript·vue.js
NetX行者3 分钟前
基于Vue 3的AI前端框架汇总及工具对比表
前端·vue.js·人工智能·前端框架·开源
独立开阀者_FwtCoder3 分钟前
手握两大前端框架,Vercel 再出手拿下 Nuxt.js,对前端有什么影响?
前端·javascript·vue.js
独立开阀者_FwtCoder4 分钟前
弃用 html2canvas!快 93 倍的截图神器!
前端·javascript·vue.js
weixin_3993806918 分钟前
TongWeb8.0.9.0.3部署后端应用,前端访问后端报405(by sy+lqw)
前端
伍哥的传说39 分钟前
H3初识——入门介绍之常用中间件
前端·javascript·react.js·中间件·前端框架·node.js·ecmascript
洛小豆1 小时前
深入理解Pinia:Options API vs Composition API两种Store定义方式完全指南
前端·javascript·vue.js
洛小豆1 小时前
JavaScript 对象属性访问的那些坑:她问我为什么用 result.id 而不是 result['id']?我说我不知道...
前端·javascript·vue.js
叹一曲当时只道是寻常1 小时前
Softhub软件下载站实战开发(十六):仪表盘前端设计与实现
前端·golang
超级土豆粉1 小时前
npm 包 scheduler 介绍
前端·npm·node.js