记事本(简易版)

194 阅读2分钟

背景

就想写个东西

代码(实现了一个原生To Do List)

<!DOCTYPE html>
<html>
<head>
  <title>To-Do List</title>
  <style>
    body {
      font-family: Arial, sans-serif;
	    margin: 0;
	    padding: 0;
    }
    
    .container {
      width: 600px;
      margin: 50px auto;
    }

    .title_block {
      display: flex;
      justify-content: center;
    }

    .title_name {
      height: 70px;
      width: 200px;
      line-height: 70px;
      text-align: center;
    }

    .tips {
      text-align: center;
      font-size: 16px;
      color: rgb(195, 197, 199);
      font-weight: 500;
    }

    .block_title {
      font-size: 16px;
      font-weight: 550;
    }

    #to_be_completed {
      max-height: 400px;
      overflow-y: auto;
    }

    #finished {
      max-height: 400px;
      overflow-y: auto;
    }

    #taskInput {
      width: 518px;
      padding: 10px;
    }
    
    .addBtn {
      height: 15px;
      padding: 12px;
      font-size: 14px;
      font-weight: 600;
      text-align: center;
      background-color: gainsboro;
      cursor: pointer;
      border-radius: 4px;
    }

    .addBtn:hover {
      background-color: rgb(141, 136, 136);
    }

    .item {
      display: flex;
      justify-content: space-between;
      align-items: center;
      margin-bottom: 10px;
      border-radius: 4px;
    }

    .item_content {
      width: 430px;
      height: 20px;
      padding: 10px;
      border-radius: 4px;
      background-color: rgb(245, 240, 235);
      cursor: pointer;
    }

    .strike_through {
      text-decoration: line-through;
    }

    .item_content:hover {
      background-color: rgb(245, 230, 215);
    }

    .wheel {
      width: 50px;
      height: 50px;
      border: 10px solid #333;
      border-top-color: transparent;
      border-left-color: transparent;
      border-radius: 50%;
      position: relative;
      animation: rotate 2s linear infinite;
      text-align: center;
      line-height: 50px;
      font-size: 30px;
      font-family: cursive;
    }
    @keyframes rotate {
      0% {
        transform: rotate(0deg);
      }
      100% {
        transform: rotate(360deg);
      }
    }

  </style>
</head>
<body>
  <div class="container">
    <h1 class="title_block">
      <div class="wheel"></div>
      <div class="title_name">
        To-Do List
      </div>
    </h1>
    <p class="tips">希望小彭写下的每一件事都是出于效率考虑,而不是做不完。</p>
    <div>
      <p class="block_title">添加待办事项</p>
      <div>
        <input id="taskInput" type="text" placeholder="输入文字"/>
        <span class="addBtn" onclick="addTask()">添加</span>
      </div>
    </div>
    <div>
      <p class="block_title">待完成事项</p>
      <div id="to_be_completed"></div>
    </div>
    <div>
      <p class="block_title">已完成事项</p>
      <div id="finished"></div>
    </div>
  </div>

  <script>
    
    // 数据源 待完成事件 已完成时间
    var doingData = []
    var doneData = []
    // 获取输入框和任务列表元素
    const taskInput = document.getElementById('taskInput')
    const ingList = document.getElementById('to_be_completed')
    const doneList = document.getElementById('finished')

    // 在页面加载完成后执行代码
    window.onload = function() {
      // 获取初始数据
      doingData = JSON.parse(localStorage.getItem("doingList")) || []
      doneData = JSON.parse(localStorage.getItem("doneList")) || []

      // 循环生成 DOM 元素
      for (var i = 0; i < doingData.length; i++) {
        // 创建新的元素
        var element = document.createElement('div')
        element.key = doingData[i].id
        element.title = doingData[i].content
        element.innerHTML = `
          <div class="item">
            <div class="item_content">${doingData[i].content}</div>
            <div>
              <span class="addBtn" onclick="completionEvent(${doingData[i].id})">已完成</span>
              <span  class="addBtn" onclick="removeIngTask(${doingData[i].id})">删除</span>
            </div>
          </div>
        `;
        // 将元素添加到容器中
        ingList.appendChild(element);
      }

      for (var i = 0; i < doneData.length; i++) {
        // 创建新的元素
        var element = document.createElement('div')
        element.key = doneData[i].id
        element.title = doneData[i].content
        element.innerHTML = `
          <div class="item">
            <div class="item_content strike_through">${doneData[i].content}</div>
            <div>
              <span  class="addBtn" onclick="removeDoneTask(${doneData[i].id})">删除</span>
            </div>
          </div>
        `;
        // 将元素添加到容器中
        doneList.appendChild(element);
      }
    }

    // 添加任务
    function addTask() {
      const taskText = taskInput.value.trim()
      const uniqueId = new Date().getTime()
      if (taskText !== '') {
        doingData.push({
          content:taskText,
          id:uniqueId
        })
        localStorage.setItem("doingList", JSON.stringify([...doingData]))
        const element = document.createElement('div')
        element.key = uniqueId
        element.title = taskText
        element.innerHTML = `
          <div class="item" key={${uniqueId}}>
            <div class="item_content">${taskText}</div>
            <div>
              <span class="addBtn" onclick="completionEvent(${uniqueId})">已完成</span>
              <span  class="addBtn" onclick="removeIngTask(${uniqueId})">删除</span>
            </div>
          </div>
        `;
        ingList.appendChild(element);
        taskInput.value = '';
      }
    }

    // 从待办移除任务
    function removeIngTask(id) {
      const residualData = doingData.filter(item=>{
        if(item.id === id) return false
        return true
      })
      doingData = [...residualData]
      localStorage.setItem("doingList", JSON.stringify([...residualData]))
      ingList.childNodes.forEach(childNode => {
        if(childNode.key === id) {
          ingList.removeChild(childNode)
        }
      })
    }

    // 从已办移除任务
    function removeDoneTask(id) {
      const finishedData = doneData.filter(item=>{
        if(item.id === id) return false
        return true
      })
      doneData = [...finishedData]
      localStorage.setItem("doneList", JSON.stringify([...finishedData]))
      doneList.childNodes.forEach(childNode => {
        if(childNode.key === id) {
          doneList.removeChild(childNode)
        }
      })
    }

    // 完成事件
    function completionEvent(id) {
      const residualData = doingData.filter(item=>{
        if(item.id === id) return false
        return true
      })
      const finishedData = doingData.filter(item=>{
        if(item.id === id) return true
        return false
      })
      localStorage.setItem("doingList", JSON.stringify([...residualData]))
      localStorage.setItem("doneList", JSON.stringify([...doneData, ...finishedData]))
      doingData = [...residualData]
      doneData = [...doneData, ...finishedData]
      ingList.childNodes.forEach(childNode => {
        if(childNode.key === id) {
          ingList.removeChild(childNode)
        // 创建新的元素
        var element = document.createElement('div')
        element.key = id
        element.innerHTML = `
          <div class="item">
            <div class="item_content strike_through">${childNode.title}</div>
            <div>
              <span  class="addBtn" onclick="removeDoneTask(${id})">删除</span>
            </div>
          </div>
        `;
        
        doneList.appendChild(element);
        }
      })
    }
  </script>
</body>
</html>