「ユーザーが入力しています」という機能は、ユーザーが入力を押したときに「入力しています」機能を削除しません。したがって、ユーザーがメッセージを送信しても、タイマーがなくなるまで、「タイピング中です」というメッセージが表示されます。ユーザーがメッセージを送信したときに「入力しています」機能を停止する方法
アイデア?
クライアント側
// Detect typing
function timeoutFunction() {
typing = false;
socket.emit("typing", false);
socket.emit("notTyping", true)
}
$("#msg").keypress(function(e){
if (e.which !== 13) {
if (typing === false && $("#msg").is(":focus")) {
typing = true;
socket.emit("typing", true);
} else {
clearTimeout(timeout);
timeout = setTimeout(timeoutFunction, 1500);
}
}
else if(e.which == 13 && $("#msg").val() !== "") {
$("#"+data.person+"").remove();
}
});
socket.on("isTyping", function(data) {
if (data.isTyping) {
if ($("#"+data.person+"").length === 0) {
socket.emit("checkTypingFunction");
$("#chat").append("<div id='"+ data.person +"'><span class='grey'>" + data.person + " is typing...</div>");
timeout = setTimeout(timeoutFunction, 1500);
}
} else {
$("#"+data.person+"").remove();
}
});
サーバー側:
client.on("typing", function(data) {
if (typeof people[client.id] !== "undefined")
socket.sockets.in(client.room).emit("isTyping", {isTyping: data, person: people[client.id].name});
client.broadcast.to(client.room).emit("isTyping", {isTyping: data, person: people[client.id].name});
console.log("Someone is typing");
});
は私が呼び出し、その多くの時間のために( 'keyup')、すでに動作している'「notTyping」 ' – Rayon
を定義した期間を続けるだろう。ユーザーがEnterキーを押したときに停止する機能が必要です(メッセージを送信します)。 – JonasSH
を試すhttps://jsfiddle.net/rayon_1990/8ps2wcur/1/ – Rayon