vue3实现打字机的效果,可以换行

之前看了很多文章,效果是实现了,就是没有自动换行的效果,参考了文章写了一个,先上个效果图,卡顿是因为模仿了卡顿的效果,还是很丝滑的

目录

效果图:

![请添加图片描述](https://i-blog.csdnimg.cn/direct/d8ef33d83dd3441a87d6d033d9e7cafa.gif

代码如下

原理:

1.在你需要显示换行的地方插入换行符:\n

2.div上用innerHTML展示数据

js 复制代码
  <div class="msg-text cursor-ani" :innerHTML="formattedText"></div>

  let answer = ref(''); // 打字机内容
  let timer = ref<any>(); // 定时器
  let interTime = ref(10); // 初始化间隔时间
  let interArr = ref([20, 30, 10, 20, 80, 30, 15, 400, 50, 20]);
  let dialogueAnswer = ref('');//当前文本
  const formattedText = computed(() => {
    return dialogueAnswer.value.replace(/\n/g, '<br>');
  });
    let e = `我们并不是为了活着而活着,但是我们也是为了\n 活着而活着,生命本身就是一种巨大的力量,我们应当敬畏生命,把活着、活好,当成生命追求的极致的目标,让生命散发最大限度的光和热。苦难无处不在,生活处处艰险,我们只有在经历苦难后依然选择绽放笑容,那才是真正懂得了人生的意义----余华<<活着>>`;

  /**调用打字机,模拟获取到数据调用打字机*/
  function onTypewriterFun() {
    console.log('🚀 ~ onTypewriterFun ~ onTypewriterFun:');
    if (e) {
      		answer.value = e; // 打字机文本内容
     		clearInterval(timer.value); // 清除定时器
      		timer.value = setInterval(setContent, interTime.value);
    	}
      }

  function setContent() {
    if (dialogueAnswer.value.length >= answer.value.length) {
      // 说明文本已全部输出,清除定时器,结束执行
      clearInterval(timer.value);
      return;
    } else {
      dialogueAnswer.value += answer.value.charAt(dialogueAnswer.value.length);
      interTime.value = interArr.value[Math.floor(Math.random() * 10)];
      clearInterval(timer.value);
      timer.value = setInterval(setContent, interTime.value);
    }
  }


  .cursor-ani {
    position: absolute;
    top: 220px;
    left: 40%;
    width: 500px;
    height: 500px;
    z-index: 999;
    background-color: #333;
    color: #ffffff;
  }

  .cursor-ani::after {
    content: '';
    position: absolute;
    width: 1px;
    height: 16px;
    background: #333;
    transform: translateX(3px) translateY(3px);
    animation: cursor-blinks 0.8s infinite forwards;
  }

  @keyframes cursor-blinks {
    from {
      opacity: 0;
    }

    to {
      opacity: 1;
    }
  }
相关推荐
声声codeGrandMaster9 小时前
Vue入门2
前端·vue.js·vue
等什么君!1 天前
初识Vue3(详细版)
前端·vue
占星安啦1 天前
使用Electron将vue项目改桌面程序
electron·vue·桌面应用
洛小豆1 天前
为啥我关不掉页面?Chrome扩展开发中的那些坑
前端·javascript·chrome·vue
萧仁武2 天前
【Vue】以RuoYi框架前端为例,ElementUI封装图片上传组件——将图片信息转成base64后提交到后端保存
vue·ruoyi·base64
you来有去2 天前
vue3使用ruoyi框架出现Does the file exist
vue
dawn1912282 天前
Vue入门之生命周期
前端·javascript·vue.js·前端框架·vue
韶君3 天前
Vue3+ElementPlus 实现动态主题切换
elementui·vue
一 乐4 天前
学校快递站点管理|基于springboot学校快递站点管理设计与实现(源码+数据库+文档)
java·spring boot·vue·论文·源码·毕设·毕设定制