Javascript在滚动高度上更改setInterval

时间:2016-06-19 13:18:58

标签: javascript jquery

在下面你会找到我的原始代码:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

我想要的是根据滚动条的高度(或位置)更改间隔,因为每次运行refreshChat函数时,它都会将滚动条向下推,这使得无法滚动聊天。

我已经尝试过更改:

function refreshChat() {
  var id = "'.$convers_id.'";
  var receiver = "'.$system->getFirstName($second_user->full_name).'";
  $.get("'.$system->getDomain().'/ajax/refreshChat.php?id=" + id + "&receiver=" + receiver, function(data) {
      $("#messages").html(data);
      $(".conversation-message-list").getNiceScroll(0).scrollTop($(".conversation-content").height(), -1);

    setTimeout(refreshChat, 3000);
  });
}

function sendMessage() {
  var user2 = "'.$user2.'";
  var message = $("#message");
    if(message.val() != "" && message.val() != " ") {
    $.get("'.$system->getDomain().'/ajax/sendMessage.php?id="+user2+"&msg="+encodeURIComponent(message.val()), function(data) {
    $("#messages").html(data);
    message.val("");
    });
    }
}
$(document).keypress(function(e) {
        if(e.which == 13) {
            sendMessage();   
        }
    });
        function appendToMessage(str) {
var message = $("#message");
message.val(message.val()+" "+str);
$("#emoticonList").modal("hide");
}

要:

window.setInterval(function(){
  refreshChat();
}, 1000);

但这打破了剧本。我想事先感谢所有人,让efford帮我解决问题。

注意:我根据MPLUNGJAN的建议编辑了我的原始代码

但是如何按照建议在聊天屏幕中添加新消息?

HTML:

    if ($(window).scrollTop() > 200) {
window.setInterval(function(){
  refreshChat();
}, 100000000000);
} else {
    window.setInterval(function(){
  refreshChat();
}, 1000);
}

1 个答案:

答案 0 :(得分:1)

您不应该在AJAX上使用setInterval。而是从成功内部使用setTimeout,然后每次滚动到底部 - 假设这是getNiceScroll的作用,你可以这样做:

function refreshChat() {
  var id = "'.$convers_id.'";
  var receiver = "'.$system->getFirstName($second_user->full_name).'";
  $.get("'.$system->getDomain().'/ajax/refreshChat.php?id=" + id + "&receiver=" + receiver, function(data) {
    $("#messages").html(data);
    $(".conversation-message-list").getNiceScroll(0).scrollTop($(".conversation-content").height(), -1);
    setTimeout(refreshChat, 3000);
  });
}

你还需要发送完整的聊天吗?为什么不添加新消息(如果有的话)。然后,您可以测试是否有新的东西,如果没有,则不做任何事情:

$("#messages").append(data);