Skip to content

v-typewriter

Typewriter text animation.

Since: 1.5.0

Usage

Basic

vue
<template>
  <span v-typewriter="'Hello, World!'"></span>
</template>

With Options

vue
<template>
  <span v-typewriter="{
    text: 'Typing animation',
    speed: 100,
    cursor: '_',
    onComplete: () => console.log('Done!')
  }"></span>
</template>

Loop Mode

vue
<template>
  <span v-typewriter="{
    text: 'Loop animation',
    loop: true,
    deleteDelay: 1000
  }"></span>
</template>

API

Options

OptionTypeDefaultDescription
textstring''Text to type
speednumber50Typing speed in ms per character
cursorstring'|'Cursor character
cursorBlinkbooleantrueBlink cursor
loopbooleanfalseLoop animation
deleteSpeednumber30Delete speed (defaults to speed/2)
deleteDelaynumber1500Delay before deleting in loop mode
pauseDelaynumber500Delay at end before deleting
onComplete() => void-Callback when typing complete
onChar(char: string, index: number) => void-Callback on each character

Binding Types

ts
type TypewriterBinding = string | TypewriterOptions

Examples

Multiple Lines

vue
<template>
  <div>
    <p v-typewriter="{ text: 'First line', speed: 50 }"></p>
    <p v-typewriter="{ text: 'Second line', speed: 50, delay: 2000 }"></p>
  </div>
</template>

Dynamic Text

vue
<template>
  <span v-typewriter="{ text: message, speed: 80 }"></span>
  <button @click="changeMessage">Change Message</button>
</template>

<script setup>
import { ref } from 'vue'

const message = ref('Hello, World!')

function changeMessage() {
  message.value = 'New message!'
}
</script>

With HTML

vue
<template>
  <span v-typewriter="{
    text: 'Hello <strong>World</strong>!',
    html: true,
    speed: 50
  }"></span>
</template>

Composable API

For programmatic use, you can use the useTypewriter composable:

typescript
import { useTypewriter } from 'directix'

const { start, stop, pause, resume, isTyping, text } = useTypewriter({
  text: 'Hello World',
  speed: 50,
  loop: false
})

// Start typing
start()

// Stop and clear
stop()

// Pause
pause()

// Resume
resume()

UseTypewriterReturn

PropertyTypeDescription
start() => voidStart typing
stop() => voidStop and clear
pause() => voidPause typing
resume() => voidResume typing
isTypingRef<boolean>Whether currently typing
textRef<string>Current displayed text

Code Generator

Quick Code Generator
<template>
  <div v-typewriter>
    <!-- Typewriter text animation. directive -->
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'

// Configure your options here
const options = {}
</script>

Released under the MIT License.