前端小项目(1)——算数计算器


前言

     大家好,我是学化工的海潮,分享一个前端练手小项目。这段小项目实现了一个简单的计算器功能,当按钮被点击时,根据按钮的值执行不同的操作,包括清空结果、进行计算和追加值到输入框。核心函数是事件监听器和eval()函数。


1、代码实现效果

计算功能,c有clear功能

2、HTML代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>Basic calculator</title>
    <link rel="stylesheet" href="style.css">
  </head>

  <body>
     <div class="calculator">
      <input type="text" id="result" readonly>
      <div class="buttons">
        <button class="clear">C</button>
        <button class="operator">/</button>
        <button class="operator">*</button>
        
        <button class="operator">-</button> 
        <button class="number">7</button>
        <button class="number">8</button>
        <button class="number">9</button>
        <button class="operator">+</button>
        <button class="number">4</button>
        <button class="number">5</button>
        <button class="number">6</button>
        <button class="equals"  class="operator">=</button>
        <button class="number">1</button>
        <button class="number">2</button>
        <button class="number">3</button>
        <button class="number">0</button>
        <button class="decimal">.</button>
        

      </div>
     </div>


     <script src="index.js"></script>
  </body>

        多个按钮,注意按钮的类名

3、css代码

*{
  box-sizing: border-box;
  margin: 0;
}
.calculator{
  background-color: #f2f2f2;
  padding: 20px;
  max-width: 400px;
  margin: 0 auto;
  border: solid 1px #ccc;
  box-shadow: 0 2px 5px rgba(0, 0,0, 0.3);
  border-radius: 5px;
  margin-bottom: 40px;
}

#result{
  width: 100%;
  padding: 10px;
  
 
  margin-top: 15px;
  font-size: 24px;
  border-radius: 5px;
  border: none;
  box-shadow: 0 2px 5px rgba(0, 0,0, 0.3);
}
.buttons{
  display: grid;
  grid-template-columns: repeat(4,1fr);
  grid-gap: 10px;
  margin-top: 10px;
}

button{
  padding: 10px;
  font-size: 24px;
  border: none;
  box-shadow: 0 2px 5px rgba(0, 0,0, 0.3);
  border-radius: 5px;
  cursor: pointer;
  transition: background-color 0.3s;
}

button:hover{
  background-color: #ddd;
}
.clear{
  background-color: #ff4136;
}
.number,.decimal{
  background-color: #fff;

}
.operator{
  background-color: #0074d9;
  color:#fff;
}

.equals{
  background-color: #01ff70;
  color: #fff;
  grid-row: span 3;
}

4、JavaScript代码

const buttonsE1= document.querySelectorAll("button");
const inputFieldE1 =document.getElementById("result");



/* for(let i=0;i<buttonsE1.length;i++){
buttonsE1[i].addEventListener("click",()=>{
  const buttonValue =buttonsE1[i].textContent;
  console.log(buttonValue)
  if(buttonValue ==="C"){
    clearResult();
  }else if(buttonValue==="="){
    calculateResult();
  }else{
    appendValue(buttonValue);
  }

})
} */
buttonsE1.forEach((button)=>{
  button.addEventListener("click",()=>{
    const buttonValue =button.textContent;
    console.log(buttonValue)
    if(buttonValue ==="C"){
      clearResult();
    }else if(buttonValue==="="){
      calculateResult();
    }else{
      appendValue(buttonValue);
    }
  
  })
})


function clearResult(){
inputFieldE1.value="";
};

function calculateResult(){
  inputFieldE1.value=eval(inputFieldE1.value);
/*  const code ='console.log(inputFieldE1.value);';
 function a(code){
  code=Number(code);
 }
 a(); */



}

function appendValue(buttonValue){
  inputFieldE1.value+=buttonValue
};

5、代码分析

