Namespace.register("U.Control.Calcu"); //注册控件命名空间
/*
The Calculator By:
赖杰辉
蔡旭升
金奕和
*/
U.Control.Calcu.ACnCE = 0; //判断是否有计算结果,有计算结果值为1,否则为0
U.Control.Calcu.Ans = 0; //Ans初始化,Ans为上一次运算的结果
U.Control.Calcu.Result = "0"; //计算结果初始化
U.Control.Calcu.RE = /0{1,6}/; //正则表达式
U.Control.Calcu.ACBtn;//记录ac按钮
//运算符键入状态初始化
U.Control.Calcu.SymbolStatus = { LBracket: 0, RBracket: 0, Equal: 0, Dot: 0 };
U.Control.Calcu.BtnTextList = [['(', ')', '%', 'AC'],
['7', '8', '9', '/'],
['4', '5', '6', '*'],
['1', '2', '3', '-'],
['0', '.', '=', '+']];
//运算符集
U.Control.Calcu.MathematicalSymbol = [')', '(', '.', '%', '/', '*',
'-', '+', '=', 'ACnCE'];
U.Control.Calcu.Number = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
//页面初始化 调用 U.Control.Calcu.PageInitialization() 返回动态生成的计算器控件窗体
U.Control.Calcu.PageInitialization = function () {
// $(ParentNode).append('
计算器

0
');
/*
计算器
0
*/
var Calcu = $$('div', { "className": "U_Cal", "style": { "width": "228px"} });
var CalcuHead = $$('div', { "id": "U_Cal_head" }, Calcu);
var CalcuHeadTittle = $$('div', { "id": "U_Cal_title_row" }, CalcuHead);
var CalcuHeadSwitchBtn = $$('div', { "id": "U_Cal_switch_btn" }, CalcuHead);
var CalcuHeadImg = $$('img', { "id": "U_Cal_switch_btn", "src": "http://d.1473.cn/controls/pc/Calculator/IMG/1.jpg" }, CalcuHead);
var CalcuHeadProcessOutRow = $$('div', { "id": "U_Cal_process_output_row" }, CalcuHead);
var CalcuHeadResultOuRow = $$('div', { "id": "U_Cal_result_output_row" }, CalcuHead);
var CalcuBody = $$('div', { "id": "U_Cal_body" }, Calcu);
//传入生成的div
U.Control.Calcu.CreateBtn(CalcuBody, CalcuHeadProcessOutRow, CalcuHeadResultOuRow);
//返回动态生成的计算器控件窗体
return Calcu;
}
//创建按钮,传入生成的div
U.Control.Calcu.CreateBtn = function (CalcuBody, CalcuHeadProcessOutRow, CalcuHeadResultOuRow) {
// $('#U_Cal_body')[0].innerHTML = '';
//创建 Btn Column 后在 Btn Column 内创建Btn并添加点击事件
U.Control.Calcu.BtnTextList.forEach(function (item, index, array) {
var BtnColumn = $$('div', { "class": "U_Cal_btn_column" }, CalcuBody);
item.forEach(function (item, index, array) {
if (index == 0) {
var Btn = $$('div', { "class": "U_Cal_btn", "style": { "border-left": "none"} }, BtnColumn);
Btn.innerHTML = item;
//添加点击事件
Btn.addEventListener('click', function () {
U.Control.Calcu.JudgmentBtn(item, CalcuHeadProcessOutRow, CalcuHeadResultOuRow);
}, false);
} else {
if (item == "AC") {
var ACBtn = $$('div', { "id": "U_Cal_ACnCE", "class": "U_Cal_btn U_Cal_btn_ACnCE" }, BtnColumn);
U.Control.Calcu.ACBtn = ACBtn;
} else if (item == "=") {
var ACBtn = $$('div', { "id": "U_Cal_ACnCE", "class": "U_Cal_btn", "style": { "background-color": "#0e79cb"} }, BtnColumn);
} else {
var ACBtn = $$('div', { "class": "U_Cal_btn" }, BtnColumn);
}
ACBtn.innerHTML = item;
ACBtn.onclick = function () {
U.Control.Calcu.JudgmentBtn(item, CalcuHeadProcessOutRow, CalcuHeadResultOuRow)
};
//添加点击事件
// Btn.addEventListener('click', function () {
// U.Control.Calcu.JudgmentBtn(item);
// }, false);
}
});
});
}
//根据参数,判断点击按钮
//核心模块待优化,写面条我认了,只求打我的时候轻点 QvQ
U.Control.Calcu.JudgmentBtn = function (BtnText, CalcuHeadProcessOutRow, CalcuHeadResultOuRow) {
//如果运算结果错误,键入任何内容都将初始化计算器
if (CalcuHeadResultOuRow.innerHTML == "Error") {
CalcuHeadResultOuRow.innerHTML = "0";
}
//更改ACnCE按钮状态
if (!U.Control.Calcu.ACnCE) {
U.Control.Calcu.ACBtn.innerHTML = "CE";
}
if (BtnText == "AC") {
//如果键入的是AC则初始化计算器
if (U.Control.Calcu.ACnCE) {
CalcuHeadProcessOutRow.innerHTML = "Ans = " + U.Control.Calcu.Ans;
U.Control.Calcu.Result = "0";
CalcuHeadResultOuRow.innerHTML = "0";
} else {
//如果键入的是CE则删除上一次键入的内容
if (U.Control.Calcu.Number.includes(CalcuHeadResultOuRow.innerHTML.slice(-1))) {
U.Control.Calcu.Result = U.Control.Calcu.Result.slice(0, -1);
CalcuHeadResultOuRow.innerHTML = CalcuHeadResultOuRow.innerHTML.slice(0, -1);
} else {
//判断删除的符号
if (CalcuHeadResultOuRow.innerHTML.slice(-1) == "(") {
U.Control.Calcu.SymbolStatus.LBracket = 0;
U.Control.Calcu.SymbolStatus.RBracket = 0;
U.Control.Calcu.Result = U.Control.Calcu.Result.slice(0, -1);
CalcuHeadResultOuRow.innerHTML = CalcuHeadResultOuRow.innerHTML.slice(0, -1);
} else if (CalcuHeadResultOuRow.innerHTML.slice(-1) == ")") {
U.Control.Calcu.SymbolStatus.RBracket = 1;
U.Control.Calcu.Result = U.Control.Calcu.Result.slice(0, -1);
CalcuHeadResultOuRow.innerHTML = CalcuHeadResultOuRow.innerHTML.slice(0, -1);
} else if (CalcuHeadResultOuRow.innerHTML.slice(-1) == ".") {
U.Control.Calcu.SymbolStatus.Dot = 0;
U.Control.Calcu.Result = U.Control.Calcu.Result.slice(0, -1);
CalcuHeadResultOuRow.innerHTML = CalcuHeadResultOuRow.innerHTML.slice(0, -1);
} else {
U.Control.Calcu.Result = U.Control.Calcu.Result.slice(0, -1);
CalcuHeadResultOuRow.innerHTML = CalcuHeadResultOuRow.innerHTML.slice(0, -3);
}
}
}
//如果键入的是运算符则执行下面的代码
} else if (U.Control.Calcu.MathematicalSymbol[8] == BtnText) {
if (U.Control.Calcu.SymbolStatus.RBracket) {
if (eval(U.Control.Calcu.Result + ")") == Infinity) {
CalcuHeadProcessOutRow.innerHTML = ""; //$("#U_Cal_result_output_row")[0].innerHTML + ")"
CalcuHeadResultOuRow.innerHTML = "Error";
U.Control.Calcu.Result = "0";
U.Control.Calcu.Ans = 0;
U.Control.Calcu.ACBtn.innerHTML = "AC";
U.Control.Calcu.ACnCE = 1;
} else {
U.Control.Calcu.Result = eval(U.Control.Calcu.Result + ")").toString();
CalcuHeadProcessOutRow.innerHTML = CalcuHeadResultOuRow.innerHTML + ")";
if (U.Control.Calcu.Result.includes('.') && U.Control.Calcu.Result.length - U.Control.Calcu.Result.indexOf('.') - 1 > 6) {
U.Control.Calcu.Result = U.Control.Calcu.Result.slice(0, U.Control.Calcu.Result.indexOf('.') + 7).replace(U.Control.Calcu.RE, '');
}
CalcuHeadResultOuRow.innerHTML = U.Control.Calcu.Result;
U.Control.Calcu.Ans = U.Control.Calcu.Result;
U.Control.Calcu.ACBtn.innerHTML = "AC";
U.Control.Calcu.ACnCE = 1;
}
} else {
if (eval(U.Control.Calcu.Result) == Infinity) {
CalcuHeadProcessOutRow.innerHTML = ""; //$("#U_Cal_result_output_row")[0].innerHTML
CalcuHeadResultOuRow.innerHTML = "Error";
U.Control.Calcu.Result = "0";
U.Control.Calcu.Ans = 0;
U.Control.Calcu.ACBtn.innerHTML = "AC";
U.Control.Calcu.ACnCE = 1;
} else {
CalcuHeadProcessOutRow.innerHTML = CalcuHeadResultOuRow.innerHTML;
U.Control.Calcu.Result = eval(U.Control.Calcu.Result).toString();
if (U.Control.Calcu.Result.includes('.') && U.Control.Calcu.Result.length - U.Control.Calcu.Result.indexOf('.') - 1 > 6) {
U.Control.Calcu.Result = U.Control.Calcu.Result.slice(0, U.Control.Calcu.Result.indexOf('.') + 7).replace(U.Control.Calcu.RE, '');
}
CalcuHeadResultOuRow.innerHTML = U.Control.Calcu.Result;
U.Control.Calcu.Ans = U.Control.Calcu.Result;
U.Control.Calcu.ACBtn.innerHTML = "AC";
U.Control.Calcu.ACnCE = 1;
}
}
} else if (U.Control.Calcu.MathematicalSymbol.slice(0, 2).includes(BtnText)) {
//判断括号闭合状态,如果需要键入右括号且上一个键入符非左括号则运行if内的语句
if (BtnText == ")" && U.Control.Calcu.SymbolStatus.RBracket == 1 && U.Control.Calcu.Result.slice(-1) != "(") {
//更改括号键入状态,需要键入右括号
U.Control.Calcu.SymbolStatus.RBracket = 0;
U.Control.Calcu.SymbolStatus.LBracket = 0;
U.Control.Calcu.Result = U.Control.Calcu.Result + BtnText;
CalcuHeadResultOuRow.innerHTML = CalcuHeadResultOuRow.innerHTML + BtnText;
U.Control.Calcu.ACnCE = 0;
U.Control.Calcu.ACBtn.innerHTML = "CE";
} else if (BtnText == "(" && U.Control.Calcu.SymbolStatus.LBracket == 0 && U.Control.Calcu.Result.slice(-1) != ")") { //判断左括号键入状态
if (U.Control.Calcu.Result == "0") {
U.Control.Calcu.SymbolStatus.RBracket = 1;
//更改括号键入状态,不允许键入多个左括号
U.Control.Calcu.SymbolStatus.LBracket = 1;
U.Control.Calcu.Result = "(";
CalcuHeadResultOuRow.innerHTML = BtnText;
U.Control.Calcu.ACnCE = 0;
U.Control.Calcu.ACBtn.innerHTML = "CE";
} else if (U.Control.Calcu.SymbolStatus.LBracket == 0 && !U.Control.Calcu.Number.includes(U.Control.Calcu.Result.slice(-1))) {
U.Control.Calcu.SymbolStatus.RBracket = 1;
U.Control.Calcu.SymbolStatus.LBracket = 1;
U.Control.Calcu.Result = U.Control.Calcu.Result + BtnText;
CalcuHeadResultOuRow.innerHTML = CalcuHeadResultOuRow.innerHTML + BtnText;
U.Control.Calcu.ACnCE = 0;
U.Control.Calcu.ACBtn.innerHTML = "CE";
}
}
} else if (U.Control.Calcu.MathematicalSymbol.slice(3, 8).includes(BtnText) && !U.Control.Calcu.MathematicalSymbol.slice(1, 8).includes(U.Control.Calcu.Result.slice(-1))) {
U.Control.Calcu.Result = U.Control.Calcu.Result + BtnText;
U.Control.Calcu.SymbolStatus.Dot = 0;
CalcuHeadResultOuRow.innerHTML = CalcuHeadResultOuRow.innerHTML + " " + BtnText + " ";
U.Control.Calcu.ACnCE = 0;
U.Control.Calcu.ACBtn.innerHTML = "CE";
} else if (U.Control.Calcu.MathematicalSymbol[2] == BtnText && !U.Control.Calcu.MathematicalSymbol.slice(0, 8).includes(U.Control.Calcu.Result.slice(-1)) && U.Control.Calcu.SymbolStatus.Dot == 0) {
U.Control.Calcu.Result = U.Control.Calcu.Result + BtnText;
U.Control.Calcu.SymbolStatus.Dot = 1;
U.Control.Calcu.ACnCE = 0;
U.Control.Calcu.ACBtn.innerHTML = "CE";
CalcuHeadResultOuRow.innerHTML = CalcuHeadResultOuRow.innerHTML + BtnText;
} else if (U.Control.Calcu.Number.includes(BtnText) && U.Control.Calcu.Result != "0") {
U.Control.Calcu.Result = U.Control.Calcu.Result + BtnText;
U.Control.Calcu.ACnCE = 0;
U.Control.Calcu.ACBtn.innerHTML = "CE";
CalcuHeadResultOuRow.innerHTML = CalcuHeadResultOuRow.innerHTML + BtnText;
} else if (U.Control.Calcu.Number.includes(BtnText)) {
U.Control.Calcu.Result = BtnText;
CalcuHeadResultOuRow.innerHTML = BtnText;
U.Control.Calcu.ACnCE = 0;
U.Control.Calcu.ACBtn.innerHTML = "CE";
}
}
//Sample
// window.onload = function () {
// $('body').append(U.Control.Calcu.PageInitialization());
// }