当前位置:首页 > 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);

添加光标闪烁效果

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

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; }
}

支持删除效果

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

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是一个成熟的选择。

js怎么实现打字效果

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

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

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

相关文章

css制作卷边效果

css制作卷边效果

使用伪元素和渐变实现卷边效果 通过CSS伪元素和线性渐变可以模拟纸张卷边的视觉效果。这种方法不需要额外元素,仅通过::before或::after伪元素实现。 .element { positi…

js实现图片上传

js实现图片上传

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

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现防洪

js实现防洪

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

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…