|
@@ -0,0 +1,239 @@
|
|
|
|
|
+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('<div id="U_Cal_head"><div id="U_Cal_title_row">计算器</div><div id="U_Cal_switch_btn"></div><img src="IMG/1.jpg" id="U_Cal_switch_btn"><div id="U_Cal_process_output_row"></div><div id="U_Cal_result_output_row">0</div></div><div id="U_Cal_body"></div>');
|
|
|
|
|
+ /*
|
|
|
|
|
+ <div id="U_Cal_head">
|
|
|
|
|
+ <div id="U_Cal_title_row">计算器</div>
|
|
|
|
|
+ <div id="U_Cal_switch_btn"></div>
|
|
|
|
|
+ <img src="IMG/1.jpg" id="U_Cal_switch_btn">
|
|
|
|
|
+ <div id="U_Cal_process_output_row"></div>
|
|
|
|
|
+ <div id="U_Cal_result_output_row">0</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div id="U_Cal_body"></div>
|
|
|
|
|
+ */
|
|
|
|
|
+ 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());
|
|
|
|
|
+// }
|