分享一个vue实现的记事本功能案例


Posted in Vue.js onApril 11, 2022

直接上代码:

<!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实现的记事本功能案例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
vue + el-form 实现的多层循环表单验证
Nov 25 Vue.js
如何正确解决VuePress本地访问出现资源报错404的问题
Dec 03 Vue.js
利用Vue实现简易播放器的完整代码
Dec 30 Vue.js
Vue实现简易购物车页面
Dec 30 Vue.js
Vue多选列表组件深入详解
Mar 02 Vue.js
vue中data改变后让视图同步更新的方法
Mar 29 Vue.js
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
Apr 17 Vue.js
vue 实现上传组件
May 31 Vue.js
一篇文章告诉你如何实现Vue前端分页和后端分页
Feb 18 Vue.js
vue elementUI表格控制对应列
Apr 13 Vue.js
vue使用watch监听属性变化
Apr 30 Vue.js
el-table-column 内容不自动换行的解决方法
Aug 14 Vue.js
vue代码分块和懒加载非必要资源文件
Apr 11 #Vue.js
vue打包时去掉所有的console.log
三种方式清除vue路由跳转router-link的历史记录
Apr 10 #Vue.js
vue route新窗口跳转页面并且携带与接收参数
Apr 10 #Vue.js
vue实力踩坑之push当前页无效
Apr 10 #Vue.js
vue实现Toast组件轻提示
Apr 10 #Vue.js
vue自定义右键菜单之全局实现
Apr 09 #Vue.js
You might like
对laravel in 查询的使用方法详解
2019/10/09 PHP
JSON 数据格式介绍
2012/01/13 Javascript
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
让页面上两个div中的滚动条(滑块)同步运动示例
2013/08/07 Javascript
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
xmlplus组件设计系列之图标(ICON)(1)
2017/05/05 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
vue环形进度条组件实例应用
2018/10/10 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
vuex页面刷新后数据丢失的方法
2019/01/17 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
2020/07/26 Javascript
jquery实现异步文件上传ajaxfileupload.js
2020/10/23 jQuery
python实现超简单端口转发的方法
2015/03/13 Python
Python中的ConfigParser模块使用详解
2015/05/04 Python
Python类的用法实例浅析
2015/05/27 Python
Python实现可自定义大小的截屏功能
2018/01/20 Python
Django unittest 设置跳过某些case的方法
2018/12/26 Python
Python3利用print输出带颜色的彩色字体示例代码
2019/04/08 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
世界上最大的汽车共享网站:Zipcar
2017/01/14 全球购物
倡议书格式
2014/04/14 职场文书
南京青奥会口号
2014/06/12 职场文书
敬业奉献模范事迹材料
2014/12/24 职场文书
反腐倡廉观后感
2015/06/08 职场文书
学生病假条怎么写
2015/08/17 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
小学五年级(说明文3篇)
2019/08/13 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python