编写一个小型的计算器
本例通过获取用户输入的两个数字进行加减乘除运算,并将结果显示输出。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>迷你计算器</title> <style type="text/css"> .box { width: 500px; height: 200px; background-color: #efefef; border: 1px solid lightgray; text-align: center; margin: 20px auto; color: #636363; border-radius: 15px; box-shadow: 2px 2px 2px #999; } table { margin: auto; /*参考线*/ /*border: 1px solid red; */ } td { width: 100px; height: 30px; padding: 5px 10px; } input, select { width: 100%; height:100%; border:none; text-align: left; padding-left: 15px; /*background-color: cyan;*/ } button { width: 100%; height: 100%; border: none; background-color: skyblue; color: white; } button:hover { cursor: pointer; background-color: coral; width: 105%; height: 105%; } </style> </head> <body> <div class="box"> <h2>小小计算器</h2> <form> <table> <tr> <td><input type="text" name="opt1" placeholder="操作数1" autofocus></td> <td> <select name="option"> <option value="null">请选择操作</option> <option value="add"> + </option> <option value="sub"> - </option> <option value="mul"> × </option> <option value="div"> ÷ </option> </select> </td> <td><input type="text" name="opt2" placeholder="操作数2"></td> <td><button type="button">计算</button></td> </tr> <tr> <td colspan="2" align="right"><h3>结果:</h3></td> <td colspan="2" align="left"><h3 id="result"></h3></td> </tr> </table> </form> </div> <script type="text/javascript"> //获取操作数,按钮与结果占位符 var opt1 = document.getElementsByName('opt1')[0]; var opt2 = document.getElementsByName('opt2')[0]; var opt = document.getElementsByName('option')[0]; var btn = document.getElementsByTagName('button')[0]; var result = document.getElementById('result'); //给按钮添加事件,执行计算操作 btn.onclick = function(){ var data1 = 0; var data2 = 0; if (opt1.value.length === 0 ) { alert('第一个操作数不能为空'); opt1.focus(); return false; } else if (isNaN(opt1.value)) { alert('第一个操作数必须为数字'); opt1.focus(); return false; } else if (opt2.value.length === 0) { alert('第二个操作数不能为空'); opt2.focus(); return false; } else if (isNaN(opt2.value)) { alert('第二个操作数必须为数字') opt2.focus(); return false; } else { data1 = parseFloat(opt1.value); data2 = parseFloat(opt2.value); } var option = opt.value; var temp = 0; var flag = ''; switch (option){ case 'null': alert("请选择操作类型"); opt.focus(); return false; case 'add': flag = '+'; temp = data1 + data2; break; case 'sub': flag = '-'; temp = data1 - data2; break; case 'mul': flag = '×'; temp = data1 * data2; break; case 'div': flag = '÷'; if (data2 === 0) { alert('除数不能为0,请重新输入'); opt2.focus(); return false; } else { temp = data1 / data2; //保留小数点2位 temp = Math.round(temp * 100) / 100; } break } // placeholder.innerHTML = '<span style="color:coral">'+data1+' '+ flag+' '+ data2+' = '+temp +'</span>' var str = '<span style="color:coral">'; str += data1+' '+flag+' '+data2 + ' = ' + temp ; str += '</span>'; result.innerHTML = str; } </script> </body> </html>
点击 "运行实例" 按钮查看在线实例
本例实现过程:
1. 在页面上设置两个输入框与一个下拉选择框,利用getElementsByName方法获得用户输入。
2. 设置一个计算按钮,并设计好onclick事件,对用户的输入进行加减乘除运算。
2.1 利用分支流程控制,对用户输入进行判断,避免非法输入导致无法进行运算。
2.2 将结果显示输出。
本例中的流程判断用到了if(){}else if(){}与switch (){case:}进行分支选择,if()else方法略显臃肿,switch方法简洁易读。
在选择分支较多时,选用switch…case结构会提高程序的效率,但switch不足的地方在于只能处理字符或者数字类型的变量,if…else结构更加灵活一些,if…else结构可以用于判断表达式是否成立,比如if(a+b>c),if…else的应用范围更广,switch…case结构在某些情况下可以替代if…else结构。
关于保留小数位数,此处用到Math.round()方法。
Math.round()方法的功能是四舍五入取整,所以本例中用于保留两位小数的方式为,先将除法得数乘以100后取整,然后再除以100得出两位小数。
这里也可以使用Math.floor()进行同样的操作。
编写一个在线客服功能
本例通过设计一个按钮点击事件,将用户在文本域中的输入内容显示到上方UL列表中,并模拟在线客服自动回复。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>实战: 仿机器人聊天窗口</title> <style type="text/css"> div:nth-child(1) { width: 450px; height: 650px; background-color: lightskyblue; margin: 30px auto; color: #333; box-shadow: 2px 2px 2px #808080 } h2 { text-align: center; margin-bottom: -10px; } div:nth-child(2) { width: 400px; height: 500px; border: 4px double green; background-color: #efefef; margin: 20px auto 10px; } ul { list-style: none; line-height: 2em; /*border: 1px solid red;*/ overflow: hidden; padding: 15px; } table { width: 90%; height:80px; margin: auto; } textarea{ /*文本域宽高设置,避免兼容性问题*/ width: 360px; height: 60px; border: none; resize: none; background-color: lightyellow; } button { width: 60px; height: 40px; background-color: seagreen; color: white; border: none; /*text-align: left;*/ } button:hover { cursor: pointer; background-color: orange; } </style> </head> <body> <div> <h2>在线客服</h2> <div contenteditable="true"> <ul> <li></li> </ul> </div> <table> <tr> <td align="right"> <textarea name="text" autofocus></textarea> </td> <td align="left"> <button type=button>发送</button> </td> </tr> </table> </div> <script type="text/javascript"> //获取到页面中的按钮,文本域,对话内容区 var btn = document.getElementsByTagName('button')[0]; var input_Text = document.getElementsByName('text')[0]; var comment_List = document.getElementsByTagName('ul')[0]; var sum = 0; //添加按钮点击事件,获取用户数据并推送到对话窗口中 btn.onclick = function () { //获取用户提交的内容 if (input_Text.value.length === 0) { alert("是不是忘记要问点啥了~~"); return false; } //如果回复内容大于10条则清空聊天窗口,重新开始 if (sum === 10) { comment_List.innerHTML = ''; //清空内容 sum = 0; // 清空计数器 } var userComment = input_Text.value; //立即清空用户信息区 input_Text.value = ''; //创建一个新节点li var new_Li = document.createElement('li'); new_Li.innerHTML = userComment; var userPic = '<img src="../0508/images/gyy.jpg" width="30" style="border-radius:50%">'; new_Li.innerHTML = userPic+userComment; //将新节点插入到对话列表中 comment_List.appendChild(new_Li); sum += 1; setTimeout(function(){ var info = ['你好烦人呀,本姑娘好累,不知道怜香惜玉吗?','除了退货,退款,维修,什么问题都可以问','啥事呀,我的帅哥哥']; var temp = info[Math.floor(Math.random()*3)]; //获取随机的内容 //取1-5之间的一个整数:Math.floor(Math.random()*6 + 1) var auto_Reply = document.createElement('li'); /*创建新元素用来保存回复内容*/ var kefuPic = '<img src="../0508/images/zly.jpg" width="30" style="border-radius:50%;">'; auto_Reply.innerHTML = kefuPic + '<span style="color:red">'+temp+'</span>'; // reply.style.float = 'right' comment_List.appendChild(auto_Reply); //将回复内容添加到窗口中 sum += 1; // 回复内容计数加1 },2000); } </script> </body> </html>
点击 "运行实例" 按钮查看在线实例
本例的实现过程:
1. 在页面上设置一个对话显示框,一个用户输入框和一个提交按钮
2. 对提交按钮设计一个onclick事件函数
2.1 通过getEelementsByName获取文本域对象,判断用户是否输入内容
2.2 每当对话框中的显示超过10行时,清空对话框。本处设置一个sum变量当作计数器,每次提交输入内容时判断。
2.3 接收到用户提交的输入内容时对文本域进行清空
2.4 利用createElement创建一个新的节点对象,li标签。
2.5 将用户的输入内容添加到li标签,并通过appendChild方法将li标签插入到UL中。
2.6 模拟人工智能的回复,利用Math.random函数产生随机数,将存在数组中的预设回复取出显示。
3. onclick事件结束。
Math.random只产生1以内的随机数,包含0。所以,要取得1以上的整数时,需要将结果乘以取值范围之差,再用Math.floor方法取整。比如,想获得1~10之间这10个随机数具体方法为:
Math.floor(Math.random()*(10-1)+1)
结尾处必须+1,否则只产生0~9之间的10个随机数。