您好,登錄后才能下訂單哦!
本篇內容介紹了“小程序如何實現簡單的計算器”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
效果如下:
#app.json
{ "pages": [ "pages/index/index", "pages/logs/logs" ], "window": { "navigationBarBackgroundColor": "#000000", "navigationBarTextStyle": "white", "navigationBarTitleText": "智能計算器" }, "tabBar": { "color": "#ff69b4", "selectedColor": "#0000ff", "backgroundColor": "#ffff00", "list": [ { "pagePath": "pages/index/index", "text": "計 算 機" }, { "pagePath": "pages/logs/logs", "text": "日志" }, { "pagePath": "pages/logs/logs", "text": "回家" } ] } }
#app.wsxx
/**app.wxss**/ .container { height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: space-between; padding: 200rpx 0; box-sizing: border-box; }
#index.wxml
<template name="calculator-key"> <button hover-start-time="{{5}}" hover-stay-time="{{100}}" hover-class="calculator-key-hover" data-key="{{className}}" class="calculator-key {{className}}">{{display}}</button> </template> <view class="calculator"> <view class="calculator-display"> <view class="calculator-display-text">{{displayValue}}</view> </view> <view class="calculator-keypad"> <view class="input-keys"> <view class="function-keys" catchtap="onTapFunction"> <template is="calculator-key" data="{{className: "key-clear", display: clearDisplay ? "C" : "C"}}"/> <template is="calculator-key" data="{{className: "key-sign", display: "+/-"}}"/> <template is="calculator-key" data="{{className: "key-percent", display: "%"}}"/> </view> <view class="digit-keys" catchtap="onTapDigit"> <template is="calculator-key" data="{{className: "key-0", display: "0"}}"/> <template is="calculator-key" data="{{className: "key-dot", display: "●"}}"/> <template is="calculator-key" data="{{className: "key-1", display: "1"}}"/> <template is="calculator-key" data="{{className: "key-2", display: "2"}}"/> <template is="calculator-key" data="{{className: "key-3", display: "3"}}"/> <template is="calculator-key" data="{{className: "key-4", display: "4"}}"/> <template is="calculator-key" data="{{className: "key-5", display: "5"}}"/> <template is="calculator-key" data="{{className: "key-6", display: "6"}}"/> <template is="calculator-key" data="{{className: "key-7", display: "7"}}"/> <template is="calculator-key" data="{{className: "key-8", display: "8"}}"/> <template is="calculator-key" data="{{className: "key-9", display: "9"}}"/> </view> </view> <view class="operator-keys" catchtap="onTapOperator"> <template is="calculator-key" data="{{className: "key-divide", display: "÷"}}"/> <template is="calculator-key" data="{{className: "key-multiply", display: "×"}}"/> <template is="calculator-key" data="{{className: "key-subtract", display: "?"}}"/> <template is="calculator-key" data="{{className: "key-add", display: "+"}}"/> <template is="calculator-key" data="{{className: "key-equals", display: "="}}"/> </view> </view> </view>
#index.js
Page({ data: { value: null, // 上次計算后的結果,null表示沒有上次計算的結果 displayValue: "0", // 顯示數值 operator: null, // 上次計算符號,null表示沒有未完成的計算 waitingForOperand: false // 前一按鍵是否為計算符號 }, onLoad: function (options) { this.calculatorOperations = { "key-divide": (prevValue, nextValue) => prevValue / nextValue, "key-multiply": (prevValue, nextValue) => prevValue * nextValue, "key-add": (prevValue, nextValue) => prevValue + nextValue, "key-subtract": (prevValue, nextValue) => prevValue - nextValue, "key-equals": (prevValue, nextValue) => nextValue } }, /* AC操作,一下回到解放前 */ clearAll() { this.setData({ value: null, displayValue: "0", operator: null, waitingForOperand: false }) }, /* 僅清空當前顯示的輸入值 */ clearDisplay() { this.setData({ displayValue: "0" }) }, onTapFunction: function (event) { const key = event.target.dataset.key; switch (key) { case "key-clear": if (this.data.displayValue !== "0") { this.clearDisplay(); } else { this.clearAll(); } break; case "key-sign": var newValue = parseFloat(this.data.displayValue) * -1 this.setData({ displayValue: String(newValue) }) break; case "key-percent": const fixedDigits = this.data.displayValue.replace(/^-?d*.?/, "") var newValue = parseFloat(this.data.displayValue) / 100 this.setData({ displayValue: String(newValue.toFixed(fixedDigits.length + 2)) }); break; default: break; } }, onTapOperator: function (event) { const nextOperator = event.target.dataset.key; const inputValue = parseFloat(this.data.displayValue); if (this.data.value == null) { this.setData({ value: inputValue }); } else if (this.data.operator) { const currentValue = this.data.value || 0; const newValue = this.calculatorOperations[this.data.operator](currentValue, inputValue); this.setData({ value: newValue, displayValue: String(newValue) }); } this.setData({ waitingForOperand: true, operator: nextOperator }); }, onTapDigit: function (event) { const key = event.target.dataset.key; // 根據data-key標記按鍵 if (key == "key-dot") { // 按下點號 if (!(/./).test(this.data.displayValue)) { this.setData({ displayValue: this.data.displayValue + ".", waitingForOperand: false }) } } else { // 按下數字鍵 const digit = key[key.length - 1]; if (this.data.waitingForOperand) { this.setData({ displayValue: String(digit), waitingForOperand: false }) } else { this.setData({ displayValue: this.data.displayValue === "0" ? String(digit) : this.data.displayValue + digit }) } } } })
#index.wxss
page { height:100%; } .calculator { width: 100%; height: 100vh; border:solid 1px; background: rgb(238, 5, 5); position: relative; box-shadow: 0px 0px 20px 0px rgb(211, 41, 41); display: flex; flex-direction: column; box-sizing: border-box; } .calculator-display { /*顯示器背景顏色*/ background: #2c2a2c; flex: 1; } /*TODO:解決文本垂直居中問題,顯示器數字顏色*/ .calculator-display-text { padding: 0 30px; font-size: 3em; color: rgb(245, 245, 248); text-align: right; } .calculator-keypad { display: flex; } .calculator .function-keys { display: flex; color:rgb(245, 13, 13); } .calculator .digit-keys { background: #0808f7; display: flex; flex-direction: row; flex-wrap: wrap-reverse; } .calculator-key-hover { /*按鈕按下以后的顏色*/ box-shadow: inset 0px 0px 25vw 0px hsla(71, 90%, 48%, 0.898); } .calculator-key { background-color:aqua; display: block; width: 25vw; height: 25vw; line-height: 25vw; border-top: 1px solid rgb(6, 245, 78); border-right: 1px solid rgb(19, 241, 12); text-align: center; box-sizing: border-box; } .calculator .function-keys .calculator-key { font-size: 2em; } .calculator .digit-keys .calculator-key { font-size: 3em; } .calculator .digit-keys .key-0 { width: 50vw; text-align: left; padding-left: 9vw; } .calculator .digit-keys .key-dot { padding-top: 1em; font-size: 0.75em; } .calculator .operator-keys .calculator-key { color: rgb(248, 165, 10); border-right: 0; font-size: 3em; } .calculator .function-keys { background: linear-gradient(to bottom, rgb(6, 6, 240) 0%, rgb(52, 5, 240) 100%); } .calculator .operator-keys { background: linear-gradient(to bottom, rgba(252,156,23,1) 0%, rgba(247,126,27,1) 100%); } .input-keys { width: 100%; } .operator-keys { width: 100%; }
“小程序如何實現簡單的計算器”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。