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()); // }