微信小程序-ios计算器简易版

微信小程序-ios计算器
图片: 在这里插入图片描述
在这里插入图片描述
核心代码
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.wxml:

{{display}}

{{displayValue}}

index.wxss:

page {
font: 100 14px ‘Roboto’;
}

.calculator {
width: 100%;
height: 100vh;
background: black;
position: relative;
box-shadow: 0px 0px 20px 0px #aaa;
display: flex;
flex-direction: column;
box-sizing: border-box;
}

.calculator-display {
background: #ee14ee;
flex: 1;
}

/TODO:解决文本垂直居中问题/
.calculator-display-text {
padding: 0 30px;
font-size: 6em;
color: rgb(247, 239, 239);
text-align: right;
}

.calculator-keypad {
display: flex;
}

.calculator .function-keys {
display: flex;
}
/1-9键/
.calculator .digit-keys {
background: #90ee14;
display: flex;
flex-direction: row;
flex-wrap: wrap-reverse;
}

.calculator-key-hover {
box-shadow: inset 0px 0px 25vw 0px rgba(0,0,0,0.25);
}

.calculator-key {
display: block;
width: 25vw;
height: 25vw;
line-height: 25vw;
border-top: 1px solid #777;
border-right: 1px solid #666;
text-align: center;
box-sizing: border-box;
}

.calculator .function-keys .calculator-key {
font-size: 2em;
}

.calculator .digit-keys .calculator-key {
font-size: 2.25em;
}

.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: white;
border-right: 0;
font-size: 3em;
}

.calculator .function-keys {
background: linear-gradient(to bottom, rgba(202,202,204,1) 0%, rgba(196,194,204,1) 100%);
}

.calculator .operator-keys {
background: linear-gradient(to bottom, rgba(252,156,23,1) 0%, rgba(247,126,27,1) 100%);
}

.input-keys {
width: 75%;
}

.operator-keys {
width: 25%;
}

reset.wxss:
button {
display: block;
background: none;
border: none;
padding: 0;
margin: 0;
font-family: inherit;
user-select: none;
cursor: pointer;
outline: none;
-webkit-tap-highlight-color: #f50a0ae8;
border-radius: 0;
}

button::after {
display: none;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值