当前位置:首页 > VUE

vue实现计算器

2026-01-21 23:17:58VUE

Vue 实现计算器的方法

使用 Vue 实现计算器可以充分利用其响应式数据和组件化特性。以下是一个简单的实现方案:

创建 Vue 项目

使用 Vue CLI 或 Vite 初始化项目:

vue实现计算器

npm init vue@latest calculator
cd calculator
npm install

核心代码实现

src/App.vue 或单独组件中实现:

vue实现计算器

<template>
  <div class="calculator">
    <div class="display">{{ current || '0' }}</div>
    <div class="buttons">
      <button @click="clear">C</button>
      <button @click="sign">+/-</button>
      <button @click="percent">%</button>
      <button @click="divide" class="operator">÷</button>

      <button @click="append('7')">7</button>
      <button @click="append('8')">8</button>
      <button @click="append('9')">9</button>
      <button @click="times" class="operator">×</button>

      <button @click="append('4')">4</button>
      <button @click="append('5')">5</button>
      <button @click="append('6')">6</button>
      <button @click="minus" class="operator">-</button>

      <button @click="append('1')">1</button>
      <button @click="append('2')">2</button>
      <button @click="append('3')">3</button>
      <button @click="add" class="operator">+</button>

      <button @click="append('0')" class="zero">0</button>
      <button @click="dot">.</button>
      <button @click="equal" class="operator">=</button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      current: '',
      previous: null,
      operator: null,
      operatorClicked: false
    }
  },
  methods: {
    clear() {
      this.current = '';
    },
    sign() {
      this.current = this.current.charAt(0) === '-' ? 
        this.current.slice(1) : '-' + this.current;
    },
    percent() {
      this.current = parseFloat(this.current) / 100;
    },
    append(number) {
      if (this.operatorClicked) {
        this.current = '';
        this.operatorClicked = false;
      }
      this.current = `${this.current}${number}`;
    },
    dot() {
      if (this.current.indexOf('.') === -1) {
        this.append('.');
      }
    },
    setPrevious() {
      this.previous = this.current;
      this.operatorClicked = true;
    },
    divide() {
      this.operator = (a, b) => a / b;
      this.setPrevious();
    },
    times() {
      this.operator = (a, b) => a * b;
      this.setPrevious();
    },
    minus() {
      this.operator = (a, b) => a - b;
      this.setPrevious();
    },
    add() {
      this.operator = (a, b) => a + b;
      this.setPrevious();
    },
    equal() {
      this.current = `${this.operator(
        parseFloat(this.previous), 
        parseFloat(this.current)
      )}`;
      this.previous = null;
    }
  }
}
</script>

<style>
.calculator {
  width: 300px;
  margin: 50px auto;
  font-size: 24px;
}
.display {
  background: #f0f0f0;
  padding: 15px;
  text-align: right;
  border: 1px solid #ddd;
  border-radius: 5px 5px 0 0;
}
.buttons {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-gap: 1px;
}
button {
  padding: 20px;
  background: #fff;
  border: 1px solid #ddd;
  cursor: pointer;
}
button:hover {
  background: #eee;
}
.operator {
  background: #f0f0f0;
}
.zero {
  grid-column: span 2;
}
</style>

功能扩展建议

  1. 增加历史记录功能,存储之前的计算结果
  2. 实现科学计算器功能(三角函数、对数等)
  3. 添加键盘支持,允许用户使用键盘输入
  4. 实现主题切换功能(深色/浅色模式)
  5. 添加动画效果提升用户体验

部署与测试

运行开发服务器:

npm run dev

构建生产版本:

npm run build

这个实现包含了基本计算功能,包括加减乘除、百分比、正负号切换等操作。通过 Vue 的响应式特性,界面会自动更新计算结果。

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

相关文章

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed: {…

vue实现表格多行修改

vue实现表格多行修改

实现多行编辑表格 在Vue中实现表格的多行编辑功能,可以通过以下方法完成。这里以Element UI的表格组件为例,但思路适用于其他UI库或原生实现。 数据准备 定义表格数据和编辑状态管理变量:…

vue穿梭框组件实现

vue穿梭框组件实现

实现基础穿梭框组件 在Vue中实现穿梭框组件,可以使用<el-transfer>(Element UI)或手动实现。以下是手动实现的核心逻辑: <template> &…

vue实现右下角弹框

vue实现右下角弹框

实现右下角弹框的基本思路 在Vue中实现右下角弹框,通常需要结合CSS定位和Vue的组件化特性。弹框可以通过绝对定位固定在右下角,并通过Vue控制其显示与隐藏。 创建弹框组件 新建一个Vue组件(…

vue实现钟表

vue实现钟表

使用 Vue 实现动态钟表 以下是一个基于 Vue 3 的动态钟表实现方案,包含时分秒指针和数字时间显示。 模板部分 <template> <div class="clock-…

vue优秀实现

vue优秀实现

Vue.js 优秀实现方法 响应式数据管理 使用 Vue 的 ref 和 reactive 处理基础类型和对象类型数据,结合 computed 计算属性优化渲染性能。对于复杂状态,推荐 Pinia 替…