当前位置:首页 > 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
分享给朋友:

相关文章

Vue实现弹幕漂浮效果

Vue实现弹幕漂浮效果

Vue实现弹幕弹幕漂浮效果 核心思路 通过动态生成弹幕DOM元素,利用CSS动画或JavaScript控制其从右向左移动,并通过Vue的数据驱动特性管理弹幕生命周期。 基础实现步骤 创建弹幕组件 定…

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现换肤

js实现换肤

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

js实现图片滚动效果

js实现图片滚动效果

使用CSS动画实现图片滚动 通过CSS的@keyframes和animation属性实现无缝滚动效果。将图片容器设置为横向排列,通过动画平移位置。 <style> .scroll-c…