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