当前位置:首页 > 开发教程 > js/jQuery教程 >

vue实现记事本案例

时间:2022-04-11 15:39 来源:未知 作者:钕人如花 收藏

这篇文章主要为大家详细介绍了vue实现记事本案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了vue实现记事本案例的具体代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <!-- 引入样式 -->
  <link rel="stylesheet" href="./css/index.css">
</head>

<body>
  <!--
  1.用户输入待办事项,回车后添加到“正在进行”,并清空文本框 
  2.在“正在进行”列表中单击列表项,添加到 已完成 列表 
  3.在“已经完成”列表中单击列表项,添加到 正在进行 列表
  4.在响应列表项中点击 删除 删除 该项目。
 -->
  <div id="app">
    <header>
      <section>
        <label for="title"></label>
        <input type="text" v-model="thing" placeholder="添加ToDo" required="required" autocomplete="off" @keydown.13="add">
      </section>
    </header>
    <section>
      <h2>正在进行<span>{{ongoing.length}}</span></h2>
      <ol id="todolist" class="demo-box">
        <li v-for="(item,index) in ongoing" :key="item.id">
          <input type="checkbox" @click="addToDone(index)"> {{item.title}}
          <button @click="delGoing(index)">删除</button>
        </li>
      </ol>
      <h2>已完成<span>{{done.length}}</span></h2>
      <ul id="donelist">
        <li v-for="(item,index) in done" :key="item.id">
          <input type="checkbox" checked @click="addToGoing(index)"> {{item.title}}
          <button @click="delDone(index)">删除</button>
        </li>
      </ul>
    </section>
  </div>
  <footer>
    Copyright &copy; 2021 todolist.cn
  </footer>
  <script src="../vue.js"></script>
  <script>
    new Vue({
      el: "#app",
      data: {
        id: 4,
        //存储用户输入的信息
        thing: "",
        /* 正在进行 列表 */
        ongoing: [{
          id: 1,
          title: "吃饭"
        }, {
          id: 2,
          title: "睡觉"
        }],
        //已经完成 列表
        done: [{
          id: 3,
          title: "打豆豆"
        }]
      },
      methods: {
        //添加到待办事项
        add() {
          //组装一个对象,将对象添加到ongoing数组中。
          let obj = {
            id: this.id,
            title: this.thing
          };
          //新的对象产生,id自增,防止id重复。
          this.id++;
          /* 把获取到的值添加到待办事项 */
          this.ongoing.push(obj);
          //将thing的值设置为空,则输入框自动清空
          this.thing = "";
        },
        //添加到已经完成
        addToDone(index) {
          //将点击的数据 从ongoing 删除,添加到 Done中
          //splice(index,1)从index开始,删除一个元素。 splice会返回被删除的元素组成的数组。
          this.done.push(this.ongoing.splice(index, 1)[0])
        },
        /* 添加到正在进行 */
        addToGoing(index) {
          this.ongoing.push(this.done.splice(index, 1)[0])
        },
        /* 从正在进行中删除 */
        delGoing(index) {
          this.ongoing.splice(index, 1)
        },
        /* 从已经完成中删除 */
        delDone(index) {
          this.done.splice(index, 1)
        }
      }
    })
  </script>
</body>

</html>

样式部分

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;
}

li button{
 position: absolute;
 right: 10px;
 top: 50%;
 transform: translateY(-50%);
}

footer {
 color: #666;
 font-size: 14px;
 text-align: center;
}

@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;
 }
}

vue实现记事本案例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持源码搜藏网。


下一篇:没有了

js/jQuery教程阅读排行

最新文章