You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术求助:实现逐字打印-删除-再打印文本动画遇异常

问题:实现逐字打印-删除-再打印的文本动画效果

我需要实现这样的文本动画效果:先逐字打印一段文本,打印完成后以相同速度逐字删除这段文本,最后再用同样速度逐字打印第二段文本。

第一次尝试的代码及问题

我先写了如下代码:

JavaScript

const text1 = "Your first sentence here"; // 输入第一段文本
const text2 = "Your second sentence here"; // 输入第二段文本

let i = 0;

function typeSentence(text, element) {
  const interval = setInterval(() => {
    if (i === text.length) {
      clearInterval(interval);
      if (text === text1) {
        clearText();
      }
    } else {
      element.text(element.text() + text[i]);
      i++;
    }
  }, 100); // 动画速度(可调整)
}

function clearText() {
  const interval = setInterval(() => {
    if (!$("#loading-text").text()) {
      clearInterval(interval);
      typeSentence(text2); // 调用打印第二段文本
    } else {
      $("#loading-text").text($("#loading-text").text().substring(0, $("#loading-text").text().length - 1));
    }
  }, 100); // 动画速度(可调整)
}

typeSentence(text1, $('#loading-text'));

CSS

#loading-text {
    font-size: 24px;
    font-weight: bold;
    text-align: center;
    margin: 20px auto;
    width: 50%;
    opacity: 1;
}

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<div id="loading-text"></div>

这段代码能正常打印并删除第一段文本,但无法打印第二段文本。


修改后的代码及新问题

根据之前的思路,我对代码做了修改:

JavaScript

const text1 = "Your first sentence here"; // 输入第一段文本
const text2 = "Your second sentence here"; // 输入第二段文本

const texts = [text1, text2]; // 文本数组
const element = $('#loading-text'); // 显示文本的元素

let i = 0;
let currentTextIndex = 0; // 当前文本在数组中的索引

function typeSentence() {
  if (i < texts[currentTextIndex].length) {
    element.text(element.text() + texts[currentTextIndex][i]);
    i++;
  } else {
    if (currentTextIndex < texts.length - 1) {
      // 清空元素并切换到下一段文本
      clearText();
    } else {
      clearInterval(tId); // 所有文本完成后停止动画
    }
  }
}

function clearText() {
  i = 0; // 重置字符索引
  currentTextIndex++; // 切换到下一段文本
  element.text(""); // 直接清空元素内容
}

// 开始打印第一段文本
const tId = setInterval(typeSentence, 100); // 动画速度(可调整)

CSS

#loading-text, #loading-text2 {
    font-size: 24px;
    font-weight: bold;
    text-align: center;
    margin: 20px auto;
    width: 50%;
    opacity: 1;
}

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<div id="loading-text"></div>

这次修改后,代码能正常打印第二段文本,但出现了新问题:第一段文本打印完成后没有按预期逐字删除,而是直接立即消失,随后开始打印第二段文本。


内容的提问来源于stack exchange,提问作者Wp-PHP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:26:00