利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)

我来为您详细讲解利用前端HTML+CSS+JS开发简单的TODOLIST功能的完整攻略。

1. 思路

要开发一个TODOLIST功能,需要考虑以下几点:

  • 任务的添加、删除、修改
  • 任务的状态切换(完成/未完成)

通过以上几点的考虑,我们可以确定需要以下几个功能模块:

  1. 添加任务模块
  2. 显示任务列表模块
  3. 修改/删除任务模块
  4. 切换任务状态模块

在这些模块中,我们需要使用到html、css、js三种前端技术,分别来实现页面的基础布局、样式设置、以及交互逻辑。

2. HTML布局

首先,我们需要定义一个容器,用来承载整个TODOLIST功能:

<div id="todo-wrapper">
    <!--其他模块在这里添加-->
</div>

在容器中,我们需要添加四个模块:添加任务模块、显示任务列表模块、修改/删除任务模块、切换任务状态模块。

<div id="todo-wrapper">
    <!--添加任务模块-->
    <div class="add-area">
        <input type="text" placeholder="请输入任务内容">
        <button>添加</button>
    </div>

    <!--显示任务列表模块-->
    <div class="list-area">
        <ul>
        </ul>
    </div>

    <!--修改/删除任务模块-->
    <div class="edit-area">
        <input type="text">
        <button class="edit-btn">修改</button>
        <button class="delete-btn">删除</button>
    </div>

    <!--切换任务状态模块-->
    <div class="status-area">
        <input type="checkbox" id="status-checkbox">
        <label for="status-checkbox">显示已完成任务</label>
    </div>
</div>

3. CSS样式

为了让TODOLIST功能有更好的用户体验,我们需要对其进行样式优化。

为了使页面更加美观,我们需要对整个TODOLIST容器进行一些基础样式设置:

#todo-wrapper {
    width: 600px;
    margin: 0 auto;
    padding: 20px;
    overflow: hidden;
    box-shadow: 0 0 8px rgba(0, 0, 0, .3);
}

接下来,我们需要对容器里面的各个模块进行样式设置:

/*添加任务模块*/
.add-area {
    margin-bottom: 20px;
}
.add-area input[type=text] {
    width: 60%;
    padding: 10px 20px;
    border: none;
    border-bottom: 1px solid #ccc;
    font-size: 16px;
    color: #333;
}
.add-area button {
    padding: 10px 20px;
    border: none;
    background-color: #4caf50;
    color: #fff;
}
.add-area button:hover {
    background-color: #3e8e41;
}

/*显示任务列表模块*/
.list-area {
    margin-bottom: 20px;
}
.list-area ul {
    list-style: none;
}
.list-area li {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 10px;
}
.list-area li:last-child {
    margin-bottom: 0;
}
.list-area li .task-info {
    flex: 1;
    font-size: 16px;
    color: #333;
    text-decoration: none;
}
.list-area li .task-info.completed {
    text-decoration: line-through;
    color: #9e9e9e;
}
.list-area li .edit-btn, .list-area li .delete-btn {
    margin-left: 10px;
    padding: 6px 12px;
    border: none;
    background-color: #4caf50;
    color: #fff;
}
.list-area li .edit-btn:hover, .list-area li .delete-btn:hover {
    background-color: #3e8e41;
}

/*编辑删除任务模块*/
.edit-area {
    display: none;
}
.edit-area input[type=text] {
    width: 60%;
    padding: 10px 20px;
    border: none;
    border-bottom: 1px solid #ccc;
    font-size: 16px;
    color: #333;
}
.edit-area .edit-btn, .edit-area .delete-btn {
    padding: 6px 12px;
    border: none;
    background-color: #4caf50;
    color: #fff;
}
.edit-area .edit-btn:hover, .edit-area .delete-btn:hover {
    background-color: #3e8e41;
}

/*切换任务状态模块*/
.status-area {
    display: flex;
    align-items: center;
    justify-content: flex-end;
}
.status-area label {
    margin-left: 10px;
    font-size: 14px;
    color: #333;
}

