Vue 实现 任务列表
来源:互联网 发布:值乎不见了 编辑:程序博客网 时间:2024/06/05 02:18
直接上代码
html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>vue实现任务列表</title> <link rel="stylesheet" href="./homework01.css"> <script type='text/javascript' src='./vue.js'></script></head><body> <div id="app"> <div class="task-nav"> 任务计划列表 </div> <div class="task-add"> <h2>添加任务:</h2> <input type="text" placeholder="例如:吃饭睡觉打豆豆; 提示:+回车即可添加任务" v-model="title" v-on:keyup.enter="addTask" > <div class="task-state clearfix"> <div class="task-state-left">{{unFinishedTask}}个任务未完成</div> <ul class="task-state-right"> <li v-on:click="changePage('all')" v-bind:class="{ selected: page=='all' }" >所有任务</li> <li v-on:click="changePage('unfinished')" v-bind:class="{ selected: page=='unfinished' }" >未完成的任务</li> <li v-on:click="changePage('finished')" v-bind:class="{ selected: page=='finished' }" >完成的任务</li> </ul> </div> </div> <div class="task-list" > <h3>任务列表:</h3> <p class="task-list-none" v-show="!tasks.length" >还没添加任何任务</p> <ul class="task-list-have" v-show="!!tasks.length" > <li v-for="task in tasks" class="clearfix" v-show="page=='all' || (page=='unfinished' && !task.state) || (page=='finished' && task.state)" > <input type="checkbox" v-model="task.state" v-on:click="checkUnfinishedTask" > <input type="text" v-model="task.title" v-on:dblclick="editTask(task)" v-on:blur="finishEditTask(task)" v-on:keyup.enter="finishEditTask(task)" v-on:keyup.esc="loseEditTask(task)" v-bind:readonly="!task.edit" v-bind:class="{ selected: task.state }" > <div class="del-button" v-on:click="delTask(task)" ></div> </li> </ul> </div> </div> <script> var data = { title: '', tasks: [], unFinishedTask: 0, page: 'all' } var app = new Vue({ el: '#app', data: data, methods: { addTask: function () { var task = {}; task.title = this.title; task.extitle = task.title; task.state = false; task.edit = false; this.tasks.push(task); this.unFinishedTask += 1; this.title = undefined; }, delTask: function (task) { if(!task.state) { this.unFinishedTask -= 1; } var index = this.tasks.indexOf(task); this.tasks.splice(index,1); }, editTask: function (task) { task.edit = true; }, finishEditTask:function (task) { task.extitle = task.title; task.edit = false; }, loseEditTask: function (task) { task.title = task.extitle; task.edit = false; }, checkUnfinishedTask: function () { unfinishedTaskArray = []; this.tasks.forEach( function (item, index) { if(!item.state) { unfinishedTaskArray.push(item); } } ); this.unFinishedTask = unfinishedTaskArray.length; }, changePage: function (type) { this.page = type; } } }) </script></body></html>
css
html, body { width: 100%; margin: 0; padding: 0;}.task-nav { width: 100%; height: 36px; padding: 0 25%; box-sizing: border-box; background-color: #FF6600; text-align: left; font-size: 20px; line-height: 36px; color: #FFF;}.task-add { width: 50%; margin: 0 auto;}.task-add h2 { height: 42px; margin: 0; padding: 0; font-size: 22px; line-height: 42px;}.task-add input { width: 100%; height: 20px; margin: 0; padding: 10px 0;}.task-add .task-state { width: 100%; height: 50px; text-align: right; font-size: 16px; line-height: 50px;}.task-add .task-state .task-state-left { float: left; width: 20%; text-align: center; color: #F05A10;}.task-add .task-state .task-state-right { display: inline-block; width: 70%; height: 50px; margin: 0; padding: 10px 0; box-sizing: border-box; list-style: none; line-height: 30px;}.task-add .task-state .task-state-right li { display: inline-block; width: 30%; height: 30px; box-sizing: border-box; text-align: center; cursor: pointer;}.task-add .task-state .task-state-right li:hover { border: 1px solid #999; line-height: 28px;}.task-add .task-state .task-state-right li.selected { border: 1px solid #999; line-height: 28px;}.task-list { width: 50%; margin: 0 auto;}.task-list h3 { height: 42px; margin: 0; padding: 0; font-size: 22px; line-height: 42px;}.task-list .task-list-none { margin: 0; padding: 10px 0; font-size: 14px; text-indent: 1em; color: #666;}.task-list .task-list-have { margin: 0; padding: 0; box-sizing: border-box; border-top: 1px solid #999; list-style: none;}.task-list .task-list-have li { width: 100%; height: 50px; margin: 0; padding: 5px 0; border-bottom: 1px solid #999; box-sizing: border-box;}.task-list .task-list-have li input[type="checkbox"] { float: left; width: 8%; height: 20px; margin: 0; padding: 0; zoom: 200%;}.task-list .task-list-have li input[type="text"] { float: left; width: 80%; height: 40px; margin: 0; padding: 0; border: none; font-size: 20px;}.task-list .task-list-have li .selected { text-decoration: line-through;}.task-list .task-list-have li .del-button{ float: right; width: 6%; height: 40px; text-align: center; line-height: 40px; cursor: pointer; background: #FFF;}.task-list .task-list-have li .del-button:hover { background: url(./del.jpeg) no-repeat 50% 50%/ 80% 80%;}.clearfix:after { content: "."; display: block; clear: both; height: 0; overflow: hidden; visibility: hidden;}
任务可编辑,可添加,怎么搞都可以,就这么任性。
用什么label啊,一个input标签切换可读属性就能代替。
directive也不需要,自带的即可满足需求。
0 0
- Vue 实现 任务列表
- Vue.js做todo日常事务任务列表
- vue.js 实现 todo list 任务表单
- 利用VUE框架,实现列表分页功能
- [vue] todoList,待办项列表实现
- vue实现城市列表排序(中文)
- vue.js 入门案例,双向绑定实现任务清单
- vue.js 实现 todo list 任务表单-2
- 数据列表实现方式(基于Vue.js封装)
- vue中calss 动态绑定实现下拉列表
- 【IMWeb训练营作业】用Vue做任务列表To do list
- 【IMWeb训练营作业】用Vue做任务列表To do list
- vue通过滚动行为实现从列表到详情,返回列表原位置
- Vue列表循环
- vue列表首次刷新
- Vue列表过渡
- Vue列表过渡
- vue列表跳转处理
- Spring注解详解,@Autowired 与 @Resource 的区别
- 4.2.2 接口
- 【新手自学Cocos2d-x】2.打开Cocos2d-x工程示例。
- 【IMWeb训练营作业】todoList using vuejs [partial]
- linux运维-控制对文件的访问setfacl
- Vue 实现 任务列表
- linux运维-延时管理
- 【Spring实战】----Security4.1.3实现根据请求跳转不同登录页以及登录后根据权限跳转到不同页配置
- Android Study 之分分钟让你玩转EditText右下角实时显示输入字数
- Linux--RH134---unit 3 系统延迟及定时机制
- Hibernate关系映射文件一对多,多对一配置
- 头文件、库文件、静态库、动态库
- QtCreator: No valid kits found
- Leetcode-Longest Consecutive Sequence