功能需求:
①列表渲染
②删除功能
③添加功能
④底部统计和清空
页面效果:
代码展示:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>小黑记事本</title><style>body {font-family: Arial, sans-serif;}.header {background-color: #f2f2f2;padding: 20px;}.new-todo {padding: 10px;width: 300px;margin-right: 10px;}.add {padding: 10px 20px;background-color: #4CAF50;color: white;border: none;cursor: pointer;}.main {padding: 20px;}.todo-list {list-style-type: none;padding: 0;}.todo {background-color: #fff;border: 1px solid #ddd;padding: 10px;margin-bottom: 10px;position: relative;transition: background-color 0.3s ease;}.todo:hover {background-color: #f0f0f0;}.index {font-weight: bold;margin-right: 10px;}.destroy {background-color: transparent;border: none;cursor: pointer;color: red;font-size: 16px;position: absolute;top: 50%;right: 10px;transform: translateY(-50%);opacity: 1;transition: opacity 0.3s ease;}.footer {background-color: #f2f2f2;padding: 20px;text-align: center;}.todo-count {margin-right: 20px;}.clear-completed {padding: 10px 20px;background-color: #ff6347;color: white;border: none;cursor: pointer;}</style>
</head><body><!-- 主体区域 --><section id="app"><!-- 输入框 --><header class="header"><h1>小黑记事本</h1><input v-model="todoName" placeholder="请输入任务" class="new-todo" /><button class="add" @click="add">添加任务</button></header><!-- 列表区域 --><section class="main"><ul class="todo-list"><li class="todo" v-for="(item, index) in list" :key="item.id"><div class="view"><span class="index">{{ index + 1 }}.</span><label>{{item.name}}</label><button @click="del(item.id)" class="destroy">删除</button></div></li></ul></section><!-- 统计和清空 ->如果没有任务,底部隐藏掉 ->v-show--><footer class="footer" v-show="list.length>0"><!-- 统计 --><span class="todo-count">合计:<strong>{{list.length}}</strong></span><!-- 清空 --><button @click="clear" class="clear-completed">清空任务</button></footer></section><!-- 底部 --><script src="js/vue.js"></script><script>const app = new Vue({el: '#app',data: {todoName: '',list: [{ id: 1, name: '跑步一公里' },{ id: 2, name: '跳绳俩百次' },{ id: 3, name: '游泳一百米' },]},methods: {del(id) {this.list = this.list.filter(item => item.id !== id);},add() {if (this.todoName.trim() === '') {alert('请输入任务名称');return;}this.list.unshift({id: Date.now(),name: this.todoName});this.todoName = '';},clear() {this.list = [];}}});</script>
</body></html>