abstract:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div:nth-child(1){ width: 450px; height:600px; margin:20px auto; background:dodgerblue; box-shadow: 2px 2px 2px #aaa; } h2{text-align: center;margin-bottom:5px;} div:nth-child(2){ border:4px double #ff5; width:400px; height:450px; margin: 0px auto 5px; overflow:auto } table{ width:408px; height:80px; margin:0px auto; } textarea{ width:350px; border:none; resize: none; background:cornsilk; } button{ width:56px; height:40px; border:none; background:#ff6700; color:#fff; font-size: 18px; } button:hover{ background:gold; color:blue; cursor: pointer; } ul{ list-style:none; padding: 15px; line-height: 30px; overflow: hidden; } </style> </head> <body> <div> <h2>在线客服</h2> <div> <ul> </ul> </div> <table> <tr> <td><textarea name="text" cols="50" rows="4"></textarea></td> <td><button>提交</button></td> </tr> </table> </div> <script> //获取到页面中的按钮,文本域,对话内容区的属性并赋值 let btn= document.getElementsByTagName('button').item(0); let text=document.getElementsByName('text').item(0); let list=document.getElementsByTagName('ul')[0]; let sum=0; //计数器 //建立点击事件函数 btn.onclick = function(){ console.log(text.value) //判断文本域的value值的长度是否为空,为空则返回假 终止执行 if(text.value.length===0){ alert('您没有输入文本,请输入内容'); return false; //返回并终止 } let userComment = text.value; //将用户发送的内容获取并保存 赋值给变量 text.value =''; //获取后紧跟清空文本val值 //创建一个新节点li let li=document.createElement('li'); li.innerHTML=userComment //将用户输入的内容添加到新节点中 let userPic = '<img src="/inc/peter.jpg" width="30" style="border-radius:50%">'; // 设置用户头像 li.innerHTML = userPic + ' ' + userComment; // 将用户头像与用户的聊天内容合并 list.appendChild(li); //发送聊天内容,实际上就是将新节点插入到对话列表中 sum += 1; // 聊天记录自增1 //用户部分完毕 //设置定时器,默认2秒后会自动回复 setTimeout(function(){ //执行内容 let info = [ '真烦人,有话快说,别耽误我玩抖音', '除了退货,退款,咱们什么都可以聊', '说啥,本姑娘怎么听不懂呢?再说一遍', '在我方便的时候再回复你吧~~', '投诉我的人多了,你算老几~~~' ]; let temp = info[Math.floor(Math.random()*4)]; //获取回复随机内容并赋值给变量 let reply = document.createElement('li'); //创建li元素 let kefuPic = '<img src="/inc/zly.jpg" width="30" style="border-radius:50%">'; // 设置用户头像 reply.innerHTML=kefuPic+''+ temp; //给新创建的li元素赋值内容 list.appendChild(reply) //在ul元素尾部添加新创建的li sum+=1; },2000); //延时回复的毫秒数 //当聊天记录条数大于20条数清空窗口 if(sum>20){ list.innerHTML=''; //ul列表内容等于空字符串,清空操作 sum=0; // 计数器清零 } } /* 一、用户发送信息部分 1、首先获取到页面中的按钮,文本域,对话内容区的属性并赋值。 2、建立点击事件 2、判断文本域的value值的长度是否为空,为空则返回假 终止执行; 3、不为空,则获取用户发送的内容并赋值给变量保存, 然后紧跟一个清空文本val值操作 4、然后创建一个新li元素、 并把获取用户发送内容赋值给新元素li; 5、为了美观又创建了一个头像图片元素,并把头像变量和获取用户发送内容一起赋值给新元素li 6、通过使用appendChild在父元素ul尾部将新节点li插入到对话列表中; 同时为了记录条数,增加了一个条数累加 二、智能客服部分: 笔记1:定时器函数 setTimeout(function(){ //执行内容 },2000); //延时回复的毫秒数 笔记2:数组名或变量[Math.floor(Math.random()*4)] //Math.floor是向下取值 Math.random()随机数 比如:取1-5之间的一个整数:Math.floor(Math.random()*4) 比如数组litao[Math.floor(Math.random()*4)] //则获取李涛数组下标1-5随机整数值 1、因为模拟客服回复,所以使用了时间定时函数,此函数有两部分组成,一个是执行内容,一个是执行延时时长。 2、建立数组内容,正常是从服务器数据库中调取,现在测试则建立了一个数组,使用math函数向下生成1-5的随机 数个数组索引下标。 3、建立新的元素li,和客服头像,然后把客服头像和回复内容一起赋值给新元素li,最后在父级元素ul尾部添加新 元素li。然后记录条数自增1 4、建立聊天记录超过20条则清空聊天窗口,使用if判断即可。如果不想清空聊天窗口,删除计数器,在窗口div使 用overflow:auto自动添加滑动条。 总结:不管是客户还是只能客服,遵循的逻辑都是一样的,首先要获取到界面中的元素属性,然后建立点击事件, 获取到内容,然后创建新的li元素,再把内容复制给新元素li,然后把li查到父级的尾部显示即可。 */ </script> </body> </html> 实战1的作业和实战2的作业是一致的。