《全栈小实战:用HTML+CSS+JS+Java打造智能待办清单系统》

                       从零构建全栈待办清单:HTML+CSS+JS+Java技术栈实践

💡 引言

待办清单(Todo List)是检验开发者全栈能力的经典项目。今天我们将融合四大核心技术:

  • HTML:构建骨架

  • CSS:实现玻璃态新拟物设计

  • JavaScript:添加动态交互

  • Java:Spring Boot构建RESTful API

最终效果:响应式界面 + 实时数据同步 + 跨设备持久化存储

 一、前端核心技术实现(HTML/CSS/JS)

1. 超语义化HTML结构
<div class="glass-container">
  <h1>📝 智能待办清单</h1>
  
  <!-- 输入区域 -->
  <div class="input-group">
    <input type="text" id="taskInput" placeholder="添加新任务...">
    <button onclick="addTask()">➕ 添加</button>
  </div>

  <!-- 任务列表 -->
  <ul id="taskList" class="neumorphic-list">
    <!-- JS动态生成 -->
  </ul>

  <!-- 统计区域 -->
  <div class="stats-bar">
    <span>已完成: <span id="completedCount">0</span></span>
    <button onclick="clearCompleted()">🧹 清除已完成</button>
  </div>
</div>
2. 高级CSS技术运用

亮点技术:玻璃态(Glassmorphism) + 新拟物(Neumorphism)混合设计

/* 玻璃态背景 */
.glass-container {
  background: rgba(255, 255, 255, 0.2);
  backdrop-filter: blur(10px);
  border-radius: 20px;
  border: 1px solid rgba(255, 255, 255, 0.3);
  box-shadow: 0 8px 32px rgba(31, 38, 135, 0.2);
}

