🚀 用代码搭建「心情小窝」:一个极简情绪记录工具的实现 📝

🌟 项目初衷

每次想记录当下的心情,总觉得社交平台太喧嚣,记事本又太冰冷------于是动手做了个「心情小窝」,用最朴素的代码,装下那些细碎的情绪碎片。今天就来拆解它的架构和代码逻辑~


🛠️ 核心架构设计

整体采用「前端轻量化 + 本地存储」方案,适合个人私密场景:

  • 技术栈:原生 HTML + CSS + JavaScript 🌱(拒绝冗余框架,够用就好)
  • 数据存储:浏览器 LocalStorage 🗄️(隐私优先,无需服务器)
  • 交互逻辑:单页无跳转设计 🔄(流畅记录不打断思路)

💻 核心代码展示

1. 页面结构(HTML)

html 复制代码
<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <title>我的心情小窝</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <div class="container">
    <h1>🌈 心情小窝</h1>
    <p>把今天的情绪偷偷藏在这里吧~</p>

    <!-- 输入区 -->
    <div class="input-area">
      <textarea placeholder="今天发生了什么?心情如何?" id="mood-content"></textarea>
      <div class="mood-select">
        <span>心情标签:</span>
        <button class="mood-btn" data-mood="happy">😊 开心</button>
        <button class="mood-btn" data-mood="sad">😢 难过</button>
        <button class="mood-btn" data-mood="calm">😌 平静</button>
      </div>
      <button id="save-btn">💾 保存心情</button>
    </div>

    <!-- 记录展示区 -->
    <div class="records-area">
      <h2>📖 心情记录</h2>
      <div id="records-list">
        <!-- 记录会通过JS动态插入 -->
        <p class="empty-tip">还没有记录,写下第一条心情吧~</p>
      </div>
    </div>
  </div>

  <script src="app.js"></script>
</body>
</html>

2. 数据存储逻辑(JavaScript)

javascript 复制代码
// 存储结构设计:每条心情包含内容、标签、时间戳
class MoodStorage {
  // 保存新心情
  saveMood(content, mood) {
    const moodData = {
      id: Date.now(), // 用时间戳当唯一ID
      content,
      mood,
      time: new Date().toLocaleString() // 格式化时间
    };
    // 从LocalStorage读取已有数据
    const existing = JSON.parse(localStorage.getItem('moods') || '[]');
    existing.push(moodData);
    // 存回LocalStorage
    localStorage.setItem('moods', JSON.stringify(existing));
    return moodData;
  }

  // 获取所有心情记录
  getAllMoods() {
    return JSON.parse(localStorage.getItem('moods') || '[]');
  }
}

// 实例化存储对象
const moodStore = new MoodStorage();

3. 交互核心逻辑(JavaScript)

javascript 复制代码
// 保存按钮点击事件
document.getElementById('save-btn').addEventListener('click', () => {
  const content = document.getElementById('mood-content').value;
  const selectedMood = document.querySelector('.mood-btn.active')?.dataset.mood;
  
  if (!content || !selectedMood) {
    alert('请写下心情并选择标签哦~');
    return;
  }
  
  // 保存数据
  const newMood = moodStore.saveMood(content, selectedMood);
  // 刷新页面展示
  renderMoodRecords();
  // 清空输入框
  document.getElementById('mood-content').value = '';
});

// 渲染心情记录
function renderMoodRecords() {
  const recordsList = document.getElementById('records-list');
  const allMoods = moodStore.getAllMoods();
  
  if (allMoods.length === 0) {
    recordsList.innerHTML = '<p class="empty-tip">还没有记录,写下第一条心情吧~</p>';
    return;
  }
  
  // 倒序展示(最新的在前面)
  recordsList.innerHTML = allMoods.reverse().map(mood => `
    <div class="mood-card" data-id="${mood.id}">
      <div class="mood-tag ${mood.mood}">
        ${mood.mood === 'happy' ? '😊' : mood.mood === 'sad' ? '😢' : '😌'}
      </div>
      <div class="mood-content">${mood.content}</div>
      <div class="mood-time">${mood.time}</div>
      <button class="delete-btn">🗑️ 删除</button>
    </div>
  `).join('');
}

🧩 架构设计亮点

  1. 数据隐私优先 🔒

    用 LocalStorage 替代云端数据库,所有心情记录只存在自己的设备里,适合记录私密情绪。

  2. 极简可扩展 🧱

    核心功能拆分为「存储层(MoodStorage)」和「视图层(render函数)」,后续想加新功能(比如心情统计),直接在存储层加方法即可。

  3. 轻量化体验

    不依赖任何框架,加载速度快,哪怕离线也能使用------毕竟情绪记录往往就在一念之间,不能等~


🌈 最后想说

其实好的工具不一定需要复杂的技术,就像这个「心情小窝」,几行代码就能搭建一个属于自己的情绪角落。如果你也想拥有,不妨试试用相似的思路,改改样式或功能,让它更贴合你的习惯~

💡 比如可以加个「心情日历」视图,或者按标签筛选记录,代码就在那里,怎么玩都由你定~

相关推荐
再学一点就睡3 小时前
手写 Promise 静态方法:从原理到实现
前端·javascript·面试
再学一点就睡4 小时前
前端必会:Promise 全解析,从原理到实战
前端·javascript·面试
前端工作日常4 小时前
我理解的eslint配置
前端·eslint
前端工作日常5 小时前
项目价值判断的核心标准
前端·程序员
90后的晨仔5 小时前
理解 Vue 的列表渲染:从传统 DOM 到响应式世界的演进
前端·vue.js
OEC小胖胖6 小时前
性能优化(一):时间分片(Time Slicing):让你的应用在高负载下“永不卡顿”的秘密
前端·javascript·性能优化·web
烛阴6 小时前
ABS - Rhomb
前端·webgl
植物系青年6 小时前
10+核心功能点!低代码平台实现不完全指南 🧭(下)
前端·低代码
植物系青年6 小时前
10+核心功能点!低代码平台实现不完全指南 🧭(上)
前端·低代码
小小李程序员6 小时前
JSON.parse解析大整数踩坑
开发语言·javascript·json