实现一个chatGPT光标打字效果

打字状态分析

  1. loading - 在等待打字内容的时候光标会一直显示且闪烁
  2. tyeing - 在打字中光标会显示但不闪烁
  3. end - 在打字结束后光标隐藏

样式:

// 光标字符显示
.typing::after {
  content: '▌';
}
// 光标闪烁动画
.blinker::after {
  animation: blinker 1s step-end infinite;
}
@keyframes blinker {
  0% {
    visibility: visible;
  }
  50% {
    visibility: hidden;
  }
  100% {
    visibility: visible;
  }
}

内容打印功能实现

结合定时器和光标样式设置

 

**
 * @description:
 * @param {HTMLElement} dom - 打印内容的dom
 * @param {string} content - 打印文本内容
 * @param {number} speed - 打印速度
 * @return {void}
 */
function printText(dom, content, speed = 50) {
  let index = 0
  setCursorStatus(dom, 'typing')
  let printInterval = setInterval(() => {
    dom.innerText += content[index]
    index++
    if (index >= content.length) {
      setCursorStatus(dom, 'end')
      clearInterval(printInterval)
    }
  }, speed)
}

/**
 * @description: 设置dom的光标状态
 * @param {HTMLElement} dom - 打印内容的dom
 * @param {"loading"|"typing"|"end"} status - 打印状态
 * @return {void}
 */
function setCursorStatus(dom, status) {
  const classList = {
    loading: 'typing blinker',
    typing: 'typing',
    end: '',
  }
  dom.className = classList[status]
}

 原文参考:五分钟实现一个chatGPT打字效果 - 掘金

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值