分享一个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用mixin合并重复代码的实现
Nov 27 Vue.js
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
Dec 01 Vue.js
vue添加自定义右键菜单的完整实例
Dec 08 Vue.js
Vue实现简单购物车功能
Dec 13 Vue.js
vue 动态生成拓扑图的示例
Jan 03 Vue.js
vue element el-transfer增加拖拽功能
Jan 15 Vue.js
vue实现按钮切换图片
Jan 20 Vue.js
WebStorm无法正确识别Vue3组合式API的解决方案
Feb 18 Vue.js
用vite搭建vue3应用的实现方法
Feb 22 Vue.js
vue组件的路由高亮问题解决方法
May 11 Vue.js
vue3获取当前路由地址
Feb 18 Vue.js
vue选项卡切换的实现案例
Apr 11 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实现下载文件的两种方法
2013/07/05 PHP
php inc文件使用的风险和注意事项
2013/11/12 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
2012/01/15 Javascript
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
2014/06/06 Javascript
js中直接声明一个对象的方法
2014/08/10 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
nodejs基础应用
2017/02/03 NodeJs
jQuery ajax实现省市县三级联动
2021/03/07 Javascript
用Webpack构建Vue项目的实践
2017/11/07 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
angularjs $http调用接口的方式详解
2018/08/13 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
使用python解析xml成对应的html示例分享
2014/04/02 Python
Python卸载模块的方法汇总
2016/06/07 Python
Python实现扣除个人税后的工资计算器示例
2018/03/26 Python
通过Pandas读取大文件的实例
2018/06/07 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
出门问问全球官方商城:Tichome音箱和TicWatch智能手表
2017/12/02 全球购物
欧洲最大的品牌水上运动服装和设备在线零售商:Wuituit Outlet
2018/05/05 全球购物
欧洲最大的拼图游戏商店:JigsawPuzzle.co.uk
2018/07/04 全球购物
人力资源部副职的竞聘演讲稿
2014/01/07 职场文书
《小石潭记》教学反思
2014/02/13 职场文书
预备党员表决心书
2014/03/11 职场文书
李白故里导游词
2015/02/12 职场文书
自我评价优缺点范文
2015/03/11 职场文书
专职安全员岗位职责
2015/04/11 职场文书
社区党支部承诺书
2015/04/29 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书