网页版备忘录简易实现

🍏 预览效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

🍏 步骤分解及代码

1. 创建页面布局

 <!-- 最上面一行, 输入框 + 新建任务按钮 -->
      <div class="nav">
        <input type="text">
        <button>新建任务</button>
    </div>
 
    <!-- 下面包含了左右两个部分的内容区域 -->
    <div class="container">
        <!-- 左侧的部分 -->
        <div class="todo">
            <h3>未完成</h3>
            <!-- 这只是一个实例, 实际上内容都得是动态构造出来的 -->
            <!-- <div class="row">
                <input type="checkbox">
                <span>吃饭</span>
                <button>删除</button>
            </div> -->
        </div>
        <!-- 右侧的部分 -->
        <div class="done">
            <h3>已完成</h3>
        </div>
    </div>

2. 实现页面样式

 <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
 
        .nav {
            width: 800px;
            height: 100px;
            margin: 0 auto;
            display: flex;
            align-items: center;
        }
 
        /* 任务的输入框 */
        .nav input {
            height: 50px;
            width: 600px;
        }
 
        .nav button {
            height: 50px;
            width: 200px;
            background-color: orange;
            color: white;
            /* 去掉按钮周围的边框. button 元素默认会带 2 个像素的黑色实线边框 */
            border: none;
        }
 
        .container {
            width: 800px;
            height: 800px;
            margin: 0 auto;
            display: flex;
        }
 
        .container h3 {
            height: 50px;
            text-align: center;
            line-height: 50px;
            background-color: #333;
            color: #fff;
        }
 
        .todo {
            width: 50%;
            height: 100%;
        }
 
        .done {
            width: 50%;
            height: 100%;
        }
 
        .row {
            height: 50px;
            display: flex;
            align-items: center;
        }
 
        .row input {
            /* 设置上下外边距为 0, 设置左右外边距为 10px */
            margin: 0 10px;
        }
 
        .row span {
            width: 300px;
        }
 
        .row button {
            width: 50px;
            height: 40px;
        }
    </style>

3. 实现页面行为

注意,此时我们用到了JavaScript,相关步骤如下:

  1. 实现新建任务功能:获取到新增按钮->给新增按钮注册一个点击事件->获取到输入框的内容->根据任务内容创建元素->把相应元素挂到 DOM 树上->清空输入框
  2. 实现 “已完成功能”, 针对 checkbox 新增一个点击事件处理函数
  3. 实现 “删除” 功能,针对删除按钮增加一个点击事件
<script>
        // 1. 实现新建任务功能
        // 1.1 获取到新增按钮
        let addTaskButton = document.querySelector('.nav button');
        // 1.2 给新增按钮注册一个点击事件
        addTaskButton.onclick = function() {
            // 1.3 获取到输入框的内容
            let input = document.querySelector('.nav input');
            let taskContent = input.value;
            if (taskContent == '') {
                console.log('当前任务为空, 不能进行新增任务!');
                return;
            }
            // 1.4 根据任务内容, 创建元素
            let row = document.createElement('div');
            row.className = 'row';
            let checkbox = document.createElement('input');
            checkbox.type = 'checkbox';
            let span = document.createElement('span');
            span.innerHTML = taskContent;
            let button = document.createElement('button');
            button.innerHTML = '删除';
            // 1.5 把这些元素挂到 DOM 树上
            row.appendChild(checkbox);
            row.appendChild(span);
            row.appendChild(button);
            let todo = document.querySelector('.todo');
            todo.appendChild(row);
            // 1.6 清空输入框
            input.value = '';
 
            // 2. 实现 "已完成功能". 针对 checkbox 新增一个点击事件处理函数
            checkbox.onclick = function() {
                // 操作 row 这个对象, 看是把 row 是放到 todo 还是放到 done 里~
                // 根据 checkbox 的选中状态来判定
                if (checkbox.checked) {
                    // 选中状态, 把 row 放到 done 里
                    let target = document.querySelector('.done');
                    target.appendChild(row);
                } else {
                    // 未选中状态, 把 row 放到 todo 里
                    let target = document.querySelector('.todo');
                    target.appendChild(row);
                }
            }
 
            // 3. 实现 "删除" 功能, 针对删除按钮增加一个点击事件. 
            button.onclick = function() {
                // 在这里, 要删除的是 row 这个元素 (child => row)
                // row 的 parent 可能是 todo, 也可能是 done
                // 可以直接通过 parentNode 属性获取到某个元素的父元素是谁. 
                let parent = row.parentNode;
                parent.removeChild(row);
            }
        }
    </script>
  • 32
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 27
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春风~十一载

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值