實現了一個簡易的計算器

計算器的界面如下:

在這里插入圖片描述
實現過程:

  1. 通過html和css編寫這樣一個界面
  2. JavaScript實現功能

在通過JavaScript實現計算器功能的過程中,其實使用的都是一些基本指數。主要包括以下幾點:

  1. If/else 分支.
  2. For 循環
  3. JavaScript 函數
  4. 箭頭函數
  5. && 和 || 操作符
  6. 如何使用textContent屬性修改文本
  7. 如何使用事件代理模式添加事件

實現過程其實主要關注的是一些細節問題,例如:

  • 通過事件代理監聽按鍵:
const calculator = document.querySelector(.calculator’)
const keys = calculator.querySelector(.calculator__keys’)keys.addEventListener(‘click’, e => {if (e.target.matches(‘button’)) {// Do something}
})
  • 通過data-action確定點擊按鍵的類型
const key = e.target
const action = key.dataset.action

data-action是通過這樣的方式賦值的:

在這里插入圖片描述

如果沒有data-action,則代表是數字。

  • 考慮在一個計算器中可能會被按的鍵類型:數字鍵(0-9)、操作鍵 (+,-,×,÷)、小數點鍵、等號鍵、清除鍵。在這個過程中,最主要就是要獲取到被按到的鍵和當前應該顯示的數值,我們可以通過textContent和點擊按鍵的.calculator__display分別獲取到這兩個值。
const display = document.querySelector('.calculator__display')keys.addEventListener('click', e => {if (e.target.matches('button')) {const key = e.targetconst action = key.dataset.actionconst keyContent = key.textContentconst displayedNum = display.textContent// ...}
})
  • 當操作者按小數點時,我們需要將.添加到已經顯示的數字后面。
if (action === 'decimal') {display.textContent = displayedNum + '.'
}
  • 當操作者按操作符時,我們給操作符按鈕添加一個名字叫is-depressed的類名。
if (action === 'add' || action === 'subtract' || action === 'multiply' || action === 'divide') {key.classList.add('is-depressed')
}
  • 當操作者再次點擊了數字鍵,之前顯示的數字應該被替換成新的數組。操作鍵也應該被解除“被點擊”的狀態。我們可以使用forEach循環遍歷所有的按鍵,去移除is-depressed類
keys.addEventListener('click', e => {if (e.target.matches('button')) {const key = e.target// ...// Remove .is-depressed class from all keysArray.from(key.parentNode.children).forEach(k => k.classList.remove('is-depressed'))}
})
  • 當操作者點擊等號鍵,計算器應該根據三個值:第一個輸入計算器中的數字、操作符、第二個輸入計算器中的數字,計算一個結果。在計算之后,結果會替換當前已顯示的值出現在屏幕上。
const calculate = (n1, operator, n2) => {let result = ''if (operator === 'add') {result = n1 + n2} else if (operator === 'subtract') {result = n1 - n2} else if (operator === 'multiply') {result = n1 * n2} else if (operator === 'divide') {result = n1 / n2}

這個簡單的功能就完成啦!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163866.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163866.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163866.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

日志分析對決:揭示 ELK 與 GrayLog 的優勢和差異

🎏:你只管努力,剩下的交給時間 🏠 :小破站 日志分析對決:揭示 ELK 與 GrayLog 的優勢和差異 前言第一:ELK Stack簡介第二:GrayLog簡介架構:主要特性: 第三&am…

騰訊待辦關停,怎么在手機上記錄待辦清單并設置提醒?

如果你之前一直在騰訊待辦這款微信小程序中記錄待辦事項,那么你就會發現小程序中彈窗的“業務關停通知”彈窗,查看其中的內容可知,由于業務方向調整,騰訊待辦將于2023年12月20日全面停止運營并下架,這就意味著我們無法…

面試:MyBatis問題

文章目錄 什么是MyBatis?MyBatis的核心組件有哪些?能說說MyBatis的工作原理嗎?MyBatis的工作流程是怎樣的?Mybaits 的優點 & 缺點MyBatis 與 JPA 有哪些不同?MyBatis一二級緩存的區別?MyBatis如何處理延遲加載&am…

【一文搞定】在Docker中搭建centos7遠程桌面環境(Xfce、Gnome兩種方式)

目錄 前言一、基于GNOME構建遠程桌面二、基于Xfce構建遠程桌面(輕量級) 前言 本文提供兩種安裝方式,均自己測試過,最后還是選擇了Xfce,因為它比較輕量級,占用資源較少。大家也可以都試試,比較感…

外地人可以在上海當老師嗎

隨著社會的發展,越來越多的人涌入大城市,其中也包括上海。在這個繁華的城市里,許多人都夢想成為一名老師,但是外地人可以在上海當老師嗎? 首先需要了解上海的教育政策。根據相關規定,外地人可以在上海當老師…

角色管理--產品角色負責人

研發組織管理--角色管理--產品角色負責人 定位 作為管理者,建設,管理,優化一個可控可自驅的產品經理團隊,并保持對應業務領域的產品競爭力,在保證業界平均水平的基礎上,不斷嘗試創新,爭做行業…

C#實現圖片背景色透明(親測有效)

重要代碼: Bitmap bm new Bitmap(origin); bm.MakeTransparent(); string Name_ "C:\\Users\\xx\\Downloads\\download\\" DateTime.Now.Ticks.ToString() ".ico";Size size new Size(256, 64);ConvertImageToIcon("C:…

視頻網關簡介

在數字化時代,視頻通信已經成為了人們日常生活和工作中的重要部分。為了滿足不同設備和平臺之間的視頻通信需求,各種視頻協議應運而生。然而,這些協議之間的差異使得相互通信變得復雜。因此,視頻網關作為一種重要的網絡設備&#…

Oracle中文顯示???????解決辦法

項目場景: Oracleoracle中文顯示???解決辦法 問題描述 原因分析: Oracle中文顯示???通常是由于字符集不匹配或者編碼問題導致的。當數據庫中的數據使用的是某種字符集,而客戶端或者應用程序使用的是另一種字符集時,就會出…

解決Android端libc++_shared.so庫沖突問題

前言 隨著App功能增多,集成的so庫也會增多,如果系統中多個so庫都使用系統自動生成的libc_shared.so庫,如果多個SDK都有該so包,就會出現報錯: 解決辦法 如果出現該問題,說明您的項目中有多個SDK共同依賴了C標…

fastjson2解析多為小數報錯 TODO問題

解決方式:使用谷歌的gson可以解析多為小數

Java常見的bug

Java是一種強類型、面向對象的編程語言,有一些常見的bug或錯誤類型,盡管具體的bug會因項目和代碼的不同而有所差異。以下是一些Java開發中常見的bug類型: 空指針異常(NullPointerException): 嘗試在一個空對象上調用方法或訪問屬性時會引發空指針異常。這通常發生在沒有對…

【雙指針】有效三角形的個數

有效三角形的個數 611. 有效三角形的個數 - 力扣(LeetCode) 題目描述 給定一個包含非負整數的數組 nums ,返回其中可以組成三角形三條邊的三元組個數。 示例 1: 輸入: nums [2,2,3,4] 輸出: 3 解釋:有效的組合是: 2,3,4 (使用第一個 2…

MIME 類型

MIME 類型 MIME (Multipurpose Internet Mail Extensions) 是描述消息內容類型的標準,用來表示文檔、文件或字節流的性質和格式。 MIME 消息能包含文本、圖像、音頻、視頻以及其他應用程序專用的數據。 瀏覽器通常使用 MIME 類型(而不是文件擴展名&am…

如何編寫一份優質的測試用例?

前言 這篇文章主要是想要寫給測試小伙伴們的,因為我發現還是有很多小伙伴在遇到寫測試用例的時候無從下手,我就想和大家簡單的聊聊,分享一下我的一些見解和經驗。 用例的五個構成元素: 用例標題前置條件測試步驟期望結果后置條…

05 Powershell發送http請求

一:發送http請求 1、語法: Invoke-WebRequest -uri "請求地址" -UseBasicParsing 2、實例: $result Invoke-WebRequest -uri "http://rdc.mingyuanyun.com/rdc-service/api/v2/apps/$($app)/versions/maxpackversion"…

騰訊又出王炸產品!使用混元大模型進行數據報表測試

最近騰訊出了自己的大模型,命名混元。 現在已經開始內測,感謝騰訊小伙伴盧曉明同學幫我們提前申請到了內測機會,接下來我們用騰訊混元大模型與實際工作結合,開始我的報表測試之旅。 騰訊混元大模型官方入口:https://hunyuan.ten…

Java 基礎面試題大概有哪些?

Java基礎面試題的范圍非常廣泛,一般包括以下幾個方面: 一、Java基礎語法 數據類型:Java中包括基本數據類型和引用數據類型,基本數據類型包括byte、short、int、long、float、double、char、boolean,引用數據類型包括…

三十分鐘學會Shell(下)

Shell 3.1 運算符 3.1.1 算數運算符 在Shell腳本中,算術運算符用于執行基本的數學運算。Shell支持多種算術運算符,包括加、減、乘、除等。以下是關于Shell算術運算符的一些方法以及相應的示例說明: 加法: a10 b20 c$((a b)) …

【第二部分:結構】ARM Realm Management Monitor specification

目錄 概念Realm概述Realm執行環境Realm寄存器Realm內存Realm處理器功能IMPDEF系統寄存器 Realm屬性Realm活性Realm生命周期狀態狀態轉換 Realm參數Realm描述符 顆粒Granule顆粒屬性顆粒所有權顆粒生命周期狀態狀態轉換顆粒抹除 Realm執行上下文概述REC屬性REC指數和MPIDR值REC生…