国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用JavaScript寫一個(gè)完整的計(jì)算器效果

使用JavaScript寫一個(gè)完整的計(jì)算器效果圖

學(xué)習(xí) Javascript 的基本和最好的方法之一是構(gòu)建一個(gè)簡單的計(jì)算器。在本教程中,我將逐步引導(dǎo)您了解如何構(gòu)建和部署這個(gè)令人驚嘆的項(xiàng)目。

前提

  • 超文本標(biāo)記語言

  • CSS

  • 使用 JavaScript 進(jìn)行基本 DOM 操作。

你的項(xiàng)目應(yīng)該具備的能力:
嘗試自己實(shí)現(xiàn)這些條件,然后回來跟進(jìn)

1. 您的計(jì)算器將有 html 文件。這是該項(xiàng)目的骨架。

  • 設(shè)置數(shù)字(0-9)、運(yùn)算符(x、/、-、+)、等于(=)、清除和刪除按鈕。

  • 設(shè)置兩個(gè)顯示輸入。對于先前值和當(dāng)前值。

2. 它必須有一個(gè) CSS 文件來設(shè)置按鈕和整個(gè)項(xiàng)目的樣式,以便看起來不錯。

3.它必須有一個(gè)JAVASCRIPT文件來為計(jì)算器添加交互性。

4. 在 Javascript 上,您的文件中應(yīng)包含以下條件和函數(shù):

  • 您的文件將具有基本數(shù)學(xué)運(yùn)算的函數(shù),即加、減、除和乘

  • 一個(gè)運(yùn)算將由第一個(gè)數(shù)字、運(yùn)算符和第二個(gè)數(shù)字組成,即 6(第一個(gè)數(shù)字)x(運(yùn)算符)7(第二個(gè)數(shù)字);

  • 為上述每個(gè)部分創(chuàng)建三個(gè)變量

  • 創(chuàng)建一個(gè)函數(shù),該函數(shù)接受第一個(gè)數(shù)字、運(yùn)算符和第二個(gè)數(shù)字,然后調(diào)用每個(gè)基本數(shù)學(xué)運(yùn)算。您可以將其稱為operatorFunc

  • 創(chuàng)建一個(gè)函數(shù),將單擊的按鈕的值和計(jì)算后的結(jié)果添加到 HTML 中的顯示中。

  • 您應(yīng)該找到一種方法將從 html 輸入的數(shù)字存儲到第一個(gè)和第二個(gè)數(shù)字變量中,然后利用用戶選擇的運(yùn)算符調(diào)用 operaFunc() 。

  • 確保在用戶單擊等于后顯示計(jì)算結(jié)果。

5. 這是項(xiàng)目中最難的部分,您需要找到一種方法來存儲 DOM 中的值,然后用它們 調(diào)用operatorFunc 。

這些是您的項(xiàng)目應(yīng)該滿足的最基本的條件。嘗試自己實(shí)施它們,如果您感到迷茫,請回來我們一起解決。

超文本標(biāo)記語言

現(xiàn)在是時(shí)候投入其中了!
讓我們從設(shè)置 html 文件開始。將其命名為index.html
將其鏈接到CSS(在頁眉中)和JavaScript 文件(在頁腳下方的正文中)。
這是代碼:

<!doctype html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Javascript calculator Project</title>
    <link rel="stylesheet" href="index.css" />
  </head>
<body>
  <script src="index.js"></script>
</body>
</html>

設(shè)置Body

A。添加按鈕:數(shù)字(0-9)、運(yùn)算符(X、/、-、+)、等于(=)、清除(AC)和刪除按鈕(Delete)。
b. 確保適當(dāng)添加 id 和類,因?yàn)樗鼈儗⒃?css 中用于樣式設(shè)置。
C。添加兩個(gè)顯示輸入。

不適用。您可以自由使用按鈕,在下面的代碼中,我使用了按鈕類型的輸入元素

