用css3和javascript做的一个简单的计算器
这个计算器的算法比较简单,主要是为每一个键添加单击事件,然后根据单击的键来进行相应的判断和处理就可以了。在css3方面,主要用的是box-shadow和border-radius和线性渐变等效果.
在这里还用到了一个比较陌生的user-select,表示文本不能被选中,就是说下面的数字文本不能被选中。
效果演示
下面贴出代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>caculator</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; font: bold 14px Arial, sans-serif; } html { height: 100%; background: white; background: radial-gradient(circle, #fff 20%, #ccc); background-size: cover; } #calculator { width: 325px; height: auto; margin: 100px auto; padding: 20px 20px 9px; background: #9dd2ea; background: linear-gradient(#9dd2ea, #8bceec); border-radius: 3px; box-shadow: 0px 4px #009de4, 0px 10px 15px rgba(0, 0, 0, 0.2); } .top span.clear { float: left; } .top .screen { height: 40px; width: 212px; float: right; padding: 0 10px; background: rgba(0, 0, 0, 0.2); border-radius: 3px; box-shadow: inset 0px 4px rgba(0, 0, 0, 0.2); font-size: 17px; line-height: 40px; color: white; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2); text-align: right; letter-spacing: 1px; } .keys, .top {overflow: hidden;} .keys span, .top span.clear { float: left; position: relative; top: 0; cursor: pointer; width: 66px; height: 36px; background: white; border-radius: 3px; box-shadow: 0px 4px rgba(0, 0, 0, 0.2); margin: 0 7px 11px 0; color: #888; line-height: 36px; text-align: center; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; transition: all 0.2s ease; } .keys span.operator { background: #FFF0F5; margin-right: 0; } .keys span.eval { background: #f1ff92; box-shadow: 0px 4px #9da853; color: #888e5f; } .top span.clear { background: #ff9fa8; box-shadow: 0px 4px #ff7c87; color: white; } .keys span:hover { background: #9c89f6; box-shadow: 0px 4px #6b54d3; color: white; } .keys span.eval:hover { background: #abb850; box-shadow: 0px 4px #717a33; color: #ffffff; } .top span.clear:hover { background: #f68991; box-shadow: 0px 4px #d3545d; color: white; } .keys span:active { box-shadow: 0px 0px #6b54d3; top: 4px; } .keys span.eval:active { box-shadow: 0px 0px #717a33; top: 4px; } .top span.clear:active { top: 4px; box-shadow: 0px 0px #d3545d; } </style> </head> <body> <div id="calculator"> <div class="top"> <span class="clear">C</span> <div class="screen"></div> </div> <div class="keys"> <span>7</span> <span>8</span> <span>9</span> <span class="operator">+</span> <span>4</span> <span>5</span> <span>6</span> <span class="operator">-</span> <span>1</span> <span>2</span> <span>3</span> <span class="operator">÷</span> <span>0</span> <span>.</span> <span class="eval">=</span> <span class="operator">x</span> </div> </div> <script> // 获取所有的键盘元素 var keys = document.querySelectorAll('#calculator span'); var operators = ['+', '-', 'x', '÷']; var decimalAdded = false;//用来判断是否有非法的小数点 //为每个键添加单击事件 for(var i = 0; i < keys.length; i++) { keys[i].onclick = function(e) { var input = document.querySelector('.screen'); var inputVal = input.innerHTML; var btnVal = this.innerHTML; //清空屏幕 if(btnVal == 'C') { input.innerHTML = ''; decimalAdded = false; } // 按下'='号,输出计数结果 else if(btnVal == '=') { var equation = inputVal; var lastChar = equation[equation.length - 1]; //把已输入字符中的乘号和除号换成程序可识别的'*'和'/' equation = equation.replace(/x/g, '*').replace(/÷/g, '/'); //检查最后一个字符,如果是小数点则移除或者运算符,则移除 if(operators.indexOf(lastChar) > -1 || lastChar == '.') equation = equation.replace(/.$/, ''); //通过上面过滤了已输入的字符串后,计算结果 if(equation) input.innerHTML = eval(equation); decimalAdded = false; } else if(operators.indexOf(btnVal) > -1) {//此时按下的是运算符 var lastChar = inputVal[inputVal.length - 1]; if(inputVal != '' && operators.indexOf(lastChar) == -1) //已输入的字符串都是数值 input.innerHTML += btnVal; else if(inputVal == '' && btnVal == '-') input.innerHTML += btnVal;//负数运算 if(operators.indexOf(lastChar) > -1 && inputVal.length > 1) { //已输入的字符串中最后一个字符是运算符,则用新的运算符代替这个运算符 input.innerHTML = inputVal.replace(/.$/, btnVal); } decimalAdded =false; } else if(btnVal == '.') {//按下了小数点符号 if(!decimalAdded) { input.innerHTML += btnVal; decimalAdded = true; } } else { input.innerHTML += btnVal; } e.preventDefault(); } } </script> </body> </html>