Life is full of fun.
👋 春思乱,芳心碎。

不过为了实现之前说的,假设不输入 emoji 只是某些字段也可以触发,那我们可以先创建一个对象来存储要匹配的词组和对应的 emoji,如下:

// 创建对象存储匹配词组和对应的 emoji
const keywordToEmoji = {
  生日快乐: "\u{1F382}", // 蛋糕 emoji
  恭喜发财: "\u{1F9E7}"  // 红包 emoji
  // 添加更多词组和对应 emoji
}

然后再遍历关键词组映射对象,就齐活了。

// 检查输入文本中是否有匹配词组
for (const [keyword, emoji] of Object.entries(keywordToEmoji)) {
      if (commentText.includes(keyword)) {
        // 设置固定数量的 emoji
        const fixedEmojiCount = 10;
        for (let i = 0; i < fixedEmojiCount; i++) {
          setTimeout(() => {
            
          // 放入前面的 emoji 生成 div 函数,或者将生成 div 打包为一个函数直接调用

          }, delay * 100); // 每个 emoji 的下落延迟时间
          delay++;
        }
      }
}

这样就实现了在没有 emoji 的情况下,我们也可以检查某些词组来触发特效,最后再加上监听评论 Ajax 事件或者按钮事件之类,就可以成功触发上面的函数了。

// 监听评论提交事件,typecho示例:
document.addEventListener("typechoCommentPosted", function (e) {
  if (e.detail.status === "success") {
    checkForEmoji(e.detail.text);
  }
});

当然最后别忘了加上你喜欢的 css,结束!

.emoji-container{
  position: fixed;
  top: -20%;
  right: 50%;
  transform: translateX(50%);
  width: 40px;
  height: 40px;
  font-size:40px;
  border-radius: 50%;
  animation-name: riseUp;
  animation-duration: 8s;
  animation-fill-mode: both;
  z-index: 9999999;
}
@keyframes riseUp {
  0% { top: -20%; opacity: 0; }
  40% { top: 60%; opacity: 1; }
  80% { top: 90%; opacity: 0; }
  100% { top: 100%; opacity: 0; }
}

基本上整体思路和逻辑就是这样,不过实际应用中,我们可能要考虑到更多问题,例如是/否只含有 emoji,含有 emoji 的情况下是/否含有关键词,是/否只含有关键词等情况等等。

目前我大概的逻辑就是如果只含有多个 emoji,就随机选取多个 emoji,如果同时含有 emoji 和关键词,就一起显示。

效果图就不放了,可以评论区试试,哈哈。

关键词目前也设置了几个,也许哪天你评论的时候就会触发哈~

收工,关机,明天周末啦,周末愉快各位!

测试标签短文标签

Life is like a Design.
2