当前位置:首页 > JavaScript

js怎么实现打字效果

2026-03-01 15:58:15JavaScript

实现打字效果的步骤

使用纯JavaScript实现打字效果,可以通过定时器和字符串截取模拟逐字显示的效果。

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

// 调用示例
const targetElement = document.getElementById('target');
typeWriter('这是要逐字显示的文字', targetElement, 100);

添加光标闪烁效果

为了增强视觉效果,可以添加一个闪烁的光标。

js怎么实现打字效果

function typeWriterWithCursor(text, element, speed) {
  let i = 0;
  const cursor = document.createElement('span');
  cursor.className = 'cursor';
  element.appendChild(cursor);

  const interval = setInterval(() => {
    if (i < text.length) {
      element.insertBefore(document.createTextNode(text.charAt(i)), cursor);
      i++;
    } else {
      clearInterval(interval);
    }
  }, speed);
}

// CSS样式
.cursor {
  display: inline-block;
  width: 2px;
  height: 1em;
  background-color: black;
  animation: blink 1s infinite;
}

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

支持删除效果

实现先打字后删除的循环效果。

js怎么实现打字效果

function typeAndDelete(text, element, speed, delay) {
  let i = 0;
  let isDeleting = false;

  function tick() {
    const currentText = element.textContent;

    if (!isDeleting && i < text.length) {
      element.textContent = text.substring(0, i + 1);
      i++;
      setTimeout(tick, speed);
    } else if (isDeleting && i > 0) {
      element.textContent = text.substring(0, i - 1);
      i--;
      setTimeout(tick, speed / 2);
    } else {
      isDeleting = !isDeleting;
      setTimeout(tick, delay);
    }
  }

  tick();
}

使用CSS动画实现打字效果

纯CSS也可以实现类似效果,但灵活性较差。

.typewriter {
  overflow: hidden;
  border-right: 2px solid;
  white-space: nowrap;
  animation: typing 3s steps(30), blink-caret 0.5s step-end infinite;
}

@keyframes typing {
  from { width: 0 }
  to { width: 100% }
}

@keyframes blink-caret {
  from, to { border-color: transparent }
  50% { border-color: black }
}

使用第三方库

如果项目允许使用第三方库,Typed.js是一个成熟的选择。

// 引入Typed.js后
new Typed('#element', {
  strings: ['第一段文字', '第二段文字'],
  typeSpeed: 50,
  backSpeed: 30,
  loop: true
});

每种方法各有优缺点,纯JavaScript实现最灵活但代码量稍多,CSS实现简单但功能有限,第三方库功能丰富但增加依赖。根据项目需求选择合适方案。

标签: 效果js
分享给朋友:

相关文章

h5如何实现vr效果

h5如何实现vr效果

使用WebXR API实现VR效果 WebXR是浏览器中实现VR/AR的核心API,支持设备姿态追踪、渲染交互等功能。需在支持WebXR的设备(如Oculus、HTC Vive)或浏览器模拟环境中运行…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaS…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: fu…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…