<body>
    <h1>Javascript Calculator</h1>
    <div class="calc-container">
      <div class="display_container">
        <div id="displayPrev" class="display"></div>
        <div id="displayCurr" class="display">0</div>
      </div>
      <div class="clear-and-delete-container">
        <input type="button" value="Delete" id="delete" class="remove-btn" />
        <input type="button" value="AC" id="AC" class="remove-btn" />
      </div>
      <div class="btn-container">
        <input type="button" value="7" class="btn" id="7" />
        <input type="button" value="8" class="btn" id="8" />
        <input type="button" value="9" class="btn" id="9" />
        <input type="button" value="÷" class="operant divide" id="/" />
        <input type="button" value="4" class="btn" id="4" />
        <input type="button" value="5" class="btn" id="5" />
        <input type="button" value="6" class="btn" id="6" />
        <input type="button" value="x" class="operant multiply" id="x" />
        <input type="button" value="1" class="btn" id="1" />
        <input type="button" value="2" class="btn" id="2" />
        <input type="button" value="3" class="btn" id="3" />
        <input type="button" value="-" class="operant subtraction" id="-" />
        <input type="button" value="." class="btn period" id="period" />
        <input type="button" value="0" class="btn" id="1" />
        <input type="button" value="=" class="equals" id="equals" />
        <!-- operants -->
        <input type="button" value="+" class="operant add" id="+" />
      </div>
      <div class="operants"></div>
    </div>
    <script src="index.js"></script>
  </body>

CSS

是時(shí)候設(shè)置 HTML 樣式了。您可能需要確保操作按鈕具有不同的顏色。另外,請確保使用布局樣式,即實(shí)現(xiàn)網(wǎng)格或 Flexbox 布局。這將確保按鈕排列良好并且全部適合可用空間。在下面的代碼中,我使用了兩者。

* {
 margin: 0;
 padding: 0;
 box-sizing: border-box;
}

html {
 overflow-x: hidden;
}

body {
 background: #f0ffff;
 display: grid;
 justify-content: center;
 align-content: center;
 margin: 0 auto;
 overflow-x: hidden;
}

.calc-container {
 width: 350px;
 height: 485px;
 margin: 2rem auto;
 background: #aaaaaa;
 padding: 0.5rem;
 border: transparent;
 border-radius: 15px;
}
.display_container {
 display: grid;
 background-color: #f0ffff;
 border: transparent;
 border-radius: 15px;

 margin: 0.2rem 0;
}
.display {
 text-align: right;
 padding: 0.5rem;
 border: 0;
 color: black;
 outline: none;
 width: 100%;
 height: 40px;
 border-style: none;
 font-size: 30px;
}
.clear-and-delete-container {
 display: flex;
}
.clear-and-delete-container input {
 width: 100%;
 border: 1px solid black;
 border-radius: 10px;
}
.btn-container {
 display: grid;
 grid-template-columns: repeat(4, 1fr);
 padding: 0.2rem;
}

.btn,
.operant {
 width: 80px;
 margin: 0.1rem;
 height: 80px;
 border: 1px solid black;
 border-radius: 10px;
 background: #ffff;
 z-index: 0;
 transition: background-color 0.25s ease-in 0.09s;
}

.remove-btn:nth-child(2) {
 height: 45px;
 background: #9999ee;
}

.remove-btn:nth-child(1) {
 background: red;
}

.btn:hover {
 background-color: transparent;
 box-shadow: 0px 4px 5px rgba(0, 0, 0, 0.5);
}

.remove-btn:hover {
 background: rgba(255, 255, 255, 0.2);
 color: black;
}

.equals {
 width: 80px;
 margin: 0.1rem;
 height: 80px;
 border: 1px solid black;
 border-radius: 10px;
 background: #49ca3e;
}

.equals:hover {
 background: #ffff;
}
.period {
 font-size: larger;
}

.divide {
 background: #b2b2d1;
}

.multiply {
 background: #00b1c5;
}
.subtraction {
 background: orange;
}
.add {
 background: #e15a46;
}

.operant:hover {
 background: #ffff;
}

上面的代碼可能看起來很多,但實(shí)際上并非如此。花點(diǎn)時(shí)間瀏覽并理解它的樣式。

