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

yizhihongxing

我来为您详细讲解利用前端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日

相关文章

  • vue2.x 从vue.config.js配置到项目优化

    Vue.js是现今最流行的前端框架之一,它提供了方便易用的API和模板语法,让我们可以专注于应用的业务逻辑开发。 但是,在实际的开发过程中,我们也需要优化项目的性能,提高开发效率。下面,我们将从vue.config.js配置和项目优化两个方面详细讲解。 一、vue.config.js配置 vue-cli提供了vue.config.js配置文件,可以用来配置w…

    css 2023年6月9日
    00
  • 详解SPA中前端路由基本原理与实现方式

    下面是详解“详解SPA中前端路由基本原理与实现方式”的完整攻略: 什么是SPA SPA即单页应用程序,它是一个不会重新加载整个页面的应用程序,而只会更新页面的局部区域。这样能够提高用户的体验,减少页面加载时间和流量消耗。 前端路由的概念 前端路由是指在单页应用程序中,通过监听浏览器url变化,使得不同的url对于不同的页面呈现。一般来说,前端路由是通过修改h…

    css 2023年6月10日
    00
  • css background-attachment属性进阶

    当设置一个元素的背景图片时,background-attachment属性的值会影响这个背景图的移动方式。background-attachment的默认值是scroll,表示背景图会随着元素的滚动而滚动。但是可以通过更改background-attachment属性的值来实现背景的不同移动效果。 background-attachment: fixed; …

    css 2023年6月9日
    00
  • CSS3中box-shadow的用法介绍

    第一步:了解box-shadow box-shadow是CSS3中用来创建阴影的属性,它可以为一个元素添加一个或多个阴影。box-shadow的语法如下: box-shadow: h-shadow v-shadow blur spread color inset; 其中,各个参数如下: h-shadow: 必选,表示水平阴影的位置,可取正值(阴影在右边)或负…

    css 2023年6月9日
    00
  • CSS3打造磨砂玻璃背景效果

    下面我们详细讲解一下“CSS3打造磨砂玻璃背景效果”的完整攻略。 1. 引入磨砂玻璃效果所需要的CSS 我们需要先引入CSS,然后使用css选择器来设置元素的磨砂玻璃效果,下面是代码: /* 设置磨砂玻璃效果 */ .background-blur { -webkit-filter: blur(10px); -moz-filter: blur(10px); …

    css 2023年6月9日
    00
  • Vue-cropper 图片裁剪的基本原理及思路讲解

    Vue-cropper是一款基于Vue.js的图片裁剪组件,实现了图片的裁剪、拖动、旋转、缩放等功能。其基本原理和思路如下: 加载图片使用HTML5的File API来加载需要裁剪的图片。用户需要选择需要裁剪的图片,通过input标签的file类型,使用户选择图片之后,触发change事件,通过event.target.files[0]获取到文件对象,进而使…

    css 2023年6月10日
    00
  • CSS样式书写顺序和命名规范及注意事项

    下面我来为您详细讲解CSS样式书写顺序和命名规范及注意事项的完整攻略。 CSS样式书写顺序 为了保证CSS代码的可维护性和清晰度,我们需要养成良好的CSS样式书写习惯,按照以下顺序书写CSS样式代码。 布局定位属性(display、position、float、clear等) 盒模型属性(width、height、padding、margin等) 字体属性(…

    css 2023年6月9日
    00
  • 详解网站中图片日常使用以及优化手法

    详解网站中图片日常使用以及优化手法 简介 图片是网站中极为重要的组成部分,可以起到美化网站、凸显重点、增加品牌形象等多种作用。但是,过多或过大的图片也可能会导致网站加载速度缓慢、影响用户体验。因此,在使用图片的过程中,需要注意图片的大小、分辨率、格式以及加载方式等多个方面来进行优化。 图片格式 常见的图片格式有JPEG、PNG和GIF。不同的格式有不同的特点…

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