4. JS交互逻辑

为了实现TODOLIST的所有功能,我们需要使用到一些JS交互逻辑:

4.1 添加任务
var addInput = document.querySelector('.add-area input');
var addBtn = document.querySelector('.add-area button');
var listUl = document.querySelector('.list-area ul');

addBtn.addEventListener('click', function() {
    if (addInput.value.trim() === '') {
        alert('请输入任务内容');
        return;
    }
    var li = document.createElement('li');
    li.innerHTML = '<a href="#" class="task-info">' + addInput.value + '</a><span class="buttons"><button class="edit-btn">修改</button><button class="delete-btn">删除</button></span>';
    listUl.appendChild(li);
    addInput.value = '';
});

当用户在添加任务模块中输入任务内容并点击“添加”按钮时,会调用这个函数。如果输入框为空,则提示用户输入任务内容。否则,通过li元素的innerHTML属性向任务列表中添加一个新的任务。

4.2 显示/隐藏编辑任务模块
var listUl = document.querySelector('.list-area ul');
var editArea = document.querySelector('.edit-area');
var editInput = document.querySelector('.edit-area input');
var editBtn = document.querySelector('.edit-area .edit-btn');
var deleteBtn = document.querySelector('.edit-area .delete-btn');

listUl.addEventListener('click', function(e) {
    if (e.target.tagName.toLowerCase() === 'a') {
        e.preventDefault();
        var taskInfo = e.target;
        var li = taskInfo.parentNode;
        var taskName = taskInfo.text;
        editInput.value = taskName;
        editArea.style.display = 'block';
    }
});
deleteBtn.addEventListener('click', function() {
    editArea.style.display = 'none';
});

当用户点击任务列表中的任务链接时会调用这个函数,因为默认行为会跳转到链接指定的页面,所以我们通过e.preventDefault()来阻止这个默认行为,并显示出编辑任务模块。

当用户点击编辑任务模块中的“删除”按钮时,则会调用这个函数,隐藏编辑任务模块。

4.3 修改任务
editBtn.addEventListener('click', function() {
    var li = editInput.parentNode.parentNode;
    var taskInfo = li.querySelector('.task-info');
    var taskName = editInput.value.trim();

    if (taskName === '') {
        alert('请输入任务内容');
        return;
    }

    taskInfo.innerHTML = taskName;
    editArea.style.display = 'none';
});

当用户在编辑任务模块中修改任务内容并点击“修改”按钮时,会调用这个函数。如果输入框为空,则提示用户输入任务内容。否则,将任务列表中对应的任务修改为新的任务内容,并隐藏编辑任务模块。

4.4 删除任务
listUl.addEventListener('click', function(e) {
    if (e.target.className === 'delete-btn') {
        var li = e.target.parentNode.parentNode;
        listUl.removeChild(li);
    }
});

当用户在任务列表中点击某个任务下的“删除”按钮时,会调用这个函数。从任务列表中删除该任务对应的li元素。

4.5 切换任务状态
var statusCheckbox = document.querySelector('#status-checkbox');
statusCheckbox.addEventListener('change', function () {
    var taskInfos = document.querySelectorAll('.task-info');
    for (var i = 0; i < taskInfos.length; i++) {
        var taskInfo = taskInfos[i];
        if (statusCheckbox.checked) {
            if (!taskInfo.classList.contains('completed')) {
                taskInfo.parentNode.style.display = 'none';
            }
        } else {
            taskInfo.parentNode.style.display = 'flex';
        }
    }
});

用户通过切换复选框来切换任务列表中任务的状态,已完成的任务会在显示完成的状态时呈现,未完成的任务则在不显示完成的状态时呈现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本) - Python技术站

(0)
上一篇 2023年6月13日
下一篇 2023年6月13日