/* 新拟态按钮 */
button {
  background: linear-gradient(145deg, #e6e6e6, #ffffff);
  box-shadow: 5px 5px 10px #d9d9d9, 
              -5px -5px 10px #ffffff;
  transition: all 0.3s ease;
}

button:active {
  box-shadow: inset 5px 5px 10px #d9d9d9, 
              inset -5px -5px 10px #ffffff;
}

/* 任务项悬停动画 */
.task-item:hover {
  transform: translateY(-3px);
  box-shadow: 0 6px 12px rgba(0,0,0,0.1);
}
3. JavaScript高级特性

核心功能

  • 实时数据验证

  • 任务状态切换

  • 本地存储缓存

  • 动画反馈系统

    // 添加任务时的粒子动画
    function createParticleAnimation(x, y) {
      const particles = [];
      for (let i = 0; i < 15; i++) {
        const p = document.createElement('div');
        p.className = 'particle';
        p.style.left = `${x}px`;
        p.style.top = `${y}px`;
        document.body.appendChild(p);
        
        // 物理运动参数
        const angle = Math.random() * Math.PI * 2;
        const speed = Math.random() * 3 + 2;
        
        particles.push({
          element: p,
          x, y,
          vx: Math.cos(angle) * speed,
          vy: Math.sin(angle) * speed,
          life: 30
        });
      }
      
      // 动画循环
      function animate() {
        particles.forEach(p => {
          p.x += p.vx;
          p.y += p.vy;
          p.life--;
          
          p.element.style.transform = `translate(${p.x}px, ${p.y}px)`;
          p.element.style.opacity = p.life / 30;
          
          if(p.life <= 0) {
            p.element.remove();
          }
        });
        
        if(particles.some(p => p.life > 0)) {
          requestAnimationFrame(animate);
        }
      }
      animate();
    }

    二、Java后端实现(Spring Boot)

    1. RESTful API设计
    @RestController
    @RequestMapping("/api/todos")
    public class TodoController {
    
        @Autowired
        private TodoRepository repository;
    
        // 获取所有任务
        @GetMapping
        public List<Todo> getAllTodos() {
            return repository.findAll();
        }
    
        // 添加新任务
        @PostMapping
        public Todo addTodo(@RequestBody Todo todo) {
            todo.setCreatedAt(LocalDateTime.now());
            return repository.save(todo);
        }
    
        // 切换完成状态
        @PutMapping("/{id}/toggle")
        public ResponseEntity<Todo> toggleTodo(@PathVariable Long id) {
            return repository.findById(id)
                    .map(todo -> {
                        todo.setCompleted(!todo.isCompleted());
                        todo.setCompletedAt(todo.isCompleted() ? LocalDateTime.now() : null);
                        return ResponseEntity.ok(repository.save(todo));
                    })
                    .orElseGet(() -> ResponseEntity.notFound().build());
        }
    }
    2. 数据持久化设计
    @Entity
    public class Todo {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        
        private String title;
        private boolean completed;
        private LocalDateTime createdAt;
        private LocalDateTime completedAt;
        
        // 智能排序规则:未完成 > 新完成 > 旧完成
        public static Comparator<Todo> SMART_SORT = (t1, t2) -> {
            if(!t1.isCompleted() && t2.isCompleted()) return -1;
            if(t1.isCompleted() && !t2.isCompleted()) return 1;
            if(t1.isCompleted() && t2.isCompleted()) {
                return t2.getCompletedAt().compareTo(t1.getCompletedAt());
            }
            return t2.getCreatedAt().compareTo(t1.getCreatedAt());
        };
    }

     三、前后端协同关键技术

  • 1. Fetch API通信

  • // 获取任务列表
    async function loadTasks() {
      const response = await fetch('/api/todos');
      const tasks = await response.json();
      
      // 渲染到界面
      taskList.innerHTML = tasks.sort(Todo.SMART_SORT)
        .map(task => `
          <li class="task-item ${task.completed ? 'completed' : ''}" 
              data-id="${task.id}">
            <label>
              <input type="checkbox" ${task.completed ? 'checked' : ''}
                     onchange="toggleTask(${task.id})">
              <span>${escapeHTML(task.title)}</span>
            </label>
            <button onclick="deleteTask(${task.id})">🗑️</button>
          </li>
        `).join('');
    }
    2. 双端数据同步策略
    // WebSocket实时更新
    @Configuration
    @EnableWebSocketMessageBroker
    public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    
        @Override
        public void configureMessageBroker(MessageBrokerRegistry config) {
            config.enableSimpleBroker("/topic");
            config.setApplicationDestinationPrefixes("/app");
        }
    
        @Override
        public void registerStompEndpoints(StompEndpointRegistry registry) {
            registry.addEndpoint("/todo-websocket").withSockJS();
        }
    }
    
    // 任务更新时广播
    @Service
    public class TodoUpdateService {
        
        @Autowired
        private SimpMessagingTemplate messagingTemplate;
        
        public void broadcastUpdate(Todo todo) {
            messagingTemplate.convertAndSend("/topic/todoUpdates", todo);
        }
    } 
    2. 双端数据同步策略
    // WebSocket实时更新
    @Configuration
    @EnableWebSocketMessageBroker
    public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    
        @Override
        public void configureMessageBroker(MessageBrokerRegistry config) {
            config.enableSimpleBroker("/topic");
            config.setApplicationDestinationPrefixes("/app");
        }
    
        @Override
        public void registerStompEndpoints(StompEndpointRegistry registry) {
            registry.addEndpoint("/todo-websocket").withSockJS();
        }
    }
    
    // 任务更新时广播
    @Service
    public class TodoUpdateService {
        
        @Autowired
        private SimpMessagingTemplate messagingTemplate;
        
        public void broadcastUpdate(Todo todo) {
            messagingTemplate.convertAndSend("/topic/todoUpdates", todo);
        }
    }

     四、项目亮点总结

  • 现代化UI设计

    • 玻璃态 + 新拟物混合美学

    • 粒子动画反馈系统

    • 深色/浅色模式自适应

  • 智能数据管理

    • 自动保存到IndexedDB

    • 离线优先策略

    • WebSocket实时同步

  • 高级Java特性

    • JPA审计(@CreatedDate)

    • 自定义Repository查询

    • 智能排序算法

  • 性能优化

    • 虚拟滚动(长列表)

    • 请求防抖(Debounce)

    • 数据分页加载

    • 🔎 效果演示

    • (心血来潮随便做的,真的不是因为我的作业是发一篇博客hhh,老师如果你会来看的话,期末一定要给我个高分哦)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值