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

脚本部分

<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. 难度分级 实现简单、中等、困难三个级别的测试文本,长度和复杂度逐渐增加。

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

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

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

    用vue实现打字测速

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

相关文章

vue实现slider

vue实现slider

Vue 实现 Slider 组件 使用 Vue 实现 Slider 组件可以通过原生开发或借助第三方库。以下是两种常见方法: 原生实现 Slider 创建一个基础的 Slider 组件,通过 v-m…

vue 实现单选

vue 实现单选

使用 v-model 绑定单选值 在 Vue 中,可以通过 v-model 绑定单选按钮的值。定义一个响应式数据(如 selectedOption),并将其与单选按钮的 value 属性关联。…

vue实现数组

vue实现数组

Vue 实现数组操作的方法 在 Vue 中,数组的操作需要特别注意响应式的问题。Vue 提供了一些方法来确保数组的变动能够触发视图更新。 响应式数组方法 Vue 对以下数组方法进行了封装,确保它们能…

vue实现分栏

vue实现分栏

Vue实现分栏的常见方法 使用CSS Flexbox布局 通过Flexbox可以快速实现分栏效果,适合大多数响应式布局场景 <template> <div class="con…

vue 实现登录

vue 实现登录

Vue 实现登录功能 创建登录表单组件 在 Vue 项目中创建一个登录表单组件(如 Login.vue),包含用户名和密码输入框以及提交按钮。使用 v-model 实现双向数据绑定。 <tem…

vue 实现平面

vue 实现平面

Vue 实现平面的方法 在 Vue 中实现平面效果通常涉及 CSS 样式、UI 框架或自定义组件的使用。以下是几种常见方法: 使用 CSS 样式 通过 Vue 的样式绑定或 scoped CSS 为…