1:html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>计算器代码</title>
<link rel="stylesheet" type="text/css" href="./css/style.css">
</head>
<body>
<div class="container" id="container">
<input type="text" name="num1" class="input_num1 input_num">
<span class="sign">+</span>
<input type="text" name="num2" class="input_num2 input_num">
<span>=</span>
<span class="result"></span>
<div class="btn_list">
<!-- <input type="button" name="button" class="button" value="+" onclick="addHandler();" />
<input type="button" name="button" class="button" value="-" onclick="subtracHandler()" />
<input type="button" name="button" class="button" value="*" onclick="multiplyHandler()" />
<input type="button" name="button" class="button" value="/" onclick="divideHandler()" /> -->
<input type="button" name="button" class="button" title="add" value="+" />
<input type="button" name="button" class="button" title="subtrac" value="-" />
<input type="button" name="button" class="button" title="multiply" value="*" />
<input type="button" name="button" class="button" title="divide" value="/" />
<input type="button" name="button" class="button" title="mod" value="%" />
<input type="button" name="button" class="button" title="power" value="^" />
</div>
</div>
<script type="text/javascript" src="./js/script.js"></script>
</body>
</html>
css
* {
margin: 0;
padding: 0;
}
.container {
width: 600px;
margin: 100px auto;
border:1px solid #dedede;
padding: 50px;
}
.button {
padding: 10px;
font-size: 16px;
margin-top: 36px;
margin-left: 15px;
cursor: pointer;
}
版本0
var _container = document.querySelector("#container");
// 获取全部计算按钮
var _bottons = _container.querySelectorAll(".button");
// 获取两个输入框
var _input_num1 = _container.querySelector(".input_num1")
// 获取运算符号的改变
var _sign = _container.querySelector(".sign");
var _input_num2 = _container.querySelector(".input_num2")
// 获取显示结构的元素
var _result = _container.querySelector(".result");
加
function addHandler() {
_sign.innerHTML = "+";
_result.innerHTML = parseInt(_input_num1.value) + parseInt(_input_num2.value);
}
//减
function subtracHandler() {
_sign.innerHTML = "-";
_result.innerHTML = _input_num1.value - _input_num2.value;
}
// 乘
function multiplyHandler() {
_sign.innerHTML = "*";
_result.innerHTML = _input_num1.value * _input_num2.value;
}
// 除
function divideHandler() {
_sign.innerHTML = "/";
_result.innerHTML = _input_num1.value / _input_num2.value;
}
版本1__结构和行为分离
// 获取整个容器
var _container = document.querySelector("#container");
// 获取全部计算按钮
var _bottons = _container.querySelectorAll(".button");
// 获取两个输入框
var _input_num1 = _container.querySelector(".input_num1")
// 获取运算符号的改变
var _sign = _container.querySelector(".sign");
var _input_num2 = _container.querySelector(".input_num2")
// 获取显示结构的元素
var _result = _container.querySelector(".result");
_bottons[0].onclick = addHandler;
_bottons[1].onclick = subtracHandler;
_bottons[2].onclick = multiplyHandler;
_bottons[3].onclick = divideHandler;
// 加
function addHandler() {
_sign.innerHTML = "+";
_result.innerHTML = parseInt(_input_num1.value) + parseInt(_input_num2.value);
}
//减
function subtracHandler() {
_sign.innerHTML = "-";
_result.innerHTML = _input_num1.value - _input_num2.value;
}
// 乘
function multiplyHandler() {
_sign.innerHTML = "*";
_result.innerHTML = _input_num1.value * _input_num2.value;
}
// 除
function divideHandler() {
_sign.innerHTML = "/";
_result.innerHTML = _input_num1.value / _input_num2.value;
}
版本2 循环
// 获取整个容器
var _container = document.querySelector("#container");
// 获取全部计算按钮
var _bottons = _container.querySelectorAll(".button");
// 获取两个输入框
var _input_num1 = _container.querySelector(".input_num1")
// 获取运算符号的改变
var _sign = _container.querySelector(".sign");
var _input_num2 = _container.querySelector(".input_num2")
// 获取显示结构的元素
var _result = _container.querySelector(".result");
for (var i = _bottons.length - 1; i >= 0; i--) {
_bottons[i].onclick = function() {
switch (this.value) {
case "+":
addHandler();
break;
case "-":
subtracHandler();
break;
case "*":
multiplyHandler();
break;
case "/":
divideHandler();
break;
}
}
}
// 加
function addHandler() {
_sign.innerHTML = "+";
_result.innerHTML = parseInt(_input_num1.value) + parseInt(_input_num2.value);
}
//减
function subtracHandler() {
_sign.innerHTML = "-";
_result.innerHTML = _input_num1.value - _input_num2.value;
}
// 乘
function multiplyHandler() {
_sign.innerHTML = "*";
_result.innerHTML = _input_num1.value * _input_num2.value;
}
// 除
function divideHandler() {
_sign.innerHTML = "/";
_result.innerHTML = _input_num1.value / _input_num2.value;
}
// 版本3 改进提取函数
// 尽量的把执执行函数拆分拆分到最小单元
// // 获取整个容器
var _container = document.querySelector("#container");
// 获取全部计算按钮
var _bottons = _container.querySelectorAll(".button");
// 获取两个输入框
var _input_num1 = _container.querySelector(".input_num1")
// 获取运算符号的改变
var _sign = _container.querySelector(".sign");
var _input_num2 = _container.querySelector(".input_num2")
// 获取显示结构的元素
var _result = _container.querySelector(".result");
each(_bottons, function(idnex, elem) {
elem.onclick = function() {
switch (this.value) {
case "+":
addHandler();
break;
case "-":
subtracHandler();
break;
case "*":
multiplyHandler();
break;
case "/":
divideHandler();
break;
}
}
})
// 遍历
function each(array, fn) {
for (var i = 0; i < array.length; i++) {
fn(i, array[i])
}
}
// 加
function addHandler() {
updateSign("+")
outputResult(add(_input_num1.value, _input_num2.value))
}
//减
function subtracHandler() {
updateSign("-");
outputResult(subtrac(_input_num1.value, _input_num2.value))
}
// 乘
function multiplyHandler() {
updateSign("*");
outputResult(multiply(_input_num1.value, _input_num2.value))
}
// 除
function divideHandler() {
updateSign("/");
outputResult(divide(_input_num1.value, _input_num2.value))
}
// 加法
function add(num1, num2) {
return parseInt(num1) + parseInt(num2)
}
// 减法
function subtrac(num1, num2) {
return num1 - num2;
}
// 乘法
function multiply(num1, num2) {
return num1 * num2;
}
// 除法
function divide(num1, num2) {
return num1 / num2;
}
// 更新符号
function updateSign(symbol) {
_sign.innerHTML = symbol;
}
// 输出结构的函数
function outputResult(result) {
_result.innerHTML = result;
}
// 第四次改进–管理代码 (找到组织)
var _container = document.querySelector("#container");
// 获取全部计算按钮
var calculatorElem = {
_bottons: _container.querySelectorAll(".button"),
// 获取两个输入框
_input_num1: _container.querySelector(".input_num1"),
// 获取运算符号的改变
_sign: _container.querySelector(".sign"),
_input_num2: _container.querySelector(".input_num2"),
// 获取显示结构的元素
_result: _container.querySelector(".result")
}
each(calculatorElem._bottons, function(idnex, elem) {
elem.onclick = function() {
switch (this.value) {
case "+":
addHandler();
break;
case "-":
subtracHandler();
break;
case "*":
multiplyHandler();
break;
case "/":
divideHandler();
break;
}
}
})
// 遍历
function each(array, fn) {
for (var i = 0; i < array.length; i++) {
fn(i, array[i])
}
}
// 加
function addHandler() {
updateSign("+")
outputResult(operation.add(calculatorElem._input_num1.value, calculatorElem._input_num2.value))
}
//减
function subtracHandler() {
updateSign("-");
outputResult(operation.subtrac(calculatorElem._input_num1.value, calculatorElem._input_num2.value))
}
// 乘
function multiplyHandler() {
updateSign("*");
outputResult(operation.multiply(calculatorElem._input_num1.value, calculatorElem._input_num2.value))
}
// 除
function divideHandler() {
updateSign("/");
outputResult(operation.divide(calculatorElem._input_num1.value, calculatorElem._input_num2.value))
}
var operation = {
add: function(num1, num2) {
return parseInt(num1) + parseInt(num2)
},
// 减法
subtrac: function(num1, num2) {
return num1 - num2;
},
// 乘法
multiply: function(num1, num2) {
return num1 * num2;
},
// 除法
divide: function(num1, num2) {
return num1 / num2;
},
}
// 加法
// 更新符号
function updateSign(symbol) {
calculatorElem._sign.innerHTML = symbol;
}
// 输出结构的函数
function outputResult(result) {
calculatorElem._result.innerHTML = result;
}
//版本5 OCP 开放关闭原则
var _container = document.querySelector("#container");
// 获取全部计算按钮
var calculatorElem = {
_bottons: _container.querySelectorAll(".button"),
// 获取两个输入框
_input_num1: _container.querySelector(".input_num1"),
// 获取运算符号的改变
_sign: _container.querySelector(".sign"),
_input_num2: _container.querySelector(".input_num2"),
// 获取显示结构的元素
_result: _container.querySelector(".result")
}
each(calculatorElem._bottons, function(idnex, elem) {
elem.onclick = function() {
updateSign(this.value);
outputResult(operate((this.title), calculatorElem._input_num1.value, calculatorElem._input_num2.value))
}
})
// 遍历
function each(array, fn) {
for (var i = 0; i < array.length; i++) {
fn(i, array[i])
}
}
// 更新符号
function updateSign(symbol) {
calculatorElem._sign.innerHTML = symbol;
}
// 运算
function operate(name, num1, num2) {
if (!operation[name]) throw new Error("不存在名为" + name + "的运算方法")
return operation[name](num1, num2);
}
var operation = {
add: function(num1, num2) {
return parseInt(num1) + parseInt(num2)
},
// 减法
subtrac: function(num1, num2) {
return num1 - num2;
},
// 乘法
multiply: function(num1, num2) {
return num1 * num2;
},
// 除法
divide: function(num1, num2) {
return num1 / num2;
},
addOperation: function(name, fn) {
if (!this[name]) {
this[name] = fn;
}
return this;
}
}
operation.addOperation("mod", function(num1, num2) {
return num1 % num2;
}).addOperation("power", function(base, power) {
return Math.pow(base, power);
})
// 输出结构的函数
function outputResult(result) {
calculatorElem._result.innerHTML = result;
}
// 版本6 模块化
(function() {
var _container = document.querySelector("#container");
// 获取全部计算按钮
var calculatorElem = {
_bottons: _container.querySelectorAll(".button"),
// 获取两个输入框
_input_num1: _container.querySelector(".input_num1"),
// 获取运算符号的改变
_sign: _container.querySelector(".sign"),
_input_num2: _container.querySelector(".input_num2"),
// 获取显示结构的元素
_result: _container.querySelector(".result")
}
// 绑定事件
each(calculatorElem._bottons, function(idnex, elem) {
elem.onclick = function() { updateSign(this.value); outputResult(operate((this.title), calculatorElem._input_num1.value, calculatorElem._input_num2.value)) }
})
// 遍历
function each(array, fn) {
for (var i = 0; i < array.length; i++) {
fn(i, array[i])
}
}
// 更新符号
function updateSign(symbol) { calculatorElem._sign.innerHTML = symbol; }
// 运算
var operate = (function() { var operation = { add: function(num1, num2) { return parseInt(num1) + parseInt(num2) }, // 减法 subtrac: function(num1, num2) { return num1 - num2; }, // 乘法 multiply: function(num1, num2) { return num1 * num2; }, // 除法 divide: function(num1, num2) { return num1 / num2; }, addOperation: function(name, fn) { if (!operation[name]) { operation[name] = fn; } return operation; } } function operate(name) { if (!operation[name]) throw new Error("不存在名为" + name + "的运算方法"); return operation[name].apply(operation, [].slice.call(arguments, 1, arguments.length)); } operate.addOperation = operation.addOperation; return operate; })()
operate.addOperation("mod", function(num1, num2) { return num1 % num2; }).addOperation("power", function(base, power) { return Math.pow(base, power); })
// 输出结构的函数
function outputResult(result) { calculatorElem._result.innerHTML = result; }
})()