码迷,mamicode.com
首页 > 其他好文 > 详细

实现一个聊天功能的对话框

时间:2019-05-22 19:02:50      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:对话框   端口   pen   定义   log   lis   配置   mamicode   message   

额。。。先来看下总效果吧==》

下面分别有三个用户,他们都分别发了聊天信息;

技术图片

步骤:

一、把基本的架构写好,

 1 <div class="wrapper">
 2     <!-- 聊天信息框 -->
 3     <div class="content" id="chat">
 4       <ul id="chat_conatiner">
 5           
 6       </ul>
 7     </div>
 8 
 9     <!-- 聊天输入框 -->
10     <div class="action">
11       <textarea name="content" id="input"></textarea>
12       <button class="btn btn-success" id="clear">清屏</button>
13       <button class="btn btn-success" id="send">发送</button>
14     </div>
15   </div>
16 </body>

 

二、我们要像搭建node服务器那样,重新封装一下配置文件js ——也就是“server.js”,因为我们还是要用到node.js 服务器连接客户端来建立一个实时聊天室。代码如下:

 

 1 //引入第三方模块插件
 2 var express = require(‘express‘),
 3     io = require(‘socket.io‘);
 4 
 5 
 6 //创建app
 7 var app = express();
 8 
 9 //给app绑定一个监听的端口
10 var server = app.listen(3000,function(){
11   console.log(‘程序已启动‘);
12 });
13 
14 
15 //用socket来监听当前服务
16 var ws = io.listen(server);
17 
18 
19 //socket事件
20 
21 var checkUser = function(nickname)
22 {
23   //ws.sockets.sockets 存放所有连接的用户
24   for(var k in ws.sockets.sockets)
25   {
26     if(ws.sockets.sockets[k].nickname == nickname)
27     {
28         //该用户已经存在了
29         return true;
30     }
31   }
32 
33   //用户不存在
34   return false;
35 }
36 
37 //当有客户端连接上来的时候会触发到当前的事件函数
38 ws.on(‘connection‘,function(client){
39   
40   //给客户端绑定一个事件用来接收昵称
41   client.on(‘join‘,function(nickname){
42  
43       //用户不存在
44       //给当前客户端对象添加自定义属性
45       client.nickname = nickname;
46 
47       //调用客户端的提醒事件
48       ws.sockets.emit(‘notice‘,‘系统‘,`${nickname}已加入群聊(*^__^*) 嘻嘻……`);
49     
50   })
51 
52   client.on(‘message‘,function(content){
53 
54     //把他信息发给所有人,但是除了自己 广播
55     //调用客户端的接收方法
56     client.broadcast.emit(‘message‘,client.nickname,content);
57   });
58 
59 
60   client.on(‘disconnect‘,function(){
61     
62     if(client.nickname)
63     {
64       ws.sockets.emit(‘notice‘,"系统",`${client.nickname}已离开聊天室`);
65     }
66   })
67 })

 

 

 

三、这里要注意一下,要引进我们的技术图片 socket.io.js

     然后下面就是我们要写的业务逻辑

 

 

 

  1 <script>
  2   //先连接
  3   var ws = io.connect("http://localhost:3000");
  4 
  5   //客户已存在的事件接收
  6   ws.on(‘checkUser‘,function(nickname){
  7     var nickname = prompt(`${nickname}已经存在了`);
  8 
  9     while(!nickname)
 10     {
 11       nickname = prompt(‘昵称不能为空‘);
 12     }
 13 
 14     //将重新输入的结果再给会服务器验证是否存在
 15     ws.emit(‘join‘,nickname);
 16 
 17   })
 18 
 19   //在客户端上面绑定事件
 20   ws.on(‘connect‘,function(){
 21     var nickname = prompt("请输入你的昵称");
 22 
 23     while(!nickname)
 24     {
 25       nickname = prompt(‘昵称不能为空‘);
 26     }
 27 
 28     //将昵称传递给服务器
 29     ws.emit(‘join‘,nickname);
 30   });
 31 
 32 
 33   //接收一个系统服务器通知的消息
 34   ws.on(‘notice‘,function(from,msg){
 35     addMessage(from,msg);
 36   });
 37 
 38   //将信息添加到页面里面
 39   function addMessage(from,msg)
 40   {
 41     var li = document.createElement("li");
 42 
 43     li.innerHTML = `<span>${from}:</span>${msg}`;
 44 
 45     var chat = document.getElementById("chat_conatiner");
 46 
 47     chat.append(li);
 48 
 49     document.getElementById("chat").scrollTop = document.getElementById("chat").scrollHeight;
 50   }
 51 
 52   //清屏
 53   document.getElementById("clear").addEventListener(‘click‘,function(){
 54     document.getElementById("chat_conatiner").innerHTML = "";
 55   });
 56 
 57   //发送
 58   document.getElementById("send").addEventListener("click",function(){
 59     send();
 60   });
 61 
 62 
 63 
 64   document.getElementById("input").addEventListener("keydown",function(e){
 65     if(e.keyCode == 13 && e.ctrlKey)
 66     {
 67       send();
 68     }
 69   });
 70 
 71 
 72   function send()
 73   {
 74     var content = document.getElementById("input");
 75 
 76     if(content.value.trim().length > 0)
 77     {
 78       //添加到自己的区域里面
 79       addMessage("我",content.value);
 80 
 81       //发送给服务器
 82       ws.emit(‘message‘,content.value);
 83 
 84     }
 85 
 86     content.value = "";
 87     KindEditor.html("#input","");
 88 
 89     //产生焦点
 90     // KindEditor.focus();
 91 
 92     
 93   }
 94 
 95   //客户端要接收服务器广播回来的用户信息
 96   ws.on("message",function(from,msg){
 97     addMessage(from,msg);
 98   });
 99 
100 
101 
102   
103 </script>

 

 

 

//引入第三方模块插件
var express = require(‘express‘),
io = require(‘socket.io‘);


//创建app
var app = express();

//给app绑定一个监听的端口
var server = app.listen(3000,function(){
console.log(‘程序已启动‘);
});


//用socket来监听当前服务
var ws = io.listen(server);


//socket事件

var checkUser = function(nickname)
{
//ws.sockets.sockets 存放所有连接的用户
for(var k in ws.sockets.sockets)
{
if(ws.sockets.sockets[k].nickname == nickname)
{
//该用户已经存在了
return true;
}
}

//用户不存在
return false;
}

//当有客户端连接上来的时候会触发到当前的事件函数
ws.on(‘connection‘,function(client){
 
//给客户端绑定一个事件用来接收昵称
client.on(‘join‘,function(nickname){
 
//用户不存在
//给当前客户端对象添加自定义属性
client.nickname = nickname;

//调用客户端的提醒事件
ws.sockets.emit(‘notice‘,‘系统‘,`${nickname}已加入群聊(*^__^*) 嘻嘻……`);
 
})

client.on(‘message‘,function(content){

//把他信息发给所有人,但是除了自己 广播
//调用客户端的接收方法
client.broadcast.emit(‘message‘,client.nickname,content);
});


client.on(‘disconnect‘,function(){
 
if(client.nickname)
{
ws.sockets.emit(‘notice‘,"系统",`${client.nickname}已离开聊天室`);
}
})
})

实现一个聊天功能的对话框

标签:对话框   端口   pen   定义   log   lis   配置   mamicode   message   

原文地址:https://www.cnblogs.com/Zcyou/p/10907719.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!