Я пытаюсь добавить в чат функцию "пользователь набирает"; чат, написанный на 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>
Вопросы:
-
Если я остановлюсь на несколько секунд, чтобы подумать о моем написании, похоже, что я прекратил печатать. Существует ли более улокальный и менее сложный способ установки этой функции? Существует ли код для:
- текстовое поле не пусто (пользователь нажал любую клавишу, так что начал печатать) → Сообщение: пользователь печатает.
- пустое текстовое поле → Сообщение: пользователь не печатает.
- текстовое поле не пустое, но пользователь не нажал ни одной клавиши дольше 5 секунд → Сообщение: пользователь не печатает.
-
Он показывает себе, что я печатаю; как я мог реализовать его или где, чтобы увидеть в моем окне чата "X пользователь печатает", а не "Я сам печатаю". То же самое для другого пользователя, он должен получить сообщение о том, что я набираю/не печатаю, а не о себе.
Спасибо.