当前位置:首页 > JavaScript

js实现打字

2026-03-14 06:49:24JavaScript

实现打字效果的方法

在JavaScript中实现打字效果可以通过多种方式完成,以下是几种常见的方法:

方法一:使用setInterval逐字显示

function typeWriter(text, element, speed) {
  let i = 0;
  const timer = setInterval(() => {
    if (i < text.length) {
      element.innerHTML += text.charAt(i);
      i++;
    } else {
      clearInterval(timer);
    }
  }, speed);
}

// 使用示例
const targetElement = document.getElementById('typing');
typeWriter("Hello, this is a typing effect!", targetElement, 100);

方法二:使用递归setTimeout

js实现打字

function typeWriter(text, element, speed, i = 0) {
  if (i < text.length) {
    element.innerHTML += text.charAt(i);
    setTimeout(() => typeWriter(text, element, speed, i + 1), speed);
  }
}

// 使用示例
const targetElement = document.getElementById('typing');
typeWriter("This is a recursive typing effect!", targetElement, 100);

方法三:带删除效果的打字

function typeWithDelete(fullText, element, typingSpeed, deletingSpeed, pause) {
  let i = 0;
  let isDeleting = false;

  function tick() {
    const currentText = fullText.substring(0, i);
    element.innerHTML = currentText;

    if (!isDeleting && i === fullText.length) {
      setTimeout(() => isDeleting = true, pause);
    } else if (isDeleting && i === 0) {
      isDeleting = false;
      setTimeout(tick, typingSpeed);
      return;
    }

    const speed = isDeleting ? deletingSpeed : typingSpeed;
    i += isDeleting ? -1 : 1;
    setTimeout(tick, speed);
  }

  tick();
}

// 使用示例
const targetElement = document.getElementById('typing');
typeWithDelete("This text types and deletes!", targetElement, 100, 50, 1000);

增强效果

添加光标闪烁效果

js实现打字

可以在HTML中添加一个光标元素,并通过CSS实现闪烁:

<span id="typing"></span><span class="cursor">|</span>
.cursor {
  animation: blink 1s infinite;
}

@keyframes blink {
  0%, 100% { opacity: 1; }
  50% { opacity: 0; }
}

多文本循环打字

const texts = ["First text", "Second text", "Third text"];
let textIndex = 0;

function cycleTexts(element, typingSpeed, deletingSpeed, pause) {
  typeWithDelete(texts[textIndex], element, typingSpeed, deletingSpeed, pause);
  textIndex = (textIndex + 1) % texts.length;
  setTimeout(() => cycleTexts(element, typingSpeed, deletingSpeed, pause), pause * 2);
}

// 使用示例
const targetElement = document.getElementById('typing');
cycleTexts(targetElement, 100, 50, 1000);

注意事项

  • 确保目标元素存在且为空,否则会追加到现有内容
  • 调整速度参数以获得理想的打字节奏
  • 对于更复杂的效果,可以考虑使用现成的库如Type.js
  • 在组件卸载时清除定时器,防止内存泄漏

这些方法提供了从简单到高级的打字效果实现,可以根据具体需求选择或组合使用。

标签: js
分享给朋友:

相关文章

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…