Javascript / JQuery таймер - PullRequest
       6

Javascript / JQuery таймер

0 голосов
/ 28 февраля 2012

Я делаю чат, и у меня есть система, которая уведомляет пользователей, когда другой пользователь печатает, все работает хорошо, однако теперь я хочу сделать его еще лучше, чтобы он не глючил, и сделать этоМне нужно отправить событие через сервер (с помощью веб-сокетов), поэтому я хочу, чтобы он не срабатывал каждый раз, когда пользователь нажимает клавишу, а отправлял его каждые 4 секунды или около того, чтобы пользователь печатал, но я не могу получить то, чтоЯ пытался работать совершенно правильно, похоже, это работает, но через несколько секунд он срабатывает при каждом нажатии клавиши, потому что таймер испортился или что-то в этом роде.

var stillTyping = 0;

$("body").on("keypress",".chat-form .chat-textarea",function(event) {

if(!userTyping||stillTyping>3)
{
    friendID = $(this).attr("rel");
    var currentID = cookie("login");
    socket.emit('userChatTyping', friendID, currentID);


    setInterval(function(){stillTyping++},1000);
    stillTyping = 0;

}

clearTimeout(inputTimer);
userTyping = true;
inputTimer = setTimeout(finishedTyping, 1200);

});

1 Ответ

0 голосов
/ 28 февраля 2012

Вы устанавливаете интервал здесь

    setInterval(function(){stillTyping++},1000);

, поэтому эта функция будет вызываться каждые тысячи секунд, независимо от того, перестанет ли пользователь печатать.

Вам нужно очистить этот интервал, когда пользователь перестал печатать

var typeInterval=setInterval(function(){stillTyping++},1000);

if( $(".chat-textarea").val()==""){
   clearInterval(typeInterval);
   stillTyping=0;
}

Вы можете использовать вместо этого тайм-ауты

var timeout=setTimeout(function(){stillTyping++},1000);


  if( $(".chat-textarea").val()==""){

 stillTyping=0;
}
...