JavaScript jQuery 任务清单 ToDoList

  • A+
所属分类:Web前端
摘要

ToDoList.html(复制并保存为html文件,打开即可见效果):ToDoList.css:ToDoList.js


代码实现:

ToDoList.html(复制并保存为html文件,打开即可见效果):

<!DOCTYPE html> <html>  <head>     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />     <title>ToDoList—最简单的待办事项列表</title>     <link rel="stylesheet" href="https://blog-static.cnblogs.com/files/jacklzx/ToDoList.css">     <script src="https://blog-static.cnblogs.com/files/jacklzx/jquery.min.js"></script>     <script src="https://blog-static.cnblogs.com/files/jacklzx/ToDoList.js"></script> </head>  <body>     <header>         <section>             <label for="title">ToDoList</label>             <input type="text" id="title" name="title" placeholder="请输入ToDo" required="required" autocomplete="off" />         </section>     </header>     <section>         <h2>正在进行 <span id="todocount"></span></h2>         <ol id="todolist" class="demo-box">         </ol>         <hr>         <h2>已经完成 <span id="donecount"></span></h2>         <ul id="donelist">         </ul>     </section>  </body>  </html> 

ToDoList.css:

body {     margin: 0;     padding: 0;     font-size: 16px;     background: #CDCDCD; }  header {     height: 50px;     background: #333;     background: rgba(47, 47, 47, 0.98); }  section {     margin: 0 auto; }  label {     float: left;     width: 100px;     line-height: 50px;     color: #DDD;     font-size: 24px;     cursor: pointer;     font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; }  header input {     float: right;     width: 60%;     height: 24px;     margin-top: 12px;     text-indent: 10px;     border-radius: 5px;     box-shadow: 0 1px 0 rgba(255, 255, 255, 0.24), 0 1px 6px rgba(0, 0, 0, 0.45) inset;     border: none }  input:focus {     outline-width: 0 }  h2 {     position: relative; }  span {     position: absolute;     top: 2px;     right: 5px;     display: inline-block;     padding: 0 5px;     height: 20px;     border-radius: 20px;     background: #E6E6FA;     line-height: 22px;     text-align: center;     color: #666;     font-size: 14px; }  ol, ul {     padding: 0;     list-style: none; }  li input {     position: absolute;     top: 2px;     left: 10px;     width: 22px;     height: 22px;     cursor: pointer; }  p {     margin: 0; }  li p input {     top: 3px;     left: 40px;     width: 70%;     height: 20px;     line-height: 14px;     text-indent: 5px;     font-size: 14px; }  li {     height: 32px;     line-height: 32px;     background: #fff;     position: relative;     margin-bottom: 10px;     padding: 0 45px;     border-radius: 3px;     border-left: 5px solid #629A9C;     box-shadow: 0 1px 2px rgba(0, 0, 0, 0.07); }  ol li {     cursor: move; }  ul li {     border-left: 5px solid #999;     opacity: 0.5; }  li a {     position: absolute;     top: 2px;     right: 5px;     display: inline-block;     width: 14px;     height: 12px;     border-radius: 14px;     border: 6px double #FFF;     background: #CCC;     line-height: 14px;     text-align: center;     color: #FFF;     font-weight: bold;     font-size: 14px;     cursor: pointer; }  footer {     color: #666;     font-size: 14px;     text-align: center; }  footer a {     color: #666;     text-decoration: none;     color: #999; }  @media screen and (max-device-width: 620px) {     section {         width: 96%;         padding: 0 2%;     } }  @media screen and (min-width: 620px) {     section {         width: 600px;         padding: 0 10px;     } } 

ToDoList.js

$(function() {     // 页面每次加载,就自动渲染一次数据     load();     $("#title").on("keydown", function(event) {         // 判断用户按下了回车键(13)         if (event.keyCode == 13) {             if ($(this).val() == "") {                 alert("请输入待办事项!");             } else {                 // 先读取本地存取原来的数据                 var local = getData();                 // 把最新的数据追加给local                 local.push({ title: $(this).val(), done: false });                 // 把local存到本地存储                 saveData(local);                 load();                 // 加载完毕后删除input中的文本                 $(this).val("");             }         }     });      //删除操作     $("ol,ul").on("click", "a", function() {         // 获取本地存储         var data = getData();         // 修改数据         var index = $(this).attr("id");         // console.log(index);         // 元素.splice(从第几个位置开始删除,删除几个)         data.splice(index, 1);         // 保存到本地存储         saveData(data);         // 重新渲染页面         load();     });      // 正在进行、已经完成操作     $("ol,ul").on("click", "input", function() {         var data = getData();         var index = $(this).siblings("a").attr("id");         // console.log(index);         data[index].done = $(this).prop("checked");         saveData(data);         load();     });       // 读取本地存储的数据     function getData() {         var data = localStorage.getItem("todolist");         if (data !== null) {             // 本地存储的数据格式是字符串,需要转化成对象             return JSON.parse(data);         } else {             return [];         }     }     // 保存本地存储数据     function saveData(data) {         // 存储前要转化为字符串         localStorage.setItem("todolist", JSON.stringify(data));     }     // 渲染加载数据     function load() {         var data = getData();         // console.log(data);         // 遍历之前先清空ol和ul里的内容         $("ol,ul").empty();         var todoCount = 0; // 正在进行的个数         var doneCount = 0; // 已完成的个数         // 遍历数据data         $.each(data, function(i, n) {             // console.log(n);             // 追加数据,并创建自定义id索引号             if (n.done) {                 $("ul").prepend("<li><input type='checkbox' checked='checked'> <p>" + n.title + "</p> <a href='javascript:;' id=" + i + "></a></li>");                 doneCount++;             } else {                 $("ol").prepend("<li><input type='checkbox'> <p>" + n.title + "</p> <a href='javascript:;' id=" + i + "></a></li>");                 todoCount++;             }         });         // 修改显示的个数         $("#todocount").text(todoCount);         $("#donecount").text(doneCount);     } });