心情低落想看句鸡汤:写了个随机短句生成器,点一下就换还能复制

举报
茉莉风铃 发表于 2026/09/20 10:15:08 2026/09/20
【摘要】 偶尔需要一句打气的话,但翻收藏夹半天找不到。纯前端写了个励志短句生成器:内置一摞文案,点一下随机来一句,可复制可收藏,本地记喜欢的。技术内核是数组随机抽取 + navigator.clipboard 复制 + localStorage 收藏夹 + 去重不连出同一句。

有些时候就是想看一句打气的话,但手机收藏夹塞了一百条,真要找反而刷不到。我想要个极简网页:打开就随机蹦一句,不顺眼点一下换一句,遇到喜欢的随手复制或存起来。文案我自备一摞,纯前端随机抽,不依赖任何接口。

一、文案池与随机抽

把所有句子放数组,抽一个展示,关键是"别连着抽中同一句":

const quotes = [
  '今天的努力,是给未来的自己写信。',
  '慢一点也没关系,只要在往前走。',
  '你不需要很厉害才能开始,但需要开始才能厉害。',
  // ...更多
];
let last = -1;
function next() {
  let i;
  do { i = Math.floor(Math.random() * quotes.length); }
  while (i === last && quotes.length > 1);   // 避免连出同一句
  last = i;
  box.textContent = quotes[i];
}

用 do...while 让新下标不等于上一次的 last,池子大于 1 时保证不连重复。文案少的时候这招最有用,不然容易"刚换完又回到上一句"显得假。

二、一键复制

看中一句想发朋友圈或存笔记,点复制:

async function copy() {
  try {
    await navigator.clipboard.writeText(box.textContent);
    tip.textContent = '已复制 ✓';
  } catch {
    // file:// 下没权限时回退
    const ta = document.createElement('textarea');
    ta.value = box.textContent; document.body.appendChild(ta);
    ta.select(); document.execCommand('copy'); ta.remove();
    tip.textContent = '已复制 ✓';
  }
}

先试 navigator.clipboard,失败(比如本地 file:// 打开)再走 textarea + execCommand 老路。这样展览馆 https 环境和本地双击打开都能用。

三、喜欢的存本地

遇到戳心的,点收藏进 localStorage,单独一个列表回看:

let fav = JSON.parse(localStorage.getItem('favQuote') || '[]');
function saveFav() {
  const t = box.textContent;
  if (!fav.includes(t)) fav.unshift(t);
  if (fav.length > 50) fav.pop();
  localStorage.setItem('favQuote', JSON.stringify(fav));
}

includes 去重防止一句存好几遍,unshift 新的在前,pop 限 50 条。收藏夹其实是个很小的"私人语录本",比翻社交平台收藏靠谱。

四、随机出句的小讲究

做法 体验
纯随机可能连重复 略假
记 last 跳过上一句 顺滑
收藏夹去重 不堆重复句

小结

励志短句生成器把文案放数组,do...while 跳过上一条保证不连重复,点一下就换。navigator.clipboard 复制、失败回退 execCommand,本地和展览馆都能用;喜欢的句子 includes 去重后存 localStorage 限 50 条,攒成私人语录本。文案自己维护,想加哪句直接 push 进数组。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。