当前位置:首页 > VUE

vue实现打字机

2026-03-26 22:43:02VUE

Vue 实现打字机效果

使用 CSS 动画实现基础效果

在 Vue 中可以通过 CSS 动画和动态绑定文本内容实现简单的打字机效果。定义一个 CSS 类来控制光标闪烁和文本显示:

.typewriter {
  overflow: hidden;
  border-right: 0.15em solid orange;
  white-space: nowrap;
  margin: 0 auto;
  letter-spacing: 0.15em;
  animation: 
    typing 3.5s steps(40, end),
    blink-caret 0.75s step-end infinite;
}

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

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

在 Vue 模板中应用这个样式:

vue实现打字机

<template>
  <div class="typewriter">{{ displayText }}</div>
</template>

使用 JavaScript 逐字显示

对于更可控的逐字显示效果,可以通过定时器逐步构建字符串:

export default {
  data() {
    return {
      fullText: 'Hello, this is a typewriter effect in Vue!',
      displayText: '',
      charIndex: 0
    }
  },
  mounted() {
    this.typeWriter()
  },
  methods: {
    typeWriter() {
      if (this.charIndex < this.fullText.length) {
        this.displayText += this.fullText.charAt(this.charIndex)
        this.charIndex++
        setTimeout(this.typeWriter, 100)
      }
    }
  }
}

添加删除效果

要实现先打字后删除的循环效果,可以扩展上述方法:

vue实现打字机

methods: {
  typeWriter() {
    if (this.charIndex < this.fullText.length) {
      this.displayText += this.fullText.charAt(this.charIndex)
      this.charIndex++
      setTimeout(this.typeWriter, 100)
    } else {
      setTimeout(this.deleteText, 1000)
    }
  },
  deleteText() {
    if (this.displayText.length > 0) {
      this.displayText = this.displayText.slice(0, -1)
      setTimeout(this.deleteText, 50)
    } else {
      this.charIndex = 0
      setTimeout(this.typeWriter, 500)
    }
  }
}

使用第三方库

对于更复杂的效果,可以考虑使用专门的字幕动画库如 typeit

import TypeIt from 'typeit'

export default {
  mounted() {
    new TypeIt('#typewriter', {
      strings: ['First sentence', 'Second sentence'],
      speed: 100,
      breakLines: false,
      loop: true
    }).go()
  }
}

响应式文本更新

当需要动态更改显示文本时,使用计算属性或监视器:

watch: {
  fullText(newVal) {
    this.displayText = ''
    this.charIndex = 0
    this.typeWriter()
  }
}

这些方法提供了从简单到高级的打字机效果实现方案,可以根据具体需求选择合适的方式。CSS 动画适合静态文本,JavaScript 方案提供更多控制,而第三方库则能快速实现复杂效果。

标签: 打字机vue
分享给朋友:

相关文章

vue如何实现放大缩小

vue如何实现放大缩小

Vue实现放大缩小功能的方法 在Vue中实现元素的放大缩小功能,可以通过CSS变换、第三方库或直接操作DOM样式来实现。以下是几种常见的方法: 使用CSS transform属性 通过绑定Vue的d…

vue实现granfana

vue实现granfana

Vue 实现类似 Grafana 的仪表盘 要在 Vue 中实现类似 Grafana 的仪表盘功能,需要结合数据可视化库、状态管理和 UI 组件。以下是关键步骤和推荐工具: 数据可视化库 使用 E…

vue实现jqueryui

vue实现jqueryui

Vue 实现 jQuery UI 功能 在 Vue 项目中实现类似 jQuery UI 的功能,可以通过原生 Vue 组件或第三方库来实现。以下是几种常见 jQuery UI 功能的 Vue 替代方案…

vue 全景实现

vue 全景实现

Vue 全景实现方案 在Vue中实现全景效果,通常需要结合WebGL或第三方库来处理3D场景渲染。以下是几种常见方法: 使用Three.js库 Three.js是一个强大的WebGL库,适合创建3D…

vue实现长按

vue实现长按

Vue 实现长按功能的方法 在 Vue 中实现长按功能可以通过原生事件监听或自定义指令完成。以下是几种常见实现方式: 使用原生事件监听 通过 @mousedown 和 @mouseup 或 @tou…

vue 动画实现

vue 动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要分为内置组件和第三方库集成。 使用 Vue 内置过渡组件 Vue 的 <transition> 和 <transiti…