新消息时,聊天滚动不会消失吗?

时间:2013-06-21 13:37:16

标签: jquery

http://driptone.com/jony/applications/chat/index.php

当新消息发生时,滚动就会上升,而我有一个方法可以将其向下拖动,如果它在底部:

                element = $("#chat")[0];
                if (element.scrollTop == element.scrollHeight - element.height) {
                    element.scrollTop(element.scrollHeight);                
                }               

运行此间隔:

        setInterval(function() {
                pingServer();   
                element = $("#chat")[0];
                if (element.scrollTop == element.scrollHeight - element.height) {
                    element.scrollTop(element.scrollHeight);                
                }               
        }, 5000);   

之前曾经工作过,我不知道为什么它现在停止工作了。

知道为什么要停止?

    function reload() {
            $.post("ajax.php", { loadMessages : "1" }, function(data) {
                    $(".discussion").html(data)
                    element = $("#chat")[0];
                    if (element.scrollTop == element.scrollHeight - element.height) {
                        element.scrollTop(element.scrollHeight);                
                    }                           
            });
    }

重新加载功能

2 个答案:

答案 0 :(得分:0)

您对服务器的ping是异步工作的,并且您没有调用逻辑来调整此请求回调时的滚动位置。

因此,除非你的ping立即响应,否则你的流程是:

  • Ping服务器
  • 调整滚动
  • 从ping收到的回复
  • 新消息

您需要:

  • Ping服务器
  • 从ping收到的回复
  • 新消息
  • 调整滚动

因此,在添加新消息后,您需要在回叫中调用滚动调整。


  

知道为什么会停止吗?

我的猜测是您的服务器响应现在需要更长时间(可能您已在生产环境中移动),因此您的流程流程不同步。

答案 1 :(得分:0)

尝试这个,在我在控制台中测试时似乎有效:

var element = $("#chat")[0];
element.scrollTop = element.scrollHeight;

我认为你不需要if条件,你永远不会进入它。