JS 實現計算器功能

来源:https://www.cnblogs.com/chandlerwong/archive/2020/04/14/12701572.html
-Advertisement-
Play Games

括弧功能未實現,後續更 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <tit ...


括弧功能未實現,後續更

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>計算器</title>
    <style>
        body,p,input,ul,li,div{
            margin: 0;
            padding: 0;
        }
        #calc{
            position: relative;
            border-radius: 10px;
            margin: 0 auto;
            width: 400px;
            height: 500px;
            background: #ccc;
        }
        p{
            text-align: center;
        }
        .f-text{
            padding-top: 10px;
           box-sizing: border-box;
           border: 0;
            margin: 0 auto;
            font-size: 30px;
            
            text-align: right;
            width: 400px;
            height: 60px;
        }
        ul{
            list-style-type: none;
            
        }
        ul li{
            
            float: left;
            width: 90px;
            height: 50px;
            margin: 25px 10px 0 0;
            font-size: 30px;
            font-family: Arial, Helvetica, sans-serif;
           
        }
        ul li a{
            margin: 0 auto;
            display: block;
            width: 60px;
            height: 60px;
            line-height: 50px;
            box-sizing: border-box;
            border-radius: 10px;
            box-shadow: white;
            text-align: center;
            text-decoration: none;
            color: white;
            background: black;
        }
        ul li a:hover{
            cursor: pointer;
            color: saddlebrown;
        }
        #formula{
            margin-left: -400px;
            box-sizing: border-box;
            border: 0;
            margin-top: -60px;
            position: absolute;
            width: 400px;
            height: 20px;
        }
    </style>
</head>
<body>
   <div id="calc">
       <p>簡易計算器</p>
        <input class="f-text" type="text" readonly="readonly" maxlength="9" value="0" />
        
            <ul>
                <li class="btn-1"><a href="javascript:void(0)">c</a></li>
                <li class="btn-1"><a href="javascript:void(0)">%</a></li>
                <li class="btn-1"><a href="javascript:void(0)">/</a></li>
                <li class="btn-1"><a href="javascript:void(0)">x</a></li>
                <li><a href="javascript:void(0)">7</a></li>
                <li><a href="javascript:void(0)">8</a></li>
                <li><a href="javascript:void(0)">9</a></li>
                <li class="btn-1"><a href="javascript:void(0)">-</a></li>
                <li><a href="javascript:void(0)">4</a></li>
                <li><a href="javascript:void(0)">5</a></li>
                <li><a href="javascript:void(0)">6</a></li>
                <li class="btn-1"><a href="javascript:void(0)">+</a></li>
                <li><a href="javascript:void(0)">1</a></li>
                <li><a href="javascript:void(0)">2</a></li>
                <li><a href="javascript:void(0)">3</a></li>
                <li class="btn-2"><a href="javascript:void(0)">=</a></li>
                <li class="btn-3"><a href="javascript:void(0)">0</a></li>
                <li><a href="javascript:void(0)">.</a></li>
                <li><a href="javascript:void(0)">(</a></li>
                <li><a href="javascript:void(0)">)</a></li>
            </ul>
        <input id="formula" type="text" readonly="readonly" value=""/>
   </div> 