腳本語言

現(xiàn)在我們來到了最重要的部分。項(xiàng)目的邏輯部分。

首先,我們將回顧我之前提供的步驟。
將所有已初始化的變量放在 javascript 文件的開頭是一個(gè)很好的做法。

下面的代碼說明了我們需要的大部分變量。

A。首先,我們將第一個(gè)數(shù)字和第二個(gè)數(shù)字初始化為0;

然后我們將運(yùn)算符初始化為空,以便當(dāng)用戶單擊任何運(yùn)算符按鈕時(shí),值都會更新并存儲在該變量中。

這與result和previousComput變量相同,即如果用戶單擊 equals,我們運(yùn)行計(jì)算,然后結(jié)果將存儲在result變量中,如果他們選擇繼續(xù)操作,結(jié)果也會存儲在previousComput變量中。

let firstNumber = 0;
let secondNumber = 0;
let operator = "";
let previousComput = "";
let result = 0;

b. 從 DOM 中獲取數(shù)據(jù)并將其存儲在變量中。

這里我們使用querySelector和querySelectorAll來選擇元素。以下是我們可能需要的所有變量。

const calcValues = document.querySelectorAll(".btn");
let displayPrev = document.querySelector("#displayPrev");
let displayCurr = document.querySelector("#displayCurr");
const equals = document.querySelector(".equals");
const operants = document.querySelectorAll(".operant");
const clear = document.querySelector("#AC");
const deleteEl = document.querySelector("#delete");

C。設(shè)置函數(shù)來監(jiān)聽 DOM 事件。

下面的代碼偵聽操作符(X、/、-、+)按鈕上的單擊事件并做出相應(yīng)響應(yīng),即更新顯示值、存儲要在計(jì)算中使用的單擊操作符的值等等!請注意 if...else 語句。

operants.forEach((operant) => {
  operant.addEventListener("click", () => {
    if (displayPrev.innerHTML == "") {
      firstNumber = displayCurr.innerHTML;
      displayPrev.innerHTML = `${displayCurr.innerHTML}  ${operant.value} `;
      displayCurr.innerHTML = "";
      operator = operant.value;
    } else {
      previousComput = concatFunc();
      displayPrev.innerHTML = previousComput + " " + operant.value + " ";
      operator = operant.value;
      firstNumber = previousComput;
      displayCurr.innerHTML = "";
    }
  });
});

d. 接下來,設(shè)置一個(gè)函數(shù)來監(jiān)聽數(shù)字按鈕(0-9)的點(diǎn)擊事件。

下面就是這樣一個(gè)函數(shù)。它獲取單擊的值并將它們存儲為firstNumber 或secondNumber。請注意,第二個(gè)數(shù)字僅在第一個(gè)數(shù)字更新并且用戶單擊操作后才會更新。
它還會顯示 displayCurr 元素中的值,因?yàn)檫@是當(dāng)前正在發(fā)生的操作。記下handleClick 函數(shù)。它是一個(gè)回調(diào)函數(shù)(...它已作為另一個(gè)函數(shù)中的參數(shù)傳遞)

const handleClick = (e) => {
  displayCurr.innerHTML === "0"
    ? (displayCurr.innerHTML = e.target.value)
    : (displayCurr.innerHTML += e.target.value);
};
calcValues.forEach((button) => {
  button.addEventListener("click", handleClick);
});

現(xiàn)在是我們設(shè)置基本數(shù)學(xué)運(yùn)算函數(shù)的時(shí)候了。加法、減法等。
稍后我們將在 operaFunc 中調(diào)用這些函數(shù)。這些函數(shù)僅采用兩個(gè)參數(shù),第一個(gè)數(shù)字和第二個(gè)數(shù)字,然后將根據(jù)所選的運(yùn)算符執(zhí)行操作。操作符將由 operaFunc() 提供;
請注意:

  • 變量前的加號將其從字符串轉(zhuǎn)換為數(shù)字

  • 此外,我們希望防止返回小數(shù)點(diǎn)太長的答案。為此,我們使用 toFixed();

