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

相关文章

  • CSS3解决移动页面上点击链接触发色块的问题

    要解决移动页面上点击链接时出现的色块问题,需要使用CSS伪类选择器来进行样式控制。下面将会给出详细的攻略说明。 1. 确定需要控制的元素 首先,需要确定需要控制的元素,一般情况下是 a 标签。这里先假设需要控制所有 a 标签,后续再进行例子的细化。 2. 设置伪类选择器 使用 CSS3 中的伪类选择器 :active,可以在元素被点击时添加样式。 具体实现方…

    css 2023年6月10日
    00
  • DW网页元素怎么制作渐隐渐现效果?

    当我们需要让网页元素渐隐渐现的效果时,可以使用CSS3中的transition属性来实现。下面是具体的步骤: 步骤一:定义元素基本样式 首先,需要定义元素的基本样式,包括宽高、背景颜色、位置等信息。例如,我们定义了一个div元素,样式如下: div { width: 200px; height: 200px; background-color: red; p…

    css 2023年6月10日
    00
  • CSS网页布局的核心内容:CSS盒模型

    CSS盒模型(Box Model)是CSS网页布局的核心内容之一。了解盒模型的概念及其应用,可以帮助我们更好地实现网页布局。 盒模型由四个部分组成:Content(内容)、Padding(内边距)、Border(边框)和Margin(外边距)。其中Content为盒子的实际内容部分,Padding为盒子边缘到内容之间的距离,Border为盒子边框的样式、颜色…

    css 2023年6月9日
    00
  • 纯CSS图片预加载实例 摆脱Javascript预载的束缚

    以下是“纯CSS图片预加载实例 摆脱Javascript预载的束缚”的攻略: 背景 在网站开发过程中,图片预加载是非常重要的一环。这样可以保证用户在浏览网站时不会受到图片加载速度的影响,提高用户体验。而在过去,常常使用Javascript来实现图片的预加载。但随着技术的进步,我们可以使用CSS3的一些特性来实现纯CSS图片预加载,从而摆脱Javascript…

    css 2023年6月9日
    00
  • JS+CSS实现表格高亮的方法

    要在网页上实现表格高亮,可以使用JavaScript(JS)和CSS的结合。 步骤一:为表格的每行添加监听事件 首先需要为表格的每一行添加监听事件。可以使用以下JS代码实现: <table> <tr onclick="highlight(this);"> <td>…</td> </…

    css 2023年6月10日
    00
  • jQuery实现根据滚动条位置加载相应内容功能

    当网页上某个区域的内容比较多,导致用户页面滚动增加时,我们可以通过jQuery实现根据滚动条位置加载相应内容的功能,以提升用户体验。具体实现步骤如下: Step 1:获取滚动条位置 使用jQuery的scroll()方法,当滚动条发生滚动时,触发回调函数。在回调函数中使用scrollTop()方法获取页面的滚动高度。 $(window).scroll(fun…

    css 2023年6月10日
    00
  • js获取及修改网页背景色和字体色的方法

    获取及修改网页背景色和字体颜色是web前端开发常见操作。下面是如何使用JS获取及修改网页背景色和字体色的攻略。 获取网页背景色和字体颜色 获取背景色 方法一:通过document.body.style.backgroundColor获取网页背景色 console.log(document.body.style.backgroundColor); // 输出网…

    css 2023年6月9日
    00
  • FF浏览器下float换行的问题解决方法(IE和Chrome正常)

    以下是针对“FF浏览器下float换行的问题解决方法”完整攻略: 问题描述 在浏览器中使用CSS中的float属性进行布局时,往往会出现在Firefox浏览器中,因为宽度不足导致两个块无法并列,而被迫换行的问题。而在IE和Chrome中则会正常显示。针对这种情况,需要进行特别的处理。 解决方法 方法1:增加可用宽度 在Firefox浏览器下,当宽度不足时会出…

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