博客列表 >DOM操作实战,简易在线客服与计算器--2019年5月10日

DOM操作实战,简易在线客服与计算器--2019年5月10日

ChenPJ的博客
ChenPJ的博客原创
2019年05月13日 14:59:171120浏览


编写一个小型的计算器
本例通过获取用户输入的两个数字进行加减乘除运算,并将结果显示输出。

实例

<!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>

运行实例 »

点击 "运行实例" 按钮查看在线实例

批注 2019-05-13 145830.png


本例实现过程:
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>

运行实例 »

点击 "运行实例" 按钮查看在线实例

批注 2019-05-13 145753.png

本例的实现过程:
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个随机数。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议