node+websockett+に基づいて、テンセント教室のチャットルームのチャット機能を実現します。
疫病の影響を受けて多くの小中学校はオンライン教程を選択して、大多数の学校はテンセント授業を採用して生放送します。それでは、今日はコードを共有します。
先端部分で使う知識:websocket、h 5、conteditable属性のサービスエンド部分:node、websocket部分効果:
機能の詳細に注意する必要があります。
先端部分:
(1)入力ボックスは、表情画像を入力することができます。 textareaは使えません。
(2)メッセージ数の表示制限は、例えば最新の30メッセージのみを表示することができる(domノードの長さを判断し、削除することによって実現される)
(3) 最新のメッセージは常に底に表示されます。
(4)情報分類を区分して、ユーザーが入るか、離れるか、普通のメッセージか、それとも花を送るかを区分する。
サービス部分:
websocketに関する知識の運用
コード:
ここで、node+websockett+に基づいて、テンセント教室のチャット機能を実現する記事を紹介します。これに関連して、もっとnode+websockett+htmlチャットルームの内容を紹介します。私達の以前の文章を検索してください。または、以下の関連記事を引き続きご覧ください。これからもよろしくお願いします。
先端部分で使う知識:websocket、h 5、conteditable属性のサービスエンド部分:node、websocket部分効果:
機能の詳細に注意する必要があります。
先端部分:
(1)入力ボックスは、表情画像を入力することができます。 textareaは使えません。
contenteditable='true'
で実現します。(2)メッセージ数の表示制限は、例えば最新の30メッセージのみを表示することができる(domノードの長さを判断し、削除することによって実現される)
(3) 最新のメッセージは常に底に表示されます。
(4)情報分類を区分して、ユーザーが入るか、離れるか、普通のメッセージか、それとも花を送るかを区分する。
サービス部分:
websocketに関する知識の運用
コード:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" type="text/css" href="css/style.css" rel="external nofollow" />
<title> </title>
</head>
<body>
<div class="container">
<header> !!!</header>
<div class="cont">
<video src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" controls="controls"></video>
</div>
<div class="right">
<div class="right_top">
<div class="item ac_border"> </div>
<div class="item" id="person"> </div>
</div>
<div class="r_item">
<div class="right_cont">
<ul id="messageWrap"></ul>
</div>
<div class="right_bot">
<div class="r_b_t clearfix">
<div class="emoji " title=" "></div>
<div class="flower" title=" "></div>
</div>
<div class="inputMeg_f">
<!--inputMeg div inputMeg_f , , inputMeg , -->
<div class="inputMeg" contenteditable="true" placeholder=" "></div>
</div>
<div class="send_btn"> </div>
<div id="emojiBox" class="clearfix"></div>
</div>
</div>
<div class="r_item" style="display: none">
<ul class="personWrap"></ul>
</div>
</div>
</div>
</body>
<script src="../jquery.js"></script>
<script>
$(".right_top .item").click(function () {
$(this).siblings().removeClass('ac_border')
$(this).addClass('ac_border')
$('.r_item').css('display','none').eq($(this).index()).css('display','block')
})
function checkValue() {
$(".emoji").off('click').click(function (e) {
$("#emojiBox").css('display', 'block')
var ev = e || window.event;
ev.stopPropagation();
})
$(".container").off('click').click(function () {
$("#emojiBox").css('display', 'none')
})
}
checkValue();
//
var emojiHtml = '';
var emojiBox = document.getElementById('emojiBox');
for (var i = 0; i < 7; i++) {
for (var j = 0; j < 15; j++) {
var dom = document.createElement('div');
dom.className = 'emojiItem';
dom.style.backgroundPositionX = -24 * j + 'px';
dom.style.backgroundPositionY = -29 * i + 'px';
emojiBox.appendChild(dom)
chooseEmoji(i, j, dom)
}
}
function chooseEmoji(i, j, dom) {
dom.onclick = function (e) {
const src = 'img/icon' + (i * 15 + j) + '.gif';
var img = $('<img class="emojiImg" src=' + src + '>')
$('.inputMeg').append(img)
$("#emojiBox").css('display', 'none')
var ev = e || window.event;
ev.stopPropagation();
}
}
var userName=''; //
//websocket
var websocket = new WebSocket(
'ws://localhost:8001/'); // , ws , http ( localhost:8001, , ip192.168.0.107:8001)
websocket.onopen = function () { //
$('.send_btn').off('click').click(function () {
var text = $('.inputMeg').html()
if (text != '' && text != ' ') {
websocket.send(JSON.stringify({data:text,type:'message'})) //
$('.inputMeg').html('')
}
});
$('.flower').off('click').click(function(){ //
var dom= '<span>"'+userName+'"</span> <br> " " <i class="flowIcon"></i>'
websocket.send(JSON.stringify({data:dom,type:'flower'})) //
})
}
websocket.onmessage = function (e) {
var res = JSON.parse(e.data);
message(res)
}
function message(res) {
var dom = document.createElement('li');
switch (res.type) {
case 'enter':
dom.innerHTML = res.data;
dom.style.color = 'green';
userName=res.nickname;
person(res);
break;
case 'leave':
dom.innerHTML = res.data;
dom.style.color = 'red';
person(res)
break;
case 'message':
name.innerHTML = res.nickname + ': ';
dom.innerHTML = "<span class='nickName'>" + res.nickname + ": </span> " + res.data + ""
break;
case 'flower':
dom.className='flowerLi';
dom.innerHTML=res.data;
break;
default:
break;
}
document.getElementById('messageWrap').appendChild(dom);
limitLength(30)
scrollBottom();
//
}
function scrollBottom() { //
var h1 = document.getElementsByClassName('right_cont')[0].offsetHeight;
var h2 = document.getElementById('messageWrap').offsetHeight;
if (h2 > h1) {
$('.right_cont').scrollTop(h2 - h1);
}
}
function limitLength(num) { //
var li = $('#messageWrap li')
if (li.length > num) {
li.eq(0).remove();
}
}
function person(res){ //
var html=''
for(var i=0;i<res.client.length;i++){
html+= '<li><span class="nickname">'+res.client[i]+'</span></li>'
}
$('.personWrap').html(html);
$('#person').html(' ('+res.client.length+')')
}
</script>
</html>
server.js:
var ws = require("nodejs-websocket")
var port=8001;
var clientCount=0;
var nicknameArr=[];
var server = ws.createServer(function (conn) {
clientCount++;
conn.nickname='user'+clientCount;
nicknameArr.push(conn.nickname)
var mes={type:'enter',data:' '+conn.nickname+' ',nickname:conn.nickname,client:nicknameArr}
broadcast(JSON.stringify(mes))
conn.on("text", function (str) { //
var zstr=JSON.parse(str)
var mes={type:zstr.type,data:zstr.data,nickname:conn.nickname,client:nicknameArr}
broadcast(JSON.stringify(mes))
})
conn.on("close", function (code, reason) {
clientCount--;
for(var i=nicknameArr.length-1;i>=0;i--){ //
if(conn.nickname==nicknameArr[i]){
nicknameArr.splice(i,1)
}
}
var mes={type:'leave',data:conn.nickname+' ',nickname:conn.nickname,client:nicknameArr}
broadcast(JSON.stringify(mes))
});
conn.on('error',function(err){
console.log('handle err')
})
}).listen(port)
function broadcast(str){ //
server.connections.forEach(function(connection){
connection.sendText(str)
})
}
締め括りをつけるここで、node+websockett+に基づいて、テンセント教室のチャット機能を実現する記事を紹介します。これに関連して、もっとnode+websockett+htmlチャットルームの内容を紹介します。私達の以前の文章を検索してください。または、以下の関連記事を引き続きご覧ください。これからもよろしくお願いします。