更新记录

1.0.0(2025-07-05)

v1.0.0

  • 初始版本发布
  • 支持基础打字机效果
  • 支持自定义速度和光标
  • 支持循环播放和动态控制

平台兼容性

uni-app(4.05)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - - - - - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - -

其他

多语言 暗黑模式 宽屏模式
× ×

vshare-Typewriter 打字机效果插件

一个用于uniapp的打字机效果插件,实现对话模型的平均速度逐字打印效果。

特性

  • ✅ 平均速度逐字打印,避免一坨一坨展现
  • ✅ 可自定义打字速度
  • ✅ 支持光标闪烁效果
  • ✅ 支持循环播放
  • ✅ 支持动态文本切换
  • ✅ 提供完整的控制方法
  • ✅ 支持完成回调
  • ✅ 兼容多端(H5、小程序、App)

安装使用

1. 引入组件

<template>
  <view>
    <vshare-typewriter :text="message" :speed="100" />
  </view>
</template>

<script>
import VshareTypewriter from '@/components/vshare-typewriter/vshare-typewriter.vue'

export default {
  components: {
    'vshare-typewriter': VshareTypewriter
  },
  data() {
    return {
      message: '这是一个打字机效果示例,文字会逐字显示。'
    }
  }
}
</script>

2. 全局注册(可选)

main.js 中全局注册:

import Vue from 'vue'
import VshareTypewriter from '@/components/vshare-typewriter/vshare-typewriter.vue'

Vue.component('vshare-typewriter', VshareTypewriter)

3. 使用插件方式(推荐)

import VshareTypewriter from '@/components/vshare-typewriter'

// 自动注册为 vshare-typewriter 组件
Vue.use(VshareTypewriter)

API 文档

Props

参数 类型 默认值 说明
text String '' 要显示的文本内容
speed Number 100 打字速度(毫秒/字符)
autoStart Boolean true 是否自动开始
showCursor Boolean true 是否显示光标
cursorBlinkSpeed Number 500 光标闪烁间隔(毫秒)
loop Boolean false 是否循环播放
loopDelay Number 2000 循环间隔(毫秒)
onComplete Function null 完成回调函数

Events

事件名 说明 回调参数
onComplete 打字效果完成时触发

Methods

通过 ref 可以调用以下方法:

方法名 说明 参数
start(text) 开始打字机效果 text: 可选,要显示的文本
stop() 停止打字机效果
reset() 重置打字机效果
showFullText() 立即显示完整文本

使用示例

基础用法

<template>
  <view>
    <vshare-typewriter :text="message" />
  </view>
</template>

<script>
export default {
  data() {
    return {
      message: '欢迎使用vshare-typewriter打字机效果插件!'
    }
  }
}
</script>

自定义速度

<template>
  <view>
    <!-- 快速打字 -->
    <vshare-typewriter :text="fastMessage" :speed="50" />

    <!-- 慢速打字 -->
    <vshare-typewriter :text="slowMessage" :speed="200" />
  </view>
</template>

循环播放

<template>
  <view>
    <vshare-typewriter 
      :text="message" 
      :loop="true" 
      :loopDelay="3000"
      @onComplete="onComplete"
    />
  </view>
</template>

<script>
export default {
  data() {
    return {
      message: '这条消息会循环播放'
    }
  },
  methods: {
    onComplete() {
      console.log('打字效果完成')
    }
  }
}
</script>

无光标效果

<template>
  <view>
    <vshare-typewriter :text="message" :showCursor="false" />
  </view>
</template>

动态控制

<template>
  <view>
    <vshare-typewriter ref="typewriter" :text="message" :autoStart="false" />
    <button @click="start">开始</button>
    <button @click="stop">停止</button>
    <button @click="reset">重置</button>
  </view>
</template>

<script>
export default {
  data() {
    return {
      message: '可以通过按钮控制打字效果'
    }
  },
  methods: {
    start() {
      this.$refs.typewriter.start()
    },
    stop() {
      this.$refs.typewriter.stop()
    },
    reset() {
      this.$refs.typewriter.reset()
    }
  }
}
</script>

动态文本切换

<template>
  <view>
    <vshare-typewriter ref="typewriter" :text="currentText" />
    <button @click="changeText">切换文本</button>
  </view>
</template>

<script>
export default {
  data() {
    return {
      texts: [
        '第一段文本',
        '第二段文本',
        '第三段文本'
      ],
      currentIndex: 0
    }
  },
  computed: {
    currentText() {
      return this.texts[this.currentIndex]
    }
  },
  methods: {
    changeText() {
      this.currentIndex = (this.currentIndex + 1) % this.texts.length
      this.$nextTick(() => {
        this.$refs.typewriter.start()
      })
    }
  }
}
</script>

样式自定义

插件提供了基础的样式,你可以通过CSS自定义外观:

<style>
/* 自定义打字机容器样式 */
.typewriter-container {
  background-color: #f0f0f0;
  padding: 20rpx;
  border-radius: 10rpx;
}

/* 自定义文本样式 */
.typewriter-text {
  font-size: 32rpx;
  line-height: 1.5;
  color: #333;
}

/* 自定义光标样式 */
.cursor {
  color: #007aff;
  font-weight: bold;
}
</style>

推荐配置

速度设置建议

// 快速展示
speed: 50

// 标准对话
speed: 100

// 重要信息
speed: 150

// 紧张氛围
speed: 200

常用属性组合

<!-- 循环播放重要信息 -->
<vshare-typewriter 
  :text="importantMessage" 
  :speed="120"
  :loop="true"
  :loopDelay="3000"
/>

<!-- 无光标标题 -->
<vshare-typewriter 
  :text="title" 
  :speed="80"
  :showCursor="false"
/>

<!-- 可控制的对话 -->
<vshare-typewriter 
  ref="dialogTypewriter"
  :text="dialogText" 
  :speed="100"
  :autoStart="false"
  @onComplete="onDialogComplete"
/>

注意事项

  1. 性能优化:对于长文本,建议适当调整速度,避免过于频繁的DOM更新
  2. 内存管理:组件会在销毁时自动清理定时器,无需手动处理
  3. 兼容性:插件兼容uniapp支持的所有平台
  4. 响应式:支持动态修改text属性,会自动重新开始打字效果

测试和示例

  • example.vue - 完整的使用示例
  • test.vue - 测试页面,包含各种功能演示

更新日志

v1.0.0

  • 初始版本发布
  • 支持基础打字机效果
  • 支持自定义速度和光标
  • 支持循环播放和动态控制

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问