美文网首页
【Vue3+ElementPlus】打字机效果

【Vue3+ElementPlus】打字机效果

作者: MasonChan | 来源:发表于2023-05-04 03:32 被阅读0次
<script setup lang="ts">
import { ref, computed, onMounted } from 'vue';

const lastItemRef = ref("")
// const messages = "# v-md-editor\n\nVue3 的 markdown 编辑器插件我推荐 [v-md-editor](http://ckang1229.gitee.io/vue-markdown-editor/zh/#%E4%BB%8B%E7%BB%8D),正是你看到的这个文本编辑器,我会将其保留着,方便自己使用。各位客官也可以随意编辑,反正刷新页面后内容就不存在了。"
const messages = [
  {
    "role": "system",
    "content": "假设你是一个有用的助手"
  },
  {
    "role": "user",
    "content": "markdown 例子1"
  },
  {
    "content": "# v-md-editor\n\nVue3 的 markdown 编辑器插件我推荐 [v-md-editor](http://ckang1229.gitee.io/vue-markdown-editor/zh/#%E4%BB%8B%E7%BB%8D),正是你看到的这个文本编辑器,我会将其保留着,方便自己使用。各位客官也可以随意编辑,反正刷新页面后内容就不存在了。",
    "role": "assistant"
  },
  {
    "role": "user",
    "content": "markdown 例子2"
  },
  {
    "role": "assistant",
    "content": "# title\n```python\nimport json\njson.dumps()\n```\n在 Vue3 中使用 `<script setup>` 实现 markdown-it 渲染 Markdown,你可以使用 `ref` 函数来创建一个响应式对象,然后在组件中使用 `computed` 属性来将 Markdown 转换成 HTML。"
  }
]

const isLastItem = computed(() => {
  return (index: number) => index === messages.length - 1;
})

// 当前字符的偏移量,即第 n 个字符
let offset = 0
let stopTime = 20

const itemTypeWriter = computed(() => {
  return (inputContent: String) => {
  // console.log("inputContent.length: " + inputContent.length)
  
  // 当前字符
  let c = ""

  // 定义一个打字机函数:每调用一次,就打印 1 个字符,从而实现逐字打印效果
  const typeWriter = () => {
    // console.log("offset2: " + offset)

    if (offset < inputContent.length) {
      c = inputContent.charAt(offset)
      // console.log(c)
      lastItemRef.value += c
      offset++
      // console.log("offset3: " + offset)

      if (c === ",") {
        stopTime = 500
      }
      if (c === "。" || c === "!" || c === "?") {
        stopTime = 1000
      }
      console.log(stopTime)

      // 自我递归调用
      setTimeout(typeWriter, stopTime)
    }
  }

  // 调用打字机函数
  setTimeout(typeWriter, stopTime)
  // console.log("outputConent: " + lastItemRef.value)
  return lastItemRef.value
}
})

</script>

<template>
  <el-row>
    <el-col :span="0"></el-col>
    <el-col :span="24">
      <el-card shadow="hover" v-for="message, index in messages" :key="index" style="border-radius: 0;">
        <v-md-editor v-if="!isLastItem(index)" :model-value="message.content" mode="preview"></v-md-editor>
        <v-md-editor v-if="isLastItem(index)" :model-value="itemTypeWriter(message.content)" mode="preview"></v-md-editor>
      </el-card>
    </el-col>
    <el-col :span="0"></el-col>
  </el-row>
</template>

相关文章

  • 打字机效果

    更新时需要重置currentIndex为0;赋新值;再调用startTypewrite 附Github地址http...

  • UGUI打字机效果

    在NGUI里有一个现成的脚步可以给Text的文字设置为打字机的效果,而UGUI并没有给我们提供这个方法。 所以下面...

  • javascript 实现打字机效果

  • 2021-01-30

    PR中一些文字效果是如何做成的 1.文字打字机效果:选择文字工具——打开效果控件——在文本栏中选择所需的文字效果—...

  • 给我一首诗的时间

    前端入坑纪 59 今天来分享最简单版打字机效果 好,详解如下! OK,first things first! 点...

  • 【PPT制作】文字打字机效果

    使用软件:WPS演示2019版 制作步骤: 一、插入文本框,输入文字 二、设置动画 ①进入“动画”→选择“出现” ...

  • [JS插件]酷炫的打字机效果: Typed.js

    一. Type.js效果演示 Type.js是一个轻量级的插件, 用于实现页面文字的打字机效果. 它使用起来非常简...

  • 在Premiere里实现打字机效果

    在视频剪辑制作过程中,文字,或者说字体动效的设计,是经常遇到的工作。 而其中,文字的打字机效果可以说很好用。模拟真...

  • 【教程】VEGAS如何实现打字效果

    有很多人问我,用VEGAS能不能做出类似AE“打字机”的效果。 其实有很长一段时间里,我需要做打字效果时都是用AE...

  • 我想有个打字机

    我想有个打字机 我想有个打字机,叮—叮—叮—,打字的时候,声音听上去特别舒服,我想象着摸打字机键盘时的手感,光滑细...

网友评论

      本文标题:【Vue3+ElementPlus】打字机效果

      本文链接:https://www.haomeiwen.com/subject/bwfxsdtx.html