编写一个小型的计算器
本例通过获取用户输入的两个数字进行加减乘除运算,并将结果显示输出。
<!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个随机数。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号