前端案例:简易计算器的实现(dom操作、target、eval函数、try catch、switch-case)

简介: 前端案例:简易计算器的实现(dom操作、target、eval函数、try catch、switch-case)

一、案例效果

image.png


二、涉及要点

1. 文本域标签 <textarea></textarea> 的 readonly 属性用于设置文本域文字为只读;


2. DOM 获取元素,getElementById() 获取带有指定 id 的节点;


3. DOM 事件中的 target 是指获取事件的目标,即触发事件的真实元素。如下代码中:


btn.onclick = function (e) {
    //判断只有点击到按钮上才会将信息录入“显示屏”
    if (e.target.nodeName === "BUTTON") {

       e.target.nodeName,e是指触发事件,名称自己定义;target.nodeName 是获取触发事件元素的标签名,我们这里获取按钮 button,意为只有触发事件的元素为按钮时才执行下面逻辑。除此之外还有:

image.png

4. eval 函数


       eval() 函数用于计算 JavaScript 字符串,并把它作为脚本代码来执行。如果参数是一个表达式,eval() 函数将执行表达式。如果参数是 Javascript 语句,eval() 将执行 Javascript 语句。


       所以当我们点击按钮,将表达式写入“显示屏“,该函数便会自动执行计算。


5. try catch

//格式
try {
    tryCode - 尝试执行代码块
}
catch(err) {
    catchCode - 捕获错误的代码块
}
finally {
    finallyCode - 无论 try / catch 结果如何都会执行的代码块
}

三、完整代码+详细注释

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>简易计算器</title>
  <style>
    .calc {
      width: 300px;
      height: 400px;
      border: 2px solid #149985;
      border-radius: 10px;
      margin: auto;
      background-color: lightgray;
    }
    #btn {
      width: 90%;
      height: 320px;
      margin: 10px auto 0 auto;
      background-color: rgb(238, 234, 234);
    }
    #btn button {
      width: 80px;
      height: 35px;
      margin: 15px 0 0 3px;
      background-color: white;
      border: 1px solid #999;
      border-radius: 5px;
      font-size: 18px;
      font-weight: bolder;
    }
    #btn button:hover {
      background-color: #999;
      color: white;
      cursor: pointer;
    }
  </style>
</head>
<body>
  <div class="calc">
    <!-- 显示数字文本域 -->
    <!-- readonly设置文本域为只读 -->
    <textarea readonly name="" id="text"
      style="width: 90%;height: 30px;display: block;margin: 20px auto 0 auto;font-size: 24px;"></textarea>
    <!-- 键盘按钮 -->
    <div id="btn">
      <button>1</button>
      <button>2</button>
      <button>3</button>
      <button>4</button>
      <button>5</button>
      <button>6</button>
      <button>7</button>
      <button>8</button>
      <button>9</button>
      <button>0</button>
      <button>C</button>
      <button>+</button>
      <button>-</button>
      <button>*</button>
      <button>/</button>
      <button style="width: 98%;">=</button>
    </div>
  </div>
</body>
<script>
  //获取按键区域的元素(键盘)
  var btn = document.getElementById('btn');
  //绑定事件处理函数
  btn.onclick = function (e) {
    //判断只有点击到按钮上才会将信息录入“显示屏”
    if (e.target.nodeName === "BUTTON") {
      //获取文本域元素(显示屏)
      var text = document.getElementById('text');
      //switch 判断当前点击的按钮内容
      switch (e.target.innerHTML) {
        //点击C清空屏幕
        case 'C':
          text.value = '';
          break;
        //如果点击=,获得显示屏中的表达式并计算结果
        case "=":
          var str = text.value;
          //尝试计算显示屏中的内容
          try {
            //将显示屏的内容交给eval做计算,将结果再替换回显示屏中
            text.value = eval(str)
          } catch (err) {
            text.value = err;
          }
          break;
        //点击其他的按钮,将按钮内容追加到显示屏上
        default:
          text.value += e.target.innerHTML;
      }
    }
  }
</script>
</html>
相关文章
|
4天前
|
JavaScript 前端开发
|
24天前
|
前端开发 JavaScript
前端:实现一个 sleep 函数
在前端开发中,实现一个 `sleep` 函数可以用来暂停代码执行,模拟延迟效果,常用于测试或控制异步操作的节奏。该函数通常基于 `Promise` 和 `setTimeout` 实现,简单易用。
|
2月前
|
存储 前端开发 JavaScript
前端基础(十二)_函数高级、全局变量和局部变量、 预解析(变量提升)、函数返回值
本文介绍了JavaScript中作用域的概念,包括全局变量和局部变量的区别,预解析机制(变量提升),以及函数返回值的使用和类型。通过具体示例讲解了变量的作用域、函数的返回值、以及如何通过return关键字从函数中返回数据。
22 1
前端基础(十二)_函数高级、全局变量和局部变量、 预解析(变量提升)、函数返回值
|
2月前
|
前端开发 JavaScript
前端一键回到顶部案例
本文介绍了如何实现网页中的一键回到顶部功能,包括两种方法:第一种是通过HTML中的锚点跳转实现快速回到顶部;第二种是使用JavaScript的`scrollTo`方法结合`requestAnimationFrame`实现滚动动画效果,让页面滚动更加平滑自然。
45 1
前端一键回到顶部案例
|
1月前
|
存储 前端开发 Java
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
本文介绍了使用Kaptcha插件在SpringBoot项目中实现验证码的生成和验证,包括后端生成验证码、前端展示以及通过session进行验证码校验的完整前后端代码和配置过程。
74 0
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
|
2月前
|
存储 前端开发 JavaScript
前端基础(十一)_函数声明及调用、函数的形参与实参、arguments参数、函数的参数类型、函数中的问题
本文介绍了JavaScript中函数的声明及调用、形参与实参的概念、arguments对象的使用、函数参数的类型以及函数中this的作用。通过示例代码详细解释了函数如何接收参数、如何处理参数个数不匹配的情况,以及函数在不同上下文中this的指向。
22 1
|
2月前
|
JavaScript 前端开发
前端基础(十)_Dom自定义属性(带案例)
本文介绍了DOM自定义属性的概念和使用方法,并通过案例展示了如何使用自定义属性来控制多个列表项点击变色的独立状态。
41 0
前端基础(十)_Dom自定义属性(带案例)
|
2月前
|
JSON 前端开发 JavaScript
socket.io即时通信前端配合Node案例
本文介绍了如何使用socket.io库在Node.js环境下实现一个简单的即时通信前端配合案例,包括了服务端和客户端的代码实现,以及如何通过socket.io进行事件的发送和监听来实现实时通信。
35 2
|
2月前
|
前端开发
【前端web入门第五天】03 清除默认样式与外边距问题【附综合案例产品卡片与新闻列表】
本文档详细介绍了CSS中清除默认样式的方法,包括清除内外边距、列表项目符号等;探讨了外边距的合并与塌陷问题及其解决策略;讲解了行内元素垂直边距的处理技巧;并介绍了圆角与盒子阴影效果的实现方法。最后通过产品卡片和新闻列表两个综合案例,展示了所学知识的实际应用。
48 11
|
16天前
|
JavaScript
HTML DOM 节点树
HTML DOM 节点是指在 HTML 文档对象模型中,文档中的所有内容都被视为节点。整个文档是一个文档节点,每个 HTML 元素是元素节点,元素内的文本是文本节点,属性是属性节点,注释是注释节点。DOM 将文档表示为节点树,节点之间有父子和同胞关系。