当前位置:首页 > VUE

vue实现计算机

2026-02-24 19:14:28VUE

Vue 实现计算器的方法

使用 Vue 实现计算器可以结合其响应式数据绑定和组件化特性,以下是一个完整的实现方案:

创建 Vue 项目

通过 Vue CLI 或 Vite 初始化项目,确保安装最新版本的 Vue 3:

vue实现计算机

npm init vue@latest calculator
cd calculator
npm install

核心组件结构

src/App.vue 中构建计算器主体:

vue实现计算机

<template>
  <div class="calculator">
    <div class="display">{{ currentDisplay }}</div>
    <div class="buttons">
      <button 
        v-for="btn in buttons" 
        :key="btn" 
        @click="handleClick(btn)"
        :class="{ 'operator': ['+','-','×','÷'].includes(btn) }"
      >
        {{ btn }}
      </button>
    </div>
  </div>
</template>

数据与逻辑实现

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

const currentDisplay = ref('0');
const firstOperand = ref(null);
const operator = ref(null);
const waitingForSecondOperand = ref(false);

const buttons = [
  '7', '8', '9', '÷',
  '4', '5', '6', '×',
  '1', '2', '3', '-',
  '0', 'C', '=', '+'
];

const handleClick = (button) => {
  if (!isNaN(button) || button === '.') {
    handleNumberInput(button);
  } else if (['+','-','×','÷'].includes(button)) {
    handleOperator(button);
  } else if (button === '=') {
    handleEquals();
  } else if (button === 'C') {
    handleClear();
  }
};

const handleNumberInput = (num) => {
  if (waitingForSecondOperand.value) {
    currentDisplay.value = num;
    waitingForSecondOperand.value = false;
  } else {
    currentDisplay.value = currentDisplay.value === '0' ? num : currentDisplay.value + num;
  }
};

const handleOperator = (op) => {
  const inputValue = parseFloat(currentDisplay.value);

  if (firstOperand.value === null) {
    firstOperand.value = inputValue;
  } else if (operator.value) {
    const result = calculate(firstOperand.value, parseFloat(currentDisplay.value), operator.value);
    currentDisplay.value = String(result);
    firstOperand.value = result;
  }

  operator.value = op;
  waitingForSecondOperand.value = true;
};

const handleEquals = () => {
  if (operator.value && !waitingForSecondOperand.value) {
    const result = calculate(firstOperand.value, parseFloat(currentDisplay.value), operator.value);
    currentDisplay.value = String(result);
    firstOperand.value = null;
    operator.value = null;
  }
};

const handleClear = () => {
  currentDisplay.value = '0';
  firstOperand.value = null;
  operator.value = null;
  waitingForSecondOperand.value = false;
};

const calculate = (first, second, op) => {
  switch (op) {
    case '+': return first + second;
    case '-': return first - second;
    case '×': return first * second;
    case '÷': return first / second;
    default: return second;
  }
};
</script>

样式设计

<style scoped>
.calculator {
  width: 300px;
  margin: 50px auto;
  border: 1px solid #ccc;
  border-radius: 10px;
  overflow: hidden;
  box-shadow: 0 0 20px rgba(0,0,0,0.1);
}

.display {
  background: #222;
  color: white;
  font-size: 2em;
  padding: 20px;
  text-align: right;
}

.buttons {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1px;
  background: #ddd;
}

button {
  border: none;
  padding: 20px;
  font-size: 1.2em;
  cursor: pointer;
  background: white;
  transition: background 0.3s;
}

button:hover {
  background: #f0f0f0;
}

button.operator {
  background: #f5923e;
  color: white;
}

button.operator:hover {
  background: #e07d2e;
}
</style>

功能扩展建议

  • 添加键盘事件支持:监听键盘输入实现物理键盘操作
    
    onMounted(() => {
    window.addEventListener('keydown', handleKeyDown);
    });

onUnmounted(() => { window.removeEventListener('keydown', handleKeyDown); });

const handleKeyDown = (e) => { const key = e.key; if (/[0-9.]/.test(key)) handleClick(key); else if (key === '+') handleClick('+'); // 其他按键处理... };



- 历史记录功能:使用 Vuex 或 Pinia 存储计算历史
- 科学计算功能:扩展运算符处理更复杂的数学运算
- 主题切换:通过 CSS 变量实现暗黑模式等主题切换

该实现完整覆盖了基本计算器的所有功能,包括四则运算、连续运算、清除功能等,响应式设计确保在不同设备上正常显示。

标签: 计算机vue
分享给朋友:

相关文章

vue路由实现

vue路由实现

Vue 路由实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的基本实现步骤和核心功能。 安装 Vue Router 通过…

vue实现pwa

vue实现pwa

Vue 实现 PWA 的步骤 Vue 结合 PWA(Progressive Web App)可以创建离线可用的 Web 应用。以下是实现方法: 安装 Vue CLI 并创建项目 确保已安装 Vue…

vue 实现长按

vue 实现长按

实现长按功能的基本思路 在Vue中实现长按功能,通常需要监听元素的mousedown或touchstart事件,启动一个计时器。当用户按住元素超过设定的时间阈值时,触发长按回调函数。如果在时间阈值内触…

vue实现城市

vue实现城市

Vue 实现城市选择功能 使用 Element UI 的 Cascader 组件 Element UI 提供了一个 Cascader 级联选择器组件,非常适合实现城市选择功能。需要先安装 Elemen…

vue实现banner

vue实现banner

Vue实现Banner轮播 使用Vue实现Banner轮播可以通过第三方库如swiper或vue-awesome-swiper,也可以手动实现基础轮播效果。以下是两种常见方法: 使用vue-…

vue实现字幕

vue实现字幕

Vue 实现字幕功能 在 Vue 中实现字幕功能可以通过动态绑定数据和 CSS 动画来实现。以下是具体实现方法: 1. 基础字幕组件 创建一个字幕组件,通过 v-model 或 props 接收字…