这段代码是一个简单的计算器应用程序的前端代码。下面解释一下代码的功能:

  1. 第一行代码通过 document.querySelectorAll("button") 选择所有的 <button> 元素,并将它们存储在 buttonsE1 变量中。
  2. 第二行代码通过 document.getElementById("result") 获取具有 id 为 "result" 的元素,并将其存储在 inputFieldE1 变量中。
  3. 注释部分是一个使用 for 循环的代码块,目前被注释掉了。它的作用是为每个按钮添加点击事件监听器。当按钮被点击时,根据按钮的值执行不同的操作。
  4. 接下来的代码块使用 buttonsE1.forEach 循环遍历所有的按钮,并为每个按钮添加点击事件监听器。当按钮被点击时,根据按钮的值执行不同的操作。
  5. clearResult 函数用于清空结果,将输入框的值设置为空字符串。
  6. calculateResult 函数用于计算结果,它使用 eval 函数来评估输入框中的表达式,并将结果赋值给输入框的值。
  7. appendValue 函数用于将按钮的值追加到输入框的值后面。

     这段代码实现了一个简单的计算器功能,当按钮被点击时,根据按钮的值执行不同的操作,包括清空结果、进行计算和追加值到输入框。


总结

提示:这里对文章进行总结:
     这段小项目实现了一个简单的计算器功能,当按钮被点击时,根据按钮的值执行不同的操作,包括清空结果、进行计算和追加值到输入框。核心函数是事件监听器和eval()函数。eval函数把传过来的字符串进行解析后进行数学计算,得出结果。

        有帮助点个关注哦😯😙😙

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
算数表达式求值可以使用栈来实现。具体的步骤如下: 1. 定义一个操作数栈和一个操作符栈。 2. 从左到右遍历表达式,如果当前字符是数字,将其压入操作数栈。 3. 如果当前字符是操作符,分以下情况处理: 1. 如果操作符栈为空或者栈顶操作符为左括号,将当前操作符压入操作符栈。 2. 如果当前操作符优先级高于栈顶操作符,将当前操作符压入操作符栈。 3. 如果当前操作符优先级低于或等于栈顶操作符,将栈顶操作符弹出,将操作数栈中的两个数弹出进行计算,并将结果压入操作数栈。重复此过程直到当前操作符可以压入操作符栈。 4. 如果当前操作符是右括号,将操作符栈中的操作符弹出,进行计算,直到遇到左括号为止,并将左括号弹出。 4. 表达式遍历完毕后,如果操作符栈不为空,按照上述方式弹出操作符进行计算,直到操作符栈为空。 5. 操作数栈中剩下的唯一一个数就是表达式的值。 下面是一个示例代码实现: ```python class Calculator: def __init__(self): self.op_stack = [] self.num_stack = [] def calculate(self, expression): for c in expression: if c.isdigit(): self.num_stack.append(int(c)) elif c in ['+', '-', '*', '/']: while self.op_stack and self.op_stack[-1] != '(' and self._compare(c, self.op_stack[-1]) <= 0: self._calculate() self.op_stack.append(c) elif c == '(': self.op_stack.append(c) elif c == ')': while self.op_stack[-1] != '(': self._calculate() self.op_stack.pop() while self.op_stack: self._calculate() return self.num_stack[-1] def _calculate(self): op = self.op_stack.pop() num2 = self.num_stack.pop() num1 = self.num_stack.pop() if op == '+': self.num_stack.append(num1 + num2) elif op == '-': self.num_stack.append(num1 - num2) elif op == '*': self.num_stack.append(num1 * num2) elif op == '/': self.num_stack.append(num1 / num2) def _compare(self, op1, op2): if op1 in ['+', '-'] and op2 in ['*', '/']: return -1 if op1 in ['*', '/'] and op2 in ['+', '-']: return 1 return 0 ``` 使用示例: ```python calculator = Calculator() result = calculator.calculate("3+2*4-(1+2)*3") print(result) # 输出 1 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值