</body>
</html>
<script>
    var calc=document.getElementById("calc");
    var a=calc.getElementsByTagName("a");
    var input=calc.getElementsByTagName("input")[0];
    var formula=document.getElementById("formula");
    var s=false;
    var i;
    
    
    for(i=0;i<a.length;i++){
        a[i].onfocus=function(){
            this.blur()
        };
        a[i].onclick=function(){
            switch(this.innerHTML){
                case "c":
                input.value=0;
                formula.value="";
                break;
                case "%":
                count("%")
                break;
                case "x":
                count("*")
                break;
                case "-":
                count("-")
                break;
                case "+":
                count("+")
                break;
                case "(":
                count("(")
                break;
                case ")":
                count(")")
                break;
                case "=":
                s || (formula.value+=input.value);
                        
                input.value=eval(formula.value.replace(/\%\/\*\-\+/,''));//輸入的值進行運算後得到的值
               
                input.value=input.value.substr(0,10).replace("NaN",0);//計算輸入變數和輸出結果最多前10位,如果不是數字返回0
              
                s=true;
                break;
                case ".":
                if(input.value.search(/[\.\%\/\*\-\+]/)!=-1)//輸入的值為非運算符時
                
                break;
                default:
                s && (input.value=0,formula.value="",s=false);
                input.value.length<10 &&(input.value=(input.value+this.innerHTML).replace(/^[0\%\/\*\-\+](\d)/,"$1"));
        

            }
        }
    }
    function count(d){
        
       var reg = /[\%\/\*\-\+]$/;
        if(s) 
        {   //錯誤處理
            formula.value=input.value + d; 
            input.value=d;
            s=false;
        }
        else 
        {   //正確處理
            reg.test(input.value) || (formula.value+=input.value);
            console.log('3',/[\%\/\*\-\+]$/.test(input.value));
           
            input.value=d;
            console.log("n",input.value);
            reg.test(formula.value) || (formula.value+=input.value);
            formula.value=formula.value.slice(-1)!=d ? formula.value.replace(/.$/,d):formula.value
       }
    }
</script>

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 老孟導讀:沒有接觸過音樂字幕方面知識的話,會對字幕的實現比較迷茫,什麼時候轉到下一句?看了這篇文章,你就會明白字幕so easy。 先來一張效果圖: 字幕格式 目前市面上有很多種字幕格式,比如srt, ssa, ass(文本形式)和idx+sub(圖形格式),但不管哪一種格式都會包含2個屬性:時間戳 ...
  • 用Moor做TODO app: * 基本使用: 依賴添加, 資料庫和表的建立, 對錶的基本操作. * 問題解決: 插入數據註意類型; 多個表的文件組織. * 常用功能: 外鍵和join, 資料庫升級, 條件查詢. ...
  • 引言 在我們學習編程之初,就學習過變數的賦值操作,同時也學習了將一個變數的值賦值給另外一個變數。對於交換兩個變數的值,很多童鞋都有解決方案。然鵝,對於面試官提出的不藉助第三變數來交換兩個變數的值,你能想到幾種解決方案呢? 如果你只知道一種方案,請你認真看下去... 如果你知道兩種方案,那麼你可以來了 ...
  • 前幾篇都是長篇大論,一次看完的確有些費盡,今天簡單些,分享一個開發中使用attr() 的技巧,可能大家都沒有這樣使用過。它配合ES6標準中模板字元串模塊使用。簡單看下模板字元串它的使用: // 傳統的 JavaScript 語言,輸出模板通常是這樣寫的(下麵使用了 jQuery 的方法)。 $('# ...
  • 首先是安裝 在index.js中引入樣式 跟著官網點組件 import React,{Component} from 'react'; import { Button } from 'antd'; class Counter extends Component{ render(){ console. ...
  • 生命周期函數指的是組件在某一時刻會自動執行的函數 constructor可以看成一個類的普通生命周期函數,但不是react獨有的生命周期函數 render() 是數據發生變化時會自動執行的函數,因此屬於react的生命周期函數 mounting只在第一次渲染時會執行 import React,{Co ...
  • 目錄 為什麼分析asap asap概述 asap源碼解析—Node版 參考 1.為什麼分析asap 在之前的文章 "async和await是如何實現非同步編程?" 中的 “淺談Promise如何實現非同步執行” 小節,提到了 Promise 非同步執行是通過 "asap" 這個庫來實現的。所以為了進一步深 ...
  • 3-1什麼是數組?變數用來存儲數據,一個變數只能存儲一個內容,如果要存儲多個數據怎麼辦?此時就需要用到數組,數組是一個值的集合,每個值都有一個索引號,從0開始,每個索引都有一個相應的值,根據需要添加更多數值。 1 <script type="text/javascript"> 2 var myarr ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...