题
我正在使用为聊天室setTimeout()实现“用户正在键入”消息。超时存储在句柄中,以便可以在连续按键时清除超时并重置,以便超时真正代表用户完成输入的时间。
但是,假设有一个聊天室,里面有聊天者 A、B 和 C。如果 A 开始打字,那么 B 开始打字,A 的超时被清除并且永远不会消失。
那么,有没有一种方法可以动态创建超时句柄,以便无论聊天室中有多少用户或当前正在打字,我都只能清除相应的句柄?
代码
索引.js
io.on('connection', function(socket){
socket.on('csTyping', function(user){
socket.broadcast.emit('scTyping', user);
});
});
聊天.js
var typingLock = false;
var tMsgTimeout = 1 * 1000;
var tLockTimeoutHandle = window.setTimeout(() => {
typingLock = false;
}, tMsgTimeout);
window.clearTimeout(tLockTimeoutHandle);
var tMsgTimeoutHandle = window.setTimeout(() => {
removeTypingMsg(0);
}, tMsgTimeout);
window.clearTimeout(tMsgTimeoutHandle);
message.addEventListener('keypress', function(){
if (!typingLock) {
socket.emit('csTyping', clientUsername);
typingLock = true;
window.clearTimeout(tLockTimeoutHandle);
tLockTimeoutHandle = window.setTimeout(() => {
typingLock = false;
}, tMsgTimeout);
}
});
socket.on('scTyping', function(user){
feedback.innerHTML += "<p id='typing" + user + "'><em>" + user + " is typing a message...</em></p>";
window.clearTimeout(tMsgTimeoutHandle);
tMsgTimeoutHandle = window.setTimeout(() => {
removeTypingMsg('typing' + user);
}, tMsgTimeout);
});
慕码人8056858
相关分类