分享一个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 相关文章推荐
vue3.0实现点击切换验证码(组件)及校验
Nov 18 Vue.js
Vue3 实现双盒子定位Overlay的示例
Dec 22 Vue.js
vue下拉刷新组件的开发及slot的使用详解
Dec 23 Vue.js
vue中watch的用法汇总
Dec 28 Vue.js
vue 动态创建组件的两种方法
Dec 31 Vue.js
vue 实现图片懒加载功能
Dec 31 Vue.js
Vue 事件的$event参数=事件的值案例
Jan 29 Vue.js
详解Vue3.0 + TypeScript + Vite初体验
Feb 22 Vue.js
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
Vue h函数的使用详解
Feb 18 Vue.js
vue修饰符.capture和.self的区别
Apr 22 Vue.js
使用vuex-persistedstate本地存储vuex
Apr 29 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
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
php类自动加载器实现方法
2015/07/28 PHP
图片连续滚动代码[兼容IE/firefox]
2009/06/11 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
js时间日期和毫秒的相互转换
2013/02/22 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
jquery图片滚动放大代码分享(1)
2015/08/25 Javascript
原生javascript实现匀速运动动画效果
2016/02/26 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
Node.js学习之查询字符串解析querystring详解
2017/09/28 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
微信小程序导航栏跟随滑动效果的实现代码
2019/05/14 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
Python合并两个字典的常用方法与效率比较
2015/06/17 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
Flask框架URL管理操作示例【基于@app.route】
2018/07/23 Python
python日志logging模块使用方法分析
2019/05/23 Python
基于python图像处理API的使用示例
2020/04/03 Python
requests在python中发送请求的实例讲解
2021/02/17 Python
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
CSS3 Calc实现滚动条出现页面不跳动问题
2017/09/14 HTML / CSS
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
给交警的表扬信
2014/01/12 职场文书
运动会广播稿20字
2014/02/18 职场文书
六查六看六改心得体会
2014/10/14 职场文书
2014年化验员工作总结
2014/11/18 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
学者《孟子》名人名言
2019/08/09 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书
vue前端工程的搭建
2021/03/31 Vue.js
django注册用邮箱发送验证码的实现
2021/04/18 Python