//let result = 0;

const multiply = (firstNumber, secondNumber) => {
   //The plus before a number converts it to a number from being a string
   //Also We want to prevent returning answers that have too long decimals so to
  //Do that we use toFixed();
  result = +firstNumber * +secondNumber;
  if (!Number.isInteger(result)) {
    return result.toFixed(2);
  }
  return result;
};

const divide = (firstNumber, secondNumber) => {
  if (+secondNumber === 0) {
    alert("You can't divide a number by zero!");

    location.reload();
  } else {
    result = +firstNumber / +secondNumber;
    if (!Number.isInteger(result)) {
      return result.toFixed(2);
    }
    return result;
  }
};
const add = (firstNumber, secondNumber) => {
  result = +firstNumber + +secondNumber;
  if (!Number.isInteger(result)) {
    return result.toFixed(2);
  }
  return result;
};

const subtract = (firstNumber, secondNumber) => {
  result = +firstNumber - +secondNumber;

  if (!Number.isInteger(result)) {
    return result.toFixed(2);
  }
  return result;
};

我們希望確保用戶能夠刪除號碼或清除屏幕。下面的代碼解決了這個(gè)問題。

請參考數(shù)組方法來理解為什么我們使用.slice();

clear.addEventListener("click", () => {
  displayPrev.innerHTML = "";
  displayCurr.innerHTML = "";
});

deleteEl.addEventListener("click", () => {
  if (displayCurr.innerHTML !== "") {
    displayCurr.innerHTML = displayCurr.innerHTML.slice(0, -1);
  } else {
    displayPrev.innerHTML = displayPrev.innerHTML.slice(0, -1);
    displayCurr.innerHTML += displayCurr.innerHTML;
  }

});

e. 是時(shí)候顯示結(jié)果并使計(jì)算器工作了!

編寫一個(gè)函數(shù)來偵聽等于按鈕上的單擊事件并對其進(jìn)行處理。

下面的代碼做了以下事情:

  • 監(jiān)聽點(diǎn)擊事件并觸發(fā) concatFunc()

  • concatFunc 是該項(xiàng)目的核心。它觸發(fā) operaFunc,進(jìn)而調(diào)用基本數(shù)學(xué)運(yùn)算符函數(shù)并顯示結(jié)果。

  • 我們使用 if...else 語句來添加有關(guān)何時(shí)調(diào)用某個(gè)函數(shù)的條件,并對意外行為發(fā)出警告。

equals.addEventListener("click", concatFunc);

function concatFunc() {


  if (previousComput == "") {
    secondNumber = displayCurr.innerHTML;
  } else {
    secondNumber = displayCurr.innerHTML;
  }


  displayPrev.innerHTML += `${displayCurr.innerHTML} ${equals.value}`;

  const operatorFunc = (firstNumber, operator, secondNumber) => {
    if (operator == "x") {
      return multiply(firstNumber, secondNumber);

    } else if (operator == "+") {

      return add(firstNumber, secondNumber);
    } else if (operator == "-") {


      return subtract(firstNumber, secondNumber);
    } else if (operator == "÷") {
      return divide(firstNumber, secondNumber);
    }
  };
  displayCurr.innerHTML = operatorFunc(firstNumber, operator, secondNumber);

  return operatorFunc(firstNumber, operator, secondNumber);
}

OK

您已經(jīng)創(chuàng)建了一個(gè) JavaScript 計(jì)算器。如果您沒有完成,請不要感到難過。大多數(shù)概念可能需要一段時(shí)間才能理解。

結(jié)論

通過完成這個(gè)項(xiàng)目,您學(xué)到了很多東西,包括:

  • 如何使用 CSS 網(wǎng)格和 Flexbox

  • 如何進(jìn)行變量聲明

  • 如何從 DOM 獲取元素以及一般 DOM 操作。您已經(jīng)了解了 querySelector、querySelectorAll 和 getElementById 等方法在 DOM 操作中的用途。

  • 如何使用事件偵聽器,尤其是“單擊”以及后續(xù)的回調(diào)函數(shù)鏈接

  • 如何正確調(diào)用函數(shù)

  • 最后,您學(xué)會了如何在建立項(xiàng)目時(shí)有效地進(jìn)行邏輯思考。


