ajax - "User is typing"聊天功能

标签 ajax chat

我正在尝试在聊天中添加“用户正在打字”功能;用 PHP + MySQL/Ajax 编写的聊天。

它应该如何工作:

-当我的聊天伙伴 X 开始打字时,我在聊天框中看到:“X 正在打字”

-当我(名为 Y)打字时,他在聊天框中看到:“Y 正在打字”(就像 Yahoo Messenger 一样)。

到目前为止我尝试过的代码:

<script type="text/javascript" language="javascript">
    var timer = 0;

    function reduceTimer() {
        timer = timer - 1;
        isTyping(true);
    }

    function isTyping(val) {
        if (val == 'true') {
            document.getElementById('typing_on').innerHTML = "User is typing...";
        } else {

            if (timer <= 0) {
                document.getElementById('typing_on').innerHTML = "No one is typing -blank space.";
            } else {
                setTimeout("reduceTimer();", 500);
            }
        }
    }
</script>

<label>
    <textarea onkeypress="isTyping('true'); timer=5;" onkeyup="isTyping('false')" name="textarea" id="textarea" cols="45" rows="5"></textarea>
</label>
<div id="typing_on">No one is typing -blank speace.</div>

问题:

  1. 如果我停下来几秒钟思考一下我的拼写,看起来我已经停止打字了。有没有更相关且不太复杂的方法来设置此功能?是否有可能的代码:

    • 文本框不为空(用户按下任意键开始输入)-> 消息:用户正在输入。
    • 文本框为空 -> 消息:用户未输入。
    • 文本框不为空,但用户未按任何键超过 5 秒 -> 消息:用户未输入。
  2. 它向我自己表明我正在打字;我怎样才能实现它或在哪里实现它,以便在我的聊天框中看到“X用户正在打字”而不是“我自己正在打字”。对于其他用户来说也是如此,他应该收到有关我正在打字/未打字的消息,而不是有关他自己的消息。

谢谢。

最佳答案

我创建了一个fiddle这可能对你有帮助。这个想法是使用 javascript setInterval 函数刷新事件消息。

var textarea = $('#textarea');
var typingStatus = $('#typing_on');
var lastTypedTime = new Date(0); // it's 01/01/1970, actually some time in the past
var typingDelayMillis = 5000; // how long user can "think about his spelling" before we show "No one is typing -blank space." message

function refreshTypingStatus() {
    if (!textarea.is(':focus') || textarea.val() == '' || new Date().getTime() - lastTypedTime.getTime() > typingDelayMillis) {
        typingStatus.html('No one is typing -blank space.');
    } else {
        typingStatus.html('User is typing...');
    }
}
function updateLastTypedTime() {
    lastTypedTime = new Date();
}

setInterval(refreshTypingStatus, 100);
textarea.keypress(updateLastTypedTime);
textarea.blur(refreshTypingStatus);

关于ajax - "User is typing"聊天功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53538238/

相关文章:

C++ - 字符数组和空字符

android - 如何清除聊天服务器中的 quickblox 未读消息数?

android - 将 WhatsAPI/Yowsup 集成到 Android 中

c# - ASP.NET 高效聊天应用程序方法

javascript - 从 responsetext 属性中删除引号

jquery - 从 PHP 返回的 JSON 未由 jQuery.each() 正确处理以在 Google map 上显示为新标记

javascript - 完成所有ajax查询后执行一个函数

jquery - 提交ajax表单时MVC 5模型属性为空

javascript - 为什么选择 AJAX 历史记录管理器?

php - 从 SQL DB 而不是聊天应用程序的文件进行轮询会提高性能吗?