client.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. (function () {
  2. var d = document,
  3. w = window,
  4. p = parseInt,
  5. dd = d.documentElement,
  6. db = d.body,
  7. dc = d.compatMode == 'CSS1Compat',
  8. dx = dc ? dd: db,
  9. ec = encodeURIComponent;
  10. w.CHAT = {
  11. msgObj:d.getElementById("message"),
  12. screenheight:w.innerHeight ? w.innerHeight : dx.clientHeight,
  13. username:null,
  14. userid:null,
  15. socket:null,
  16. //让浏览器滚动条保持在最低部
  17. scrollToBottom:function(){
  18. w.scrollTo(0, this.msgObj.clientHeight);
  19. },
  20. //退出,本例只是一个简单的刷新
  21. logout:function(){
  22. //this.socket.disconnect();
  23. location.reload();
  24. },
  25. //提交聊天消息内容
  26. submit:function(){
  27. var content = d.getElementById("content").value;
  28. if(content != ''){
  29. var obj = {
  30. userid: this.userid,
  31. username: this.username,
  32. content: content
  33. };
  34. this.socket.emit('message', obj);
  35. d.getElementById("content").value = '';
  36. }
  37. return false;
  38. },
  39. genUid:function(){
  40. return new Date().getTime()+""+Math.floor(Math.random()*899+100);
  41. },
  42. //更新系统消息,本例中在用户加入、退出的时候调用
  43. updateSysMsg:function(o, action){
  44. //当前在线用户列表
  45. var onlineUsers = o.onlineUsers;
  46. //当前在线人数
  47. var onlineCount = o.onlineCount;
  48. //新加入用户的信息
  49. var user = o.user;
  50. //更新在线人数
  51. var userhtml = '';
  52. var separator = '';
  53. for(key in onlineUsers) {
  54. if(onlineUsers.hasOwnProperty(key)){
  55. userhtml += separator+onlineUsers[key];
  56. separator = '、';
  57. }
  58. }
  59. d.getElementById("onlinecount").innerHTML = '当前共有 '+onlineCount+' 人在线,在线列表:'+userhtml;
  60. //添加系统消息
  61. var html = '';
  62. html += '<div class="msg-system">';
  63. html += user.username;
  64. html += (action == 'login') ? ' 加入了聊天室' : ' 退出了聊天室';
  65. html += '</div>';
  66. var section = d.createElement('section');
  67. section.className = 'system J-mjrlinkWrap J-cutMsg';
  68. section.innerHTML = html;
  69. this.msgObj.appendChild(section);
  70. this.scrollToBottom();
  71. },
  72. //第一个界面用户提交用户名
  73. usernameSubmit:function(){
  74. var username = /* d.getElementById("username").value */ "safsdf";
  75. if(username != ""){
  76. d.getElementById("username").value = '';
  77. d.getElementById("loginbox").style.display = 'none';
  78. d.getElementById("chatbox").style.display = 'block';
  79. this.init(username);
  80. }
  81. return false;
  82. },
  83. init:function(username){
  84. /*
  85. 客户端根据时间和随机数生成uid,这样使得聊天室用户名称可以重复。
  86. 实际项目中,如果是需要用户登录,那么直接采用用户的uid来做标识就可以
  87. */
  88. this.userid = this.genUid();
  89. this.username = username;
  90. d.getElementById("showusername").innerHTML = this.username;
  91. if(this.username==undefined){
  92. d.getElementById("showusername").innerHTML="暂无用户"
  93. }
  94. this.msgObj.style.minHeight = (this.screenheight - db.clientHeight + this.msgObj.clientHeight) + "px";
  95. this.scrollToBottom();
  96. //连接websocket后端服务器
  97. this.socket = io.connect('ws://localhost:3000/');
  98. //告诉服务器端有用户登录
  99. this.socket.emit('login', {userid:this.userid, username:this.username});
  100. //监听新用户登录
  101. this.socket.on('login', function(o){
  102. CHAT.updateSysMsg(o, 'login');
  103. });
  104. //监听用户退出
  105. this.socket.on('logout', function(o){
  106. CHAT.updateSysMsg(o, 'logout');
  107. });
  108. //监听消息发送
  109. this.socket.on('message', function(obj){
  110. var isme = (obj.userid == CHAT.userid) ? true : false;
  111. var contentDiv = '<div>'+obj.content+'</div>';
  112. var usernameDiv = '<span>'+obj.username+'</span>';
  113. var section = d.createElement('section');
  114. if(isme){
  115. section.className = 'user';
  116. section.innerHTML = contentDiv + usernameDiv;
  117. } else {
  118. section.className = 'service';
  119. section.innerHTML = usernameDiv + contentDiv;
  120. }
  121. CHAT.msgObj.appendChild(section);
  122. CHAT.scrollToBottom();
  123. });
  124. }
  125. };
  126. $(function(){
  127. CHAT.usernameSubmit();
  128. })
  129. //通过“回车”提交用户名
  130. // d.getElementById("username").onkeydown = function(e) {
  131. // e = e || event;
  132. // if (e.keyCode === 13) {
  133. // CHAT.usernameSubmit();
  134. // }
  135. // };
  136. // //通过“回车”提交信息
  137. // d.getElementById("content").onkeydown = function(e) {
  138. // e = e || event;
  139. // if (e.keyCode === 13) {
  140. // CHAT.submit();
  141. // }
  142. // };
  143. })();