vue3 css实现文字输出带光标显示,文字输出完毕,光标消失的效果

Vue实现过程如下:

html 复制代码
<template>
  <div >
    <p ref="dom_element" class="typing" :class="{over_fill: record_input_over}"></p>
  </div>
</template>
<script setup>
import {onMounted, ref} from "vue";
const wrap_time_out = ref()
const inner_time_out = ref()
const record_input_over = ref(false)
const dom_element = ref(null)

onMounted(()=>{
  // 也可以通过这种方式实现而不是通过ref
  // const typingElement = document.getElementsByClassName("typing")[0];
  const typingDelay = 50; // 每个字符打印的时间间隔
  const cursorDelay = 500; // 光标闪烁的时间间隔
  const text = "This is an example of typing animation.";
  function type_my() {
    // 计算出应该打印的文本
    const currentText  = text.slice(0, typingIndex);
    // 更新显示的文本和光标位置
    // typingElement.textContent = currentText;
    dom_element.value.textContent = currentText;

    // 如果还没打印完所有文本,则继续打印
    if (typingIndex < text.length) {
      typingIndex++;
      inner_time_out.value = setTimeout(type_my, typingDelay);
    }else {
      // 清除 定时器
      clearTimeout(wrap_time_out.value)
      clearTimeout(inner_time_out.value)
      // 当输入完成后通过控制样式将光标清除
      record_input_over.value = true
    }
  }
  let typingIndex = 0;

// 等待一段时间,让用户有时间看到光标
  wrap_time_out.value = setTimeout(type_my, cursorDelay);
})

</script>

<style >
html, body{
  height: 100%;
  width: 100%;
  //background-color: pink;
}

.typing {
  display: inline-block;
  white-space: nowrap;
  overflow: hidden;
  font-size: 24px;
  line-height: 1.5;
}
.typing::after{
  content: '|';
  animation: blink 0.8s infinite;
  padding-left: 5px;
}
.over_fill::after{
  content: "";
  animation: none;
  padding-left: 0;
}
@keyframes blink {
  50% {
    opacity: 0;
  }
}
</style>

效果如下:


输入完成则光标消失,效果如下:

相关推荐
jay神13 分钟前
基于 YOLOv8 的轴承缺陷检测(Web 版)
前端·人工智能·yolo
jay神21 分钟前
基于 YOLOv8 的森林火灾检测系统(Web 版)
前端·yolo
code2cat26 分钟前
HTML基础篇之第一张网页:从index.html到浏览器里的任务清单
前端·html
miss1 小时前
AI 改完不敢上线?OpenSpec 规约驱动开发实战
前端·代码规范·前端工程化
AiMan2 小时前
腾讯ima还是不可以导出左侧所有对话,只能单条导出,方法不对吗
前端
去伪存真2 小时前
并发量一高就装死?Agent 全链路“防猝死”手册
前端·agent
Moment2 小时前
AI 编程时代,聊聊我的 Mac mini 双屏桌面
前端·后端
AiMan2 小时前
先确认能不能一次把Microsofat Copilot所有内容打包一个文件导出
前端
总要学点什么2 小时前
第97篇:三维数据加载-城市建筑白模自定义着色器——让一条光带沿高度扫上去,快慢却由帧率说了算
前端·gis·webgl·cesium·着色器·空间分析·白模
上海懒图科技3 小时前
工厂厂区电子地图定位导航:厂区人车精准定位,安全合规双保障
前端·arcgis·vue