利用前端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日

相关文章

  • mpvue将vue项目转换为小程序

    将Vue项目转换为微信小程序有两种方式: 使用mpvue框架 mpvue是一款基于Vue的小程序开发框架,它提供了一套完整的Vue.js语法支持,并扩展了微信小程序原生的API和组件。下面是使用mpvue将Vue项目转换为微信小程序的步骤: (1)安装mpvue-cli工具 npm install –g mpvue-cli (2)创建mpvue项目 mpvu…

    css 2023年6月9日
    00
  • CSS 辐射渐变背景 radial-gradient的实现

    下面我就详细讲解一下如何实现CSS 辐射渐变背景 radial-gradient。 什么是CSS 辐射渐变背景 radial-gradient CSS 辐射渐变背景 radial-gradient 是 CSS3 增加的一种渐变背景技术,它通过放置圆形和椭圆形的颜色之间进行平滑的渐变,可以创建出非常漂亮的渐变效果。它的语法如下: background: rad…

    css 2023年6月9日
    00
  • 使用一张或两张图片创建大背景网站

    使用一张或两张图片创建大背景网站是一种常见的网站设计方式,可以为网站增添独特魅力。下面是创建大背景网站的完整攻略: 步骤一:设计网站背景图 选择一张或两张高清图片作为网站的背景图。注重图片质量和主题与网站内容的契合度。例如,假设你正在设计一家咖啡馆的网站,你可以选择一张展示咖啡制作过程的照片或者一张拍摄咖啡师的高清图片。确保图片不会影响文本内容的可读性,最好…

    css 2023年6月9日
    00
  • 详解Vue中CSS样式穿透问题

    详解Vue中CSS样式穿透问题 在Vue中,我们可以使用组件化开发,将页面拆分成各个独立的组件,这样可以使得代码更加简洁和易于维护。然而,在组件化开发中,由于组件之间相互独立,所以我们在编写CSS时可能会遇到一个问题,即:CSS样式穿透问题。下面将详细讲解这个问题,并提供两个示例说明。 什么是CSS样式穿透问题 所谓CSS样式穿透问题,是指在Vue中,父组件…

    css 2023年6月9日
    00
  • css样式无效是怎么回事?有哪些常见原因?

    在Web开发中,CSS样式无效是一个常见的问题。本攻略将介绍CSS样式无效的常见原因,并提供两个示例说明。 常见原因 以下是CSS样式无效的常见原因: 选择器错误:选择器可能不正确,无法匹配所需的元素。例如,选择器可能拼写错误、缺少空格或使用了错误的伪类。 样式优先级:样式优先级可能不正确,导致样式被覆盖。例如,样式可能被其他样式表或内联样式覆盖。 样式属性…

    css 2023年5月18日
    00
  • 关于带有”显示更多”按钮的多行文本截断思考

    关于带有”显示更多”按钮的多行文本截断思考攻略,可以从下列步骤入手: 步骤1:确定截断长度 首先,需要确定文本截断的长度。可以根据实际需要来确定,通常情况下,为了不让页面显得过于拥挤,建议将多于两行的文本进行截断。 步骤2:截断文本 使用CSS的text-overflow属性可以将多行文本截断并显示”…”。但是,这样做的效果并不好,用户难以知道截断的文本…

    css 2023年6月10日
    00
  • jQuery实战之仿淘宝商城左侧导航效果

    欢迎阅读本篇文章,本文将带你详细讲解“jQuery实战之仿淘宝商城左侧导航效果”的完整攻略,教你如何使用jQuery实现仿淘宝商城左侧导航栏效果。 包含的技术点 HTML基础标签的应用 CSS样式定义及样式优化 jQuery基础知识 jQuery的DOM操作方法 jQuery的动画效果 实现步骤 步骤1:HTML结构 仿淘宝商城左侧导航栏的核心部分在于HTM…

    css 2023年6月10日
    00
  • CSS用四种方式实现布局

    CSS是一种用于网页设计的语言,布局是网页设计中非常重要的一个部分。通过四种方式实现布局可以让我们更加灵活自如地进行网页设计。 四种方式包括:常规流布局、浮动布局、弹性布局和网格布局。下面对每种方式进行详细讲解: 常规流布局 常规流布局是HTML元素默认的排列方式,所有元素都从上到下、从左到右依次排列。常规流布局不需要设置任何样式,只需要按照HTML元素的自…

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