当前位置:首页 > VUE

用vue实现打字测速

2026-01-23 11:02:35VUE

实现思路

使用Vue构建一个打字速度测试应用,核心功能包括计时、计算打字速度(字符/分钟或单词/分钟)以及准确率统计。需监听用户输入并与目标文本比对。

核心代码实现

模板部分

<template>
  <div class="typing-test">
    <h3>目标文本</h3>
    <div class="target-text">{{ targetText }}</div>

    <h3>你的输入</h3>
    <textarea 
      v-model="userInput" 
      @input="checkInput"
      :disabled="isCompleted"
    ></textarea>

    <div v-if="startTime">
      <p>用时: {{ elapsedTime }}秒</p>
      <p>速度: {{ typingSpeed }} CPM (字符/分钟)</p>
      <p>准确率: {{ accuracy }}%</p>
    </div>

    <button v-if="isCompleted" @click="resetTest">重新测试</button>
  </div>
</template>

脚本部分

用vue实现打字测速

<script>
export default {
  data() {
    return {
      targetText: 'The quick brown fox jumps over the lazy dog',
      userInput: '',
      startTime: null,
      endTime: null,
      isCompleted: false
    }
  },
  computed: {
    elapsedTime() {
      if (!this.startTime) return 0;
      const end = this.endTime || Date.now();
      return ((end - this.startTime) / 1000).toFixed(2);
    },
    typingSpeed() {
      if (!this.startTime) return 0;
      const minutes = this.elapsedTime / 60;
      return Math.round(this.userInput.length / minutes);
    },
    accuracy() {
      let correctChars = 0;
      for (let i = 0; i < this.userInput.length; i++) {
        if (this.userInput[i] === this.targetText[i]) {
          correctChars++;
        }
      }
      return ((correctChars / this.userInput.length) * 100).toFixed(2);
    }
  },
  methods: {
    checkInput() {
      if (!this.startTime) {
        this.startTime = Date.now();
      }

      if (this.userInput === this.targetText) {
        this.endTime = Date.now();
        this.isCompleted = true;
      }
    },
    resetTest() {
      this.userInput = '';
      this.startTime = null;
      this.endTime = null;
      this.isCompleted = false;
    }
  }
}
</script>

样式优化

<style scoped>
.typing-test {
  max-width: 600px;
  margin: 0 auto;
  padding: 20px;
}

.target-text {
  background: #f5f5f5;
  padding: 15px;
  margin-bottom: 20px;
  border-radius: 4px;
}

textarea {
  width: 100%;
  height: 150px;
  padding: 10px;
  border: 1px solid #ddd;
  border-radius: 4px;
  font-size: 16px;
  resize: none;
}

button {
  margin-top: 20px;
  padding: 10px 20px;
  background: #42b983;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}
</style>

功能扩展建议

  1. 多语言支持 添加不同语言的测试文本库,让用户可以选择不同语言进行测试。

  2. 难度分级 实现简单、中等、困难三个级别的测试文本,长度和复杂度逐渐增加。

    用vue实现打字测速

  3. 历史记录 使用localStorage保存用户的测试历史,显示最高速度和平均速度等统计数据。

  4. 实时反馈 在用户输入时,实时标记正确和错误的字符,提供更直观的反馈。

  5. 音效提示 在测试完成时添加音效反馈,增强用户体验。

标签: 测速vue
分享给朋友:

相关文章

用vue实现搜索查询

用vue实现搜索查询

实现搜索查询的基本思路 在Vue中实现搜索查询功能通常涉及以下几个核心部分:数据绑定、事件监听、过滤逻辑和UI反馈。以下是一个完整的实现方案。 数据绑定与输入框 创建一个Vue组件,包含一个输入框…

vue实现无线滚动列表

vue实现无线滚动列表

无限滚动列表的实现方法 在Vue中实现无限滚动列表通常结合监听滚动事件和动态加载数据。以下是几种常见方法: 使用自定义指令 创建自定义指令v-infinite-scroll监听滚动事件: Vu…

vue实现mvc

vue实现mvc

Vue 实现 MVC 模式 Vue 本身是一个 MVVM(Model-View-ViewModel)框架,但可以通过结构调整实现 MVC(Model-View-Controller)模式。以下是具体实…

vue实现ai

vue实现ai

Vue 实现 AI 功能 Vue.js 可以通过集成第三方 AI 服务或本地 AI 模型来实现 AI 功能。以下是几种常见的方法: 集成第三方 AI API 使用 Vue 调用如 OpenAI、Go…

vue 实现jqslidedown

vue 实现jqslidedown

在 Vue 中实现类似 jQuery 的 slideDown 效果,可以通过 Vue 的过渡系统或 CSS 动画结合动态样式绑定来实现。以下是几种实现方式: 使用 Vue Transition 组件…

vue实现递归

vue实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据(如菜单、评论列表、文件目录等)。以下是具体实现方法: 定义递归组件 通过 name 选项让组件可以递归调用自身:…