心情低落想看句鸡汤:写了个随机短句生成器,点一下就换还能复制
【摘要】 偶尔需要一句打气的话,但翻收藏夹半天找不到。纯前端写了个励志短句生成器:内置一摞文案,点一下随机来一句,可复制可收藏,本地记喜欢的。技术内核是数组随机抽取 + 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)