文章來源地址http://www.zghlxwxcb.cn/article/506.html

到此這篇關(guān)于使用JavaScript寫一個(gè)完整的計(jì)算器效果的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

原文地址:http://www.zghlxwxcb.cn/article/506.html

如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請聯(lián)系站長進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用 JavaScript 創(chuàng)建一個(gè)簡單的計(jì)算器

    介紹: JavaScript 是一種廣泛應(yīng)用于網(wǎng)頁開發(fā)的腳本語言,它具有靈活、動態(tài)和強(qiáng)大的特性。本文將演示如何使用 JavaScript 創(chuàng)建一個(gè)簡單的計(jì)算器,并實(shí)現(xiàn)基本的加減乘除操作。 正文: javascript 解釋: 以上代碼是一個(gè)簡單的 HTML 頁面,其中包括兩個(gè)輸入框和四個(gè)按鈕,用于實(shí)

    2024年02月03日
    瀏覽(30)
  • 用javascript做一個(gè)計(jì)算器,用js做一個(gè)計(jì)算器代碼

    用javascript做一個(gè)計(jì)算器,用js做一個(gè)計(jì)算器代碼

    大家好,給大家分享一下怎么用javascript做一個(gè)簡單的計(jì)算器,很多人還不知道這一點(diǎn)。下面詳細(xì)解釋一下?,F(xiàn)在讓我們來看看! 頁面布局設(shè)計(jì)(HTML+CSS) ??由于在之前的博客中有對html和css進(jìn)行詳細(xì)的講解,再次就不多敘述,直接上代碼。因?yàn)閖s中用到了JQuery選擇器所以在

    2024年02月04日
    瀏覽(29)
  • HTML和JavaScript實(shí)現(xiàn)一個(gè)簡單的計(jì)算器

    HTML和JavaScript實(shí)現(xiàn)一個(gè)簡單的計(jì)算器

    使用HTML和JavaScript實(shí)現(xiàn)一個(gè)簡單的計(jì)算器。 這段代碼會在瀏覽器中創(chuàng)建一個(gè)標(biāo)題為\\\"Simple Calculator\\\"的頁面。頁面頂部有一個(gè) h1 元素,用于顯示標(biāo)題。計(jì)算器界面使用了CSS網(wǎng)格布局,將按鈕排列為4列。 在JavaScript部分,定義了一些函數(shù)來處理計(jì)算器的操作。 appendCharacter() 函數(shù)用

    2024年02月13日
    瀏覽(34)
  • JavaScript 用三種方法做一個(gè)簡易計(jì)算器

    JavaScript 用三種方法做一個(gè)簡易計(jì)算器

    基本數(shù)據(jù)類型 / 使用對象創(chuàng)建 new執(zhí)行過程 // 1.new構(gòu)造函可以在內(nèi)存中創(chuàng)建了一個(gè)空的對象 // 2.this就會指向剛才創(chuàng)建的空對象 // 3.執(zhí)行構(gòu)造函數(shù)里面的代碼 給這個(gè)空對象添加屬性和方法 // 4.返回這個(gè)新對象(所以構(gòu)造函數(shù)里面不需要return)

    2024年02月06日
    瀏覽(31)
  • 用JavaScript和HTML實(shí)現(xiàn)一個(gè)精美的計(jì)算器

    用JavaScript和HTML實(shí)現(xiàn)一個(gè)精美的計(jì)算器

    計(jì)算器是我們?nèi)粘I钪薪?jīng)常使用的工具之一,可以幫助我們進(jìn)行簡單的數(shù)學(xué)運(yùn)算。在本博文中,我將使用JavaScript編寫一個(gè)漂亮的計(jì)算器,并添加加減乘除功能。這個(gè)計(jì)算器將有一個(gè)精美的用戶界面,包含9個(gè)數(shù)字按鈕和加減乘除操作符。 HTML:負(fù)責(zé)構(gòu)建界面 CSS:負(fù)責(zé)美化界

    2024年02月15日
    瀏覽(29)
  • 使用C語言構(gòu)造一個(gè)簡單計(jì)算器

    使用C語言構(gòu)造一個(gè)簡單計(jì)算器

    本節(jié)我們用小學(xué)生知識來制作一個(gè)簡單的計(jì)算器,可以運(yùn)算加,減,乘,除,以及余數(shù)的運(yùn)算。 在這節(jié)代碼中用到switch語句,因?yàn)橐斎脒\(yùn)算符,所以注意%c的對應(yīng) 接下來上代碼: 這里的話我們簡單演示一下乘法的運(yùn)算: 如果用其他的計(jì)算符號直接更改即可,這里使用雙精

    2024年02月12日
    瀏覽(26)
  • 使用 Jetpack Compose 實(shí)現(xiàn)一個(gè)計(jì)算器APP

    使用 Jetpack Compose 實(shí)現(xiàn)一個(gè)計(jì)算器APP

    在上一篇文章中,我們說到打算使用 compose 實(shí)現(xiàn)一個(gè)計(jì)算器 APP,最開始打算做一個(gè)經(jīng)典的 LCD 基礎(chǔ)計(jì)算器,后來覺得好像沒啥特色,最終決定還是改成仿微軟計(jì)算器。 不過,微軟計(jì)算器的功能太多了,仿制的工程量不小,所以我打算只仿我認(rèn)為最核心的兩個(gè)模式:標(biāo)準(zhǔn)模式和

    2024年02月05日
    瀏覽(24)
  • 【Java】Java使用Swing實(shí)現(xiàn)一個(gè)模擬計(jì)算器(有源碼)

    【Java】Java使用Swing實(shí)現(xiàn)一個(gè)模擬計(jì)算器(有源碼)

    ? ???個(gè)人主頁:哈__ 期待您的關(guān)注? 今天翻了翻之前寫的代碼,發(fā)現(xiàn)自己之前還寫了一個(gè)計(jì)算器,今天把我之前寫的代碼分享出來。 ?我記得那會兒剛學(xué)不會寫,寫的亂七八糟,但拿來當(dāng)期末作業(yè)還是不錯的哈哈。 直接上源碼,后上講解。 計(jì)算器上的按鍵不少,我們都定

    2024年04月11日
    瀏覽(92)
  • 【簡單】使用ChatGPT和QT從零開始構(gòu)建一個(gè)計(jì)算器應(yīng)用

    【簡單】使用ChatGPT和QT從零開始構(gòu)建一個(gè)計(jì)算器應(yīng)用

    在這篇博文中,我將向大家展示如何使用ChatGPT和Qt來構(gòu)建一個(gè)完整的計(jì)算器應(yīng)用。我們將從零開始,逐步引導(dǎo)您完成整個(gè)項(xiàng)目,包括需求分析、軟件設(shè)計(jì)、代碼編寫等環(huán)節(jié)。該項(xiàng)目代碼全部由GPT編寫,10分鐘完成。 本項(xiàng)目旨在使用ChatGPT和Qt技術(shù)構(gòu)建一個(gè)功能完備的計(jì)算器應(yīng)用。

    2024年02月11日
    瀏覽(26)
  • Android——在線計(jì)算器完整代碼

    Android——在線計(jì)算器完整代碼

    ? 這里采用線性布局,關(guān)于計(jì)算器的布局,可以查看之前的文章。 1.創(chuàng)建每個(gè)按鈕的對象 2.實(shí)例化每個(gè)按鈕 通過每個(gè)按鈕的id進(jìn)行實(shí)例化創(chuàng)建 3.設(shè)置每個(gè)按鈕的點(diǎn)擊事件即監(jiān)聽按鈕 switch通過id判斷被點(diǎn)擊的按鈕屬于哪個(gè)控件。如果是數(shù)字或小數(shù)點(diǎn),setText(str + ((Button) view).get

    2023年04月24日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包