vue实现AI问答Markdown打字机效果

上线效果

功能清单

  • AI问答,文字输出跟随打字机效果
  • 格式化回答内容(markdown格式)
  • 停止回答,复制回答内容
  • 回答时自动向下滚动
  • 全屏切换
  • 历史问答查看

主要技术

  • vue @2.7.1
  • markdown-it @14.1.0
  • @microsoft/fetch-event-source @2.0.1
  • highlight.js @10.7.1

实现思路

  • 后台接口支持流式返回也就是 :Accept: 'text/event-stream' 请求头
  • 前端通过fetch-event-source请求数据,也可以通过axios,但是要进行转换
  • 前端通过markdwon-it结合highlight.js显示返回的数据,并高亮和格式化代码

核心代码

1.markdown使用

2.接口请求

        通过 onmessage方法,返回接口数据,拼接后渲染。

避坑

  • 调试模式下要关闭compress,否则不会返回流,会一次性返回,无法实现打字机效果,参考如下图:
  • markdown输出后,代码无法靠左对齐,无法像下图这样:

        注意添加样式:

总结

        至此一个AI问答打字机效果的功能就实现了,核心在于:流式输出,markdown 格式化

        如果你觉得看完有价值,可以免费点个赞👍,也可以评论区一起学习交流。

        

<think>嗯,用户想在Markdown实现打字机动画效果。首先,我需要了解Markdown本身是否支持动画。Markdown是静态的,通常不支持动态效果,但可以通过结合其他工具或库来实现。 用户提到的React Typist和Flutter的Rich Typewriter都是可行的解决方案。React Typist适用于React项目,而Flutter的方案适合移动应用。不过用户可能是在网页环境中使用Markdown,比如在React组件里嵌入Markdown,这时候用React Typist可能更合适。 另外,纯CSS方法也是一个选项,虽然效果简单但不需要依赖库。比如使用CSS动画控制宽度和边框闪烁,但可能无法逐字显示。需要用到JavaScript吗?或者有没有其他变通方法? 还需要考虑用户的具体使用场景,比如是在静态网站生成器(如Hexo、VuePress)里,还是需要客户端渲染。不同的平台可能有不同的集成方式。例如,在VuePress中可以通过自定义组件来实现,结合CSS或JavaScript。 用户可能没有编程经验,所以需要给出不同难度级别的方案。比如纯CSS的简单方法,或者基于现有库的解决方案。同时要注意兼容性和定制化需求,比如控制每个字符的延迟或动画结束后的回调。 最后,需要验证这些方法是否真的适用于Markdown,比如在React中,可能需要将Markdown内容包裹在React Typist组件里,确保动态渲染。另外,要提供示例代码和步骤,帮助用户具体实施。</think># Markdown实现打字机动画效果的三种方案 ## 一、基于React的解决方案(推荐) 使用`react-typist`库实现动态文本渲染: ```jsx import Typist from 'react-typist'; import ReactMarkdown from 'react-markdown'; function AnimatedMarkdown({ content }) { return ( <Typist cursor={{ show: false }}> <ReactMarkdown children={content} /> </Typist> ); } ``` 此方案支持完整的Markdown语法解析,通过包裹`ReactMarkdown`组件实现逐字渲染效果[^1]。优势包括: - 自动处理段落换行 - 支持代码块同步动画 - 可配置字符间隔(通过`avgTypingDelay`属性) ## 二、纯CSS实现方案(基础版) 通过CSS动画模拟打字机效果: ```css @keyframes typing { from { width: 0 } to { width: 100% } } .typist { overflow: hidden; white-space: nowrap; animation: typing 3.5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值