相关文章

  • CSS 高级技巧总结(必看)

    CSS 高级技巧总结(必看) 本文将介绍一些 CSS 的高级技巧,让你的网页变得更加美观和易读。以下内容将覆盖以下主题: 使用伪类 媒体查询 文字阴影 使用变量 背景图像和伪元素 多列布局 1. 使用伪类 伪类可以让你选择元素的某个特定状态,比如:hover表示元素被鼠标悬停时的状态,:focus表示元素被聚焦时的状态。可以使用伪类来添加样式,使页面更加丰富…

    css 2023年6月9日
    00
  • Prototype中dom对象方法汇总

    Prototype中dom对象方法汇总 在Prototype的库中,有很多强大的DOM操作方法,本攻略将会对这些方法进行汇总、分类,并给出详细的实例说明。 1. DOM元素选取 1.1 $$方法 $$方法是Prototype的一个强大的DOM元素选取方法,可以选取符合所有CSS选择器的所有元素,返回一个数组对象。其语法如下: $$(‘CSS选择器’) 示例代…

    css 2023年6月10日
    00
  • css实现简易报警灯的示例代码

    下面是关于如何使用CSS实现简易报警灯的完整攻略: 1. 确定报警灯的基本要素 在着手编写CSS代码之前,需要先明确报警灯的基本要素,如灯的颜色、灯亮着的时间、灯亮的方式等,这可以根据实际需要进行调整。 2. 使用CSS transition属性来创建闪烁效果 CSS中的transition属性可以用来实现过渡效果,比如实现报警灯的闪烁效果就可以使用该属性。…

    css 2023年6月10日
    00
  • 日常收藏的jquery技巧

    下面我会详细讲解“日常收藏的jquery技巧”的完整攻略。 日常收藏的jquery技巧 选择器 基本选择器 在jQuery中,选择器可以帮助我们找到HTML页面中指定的元素。在使用选择器时,我们可以使用以下几个基本选择器: * (星号):选择所有元素 element:选择指定元素名的元素,例如p、h1、div #id:选择指定id的元素,例如#header …

    css 2023年6月11日
    00
  • CSS3使用transition属性实现过渡效果

    下面我来详细讲解“CSS3使用transition属性实现过渡效果”的完整攻略。 什么是transition属性? transition属性是CSS3中的新特性,可以用来实现在元素属性发生变化的时候,产生平滑渐变的过渡效果。通过指定需要过渡的属性、过渡时间、延迟时间和过渡方式等参数,可以实现各种酷炫效果。 如何使用transition属性? transiti…

    css 2023年6月10日
    00
  • 纯CSS设置Checkbox复选框控件的样式(五种方法)

    下面是详细讲解“纯CSS设置Checkbox复选框控件的样式(五种方法)”的完整攻略: 纯CSS设置Checkbox复选框控件的样式(五种方法) 1.使用伪类 通过给input[type=checkbox]设置伪类来实现复选框的样式修改。 /* 选中 */ input[type=checkbox]:checked + label::before { cont…

    css 2023年6月10日
    00
  • 使用Vue制作图片轮播组件思路详解

    这里我可以给出使用Vue制作图片轮播组件的详细攻略: 思路概述 实现图片轮播组件的主要思路如下: 确定组件的基本结构和样式 定义轮播动画效果和过渡方式 通过Vue组件化思想,定义图片轮播组件 将组件引入主页面并使用 组件结构和样式设计 在组件设计中,我们可以定义一个父容器元素,内部包含图片、左右箭头和指示器。具体结构和样式可以参考以下代码: <temp…

    css 2023年6月10日
    00
  • 不用数据库的多用户文件自由上传投票系统(1)

    下面是详细讲解“不用数据库的多用户文件自由上传投票系统(1)”的完整攻略。 系统简介 本系统是一个基于Flask框架开发的多用户投票系统,完全不依赖于数据库,所有数据都以文件的形式存储在本地。用户可以自由上传图片或视频、创建投票项目,其它用户可以对项目进行投票和评论。 系统架构 系统主要分为三个部分: 用户管理模块 文件上传模块 投票模块 技术栈 Pytho…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部