我需要将页面滚动到底部,直到用户向上滚动

时间:2015-04-17 01:56:09

标签: javascript jquery css ajax scroll

好的,这是我的情况:

我一直在为一个项目/爱好的聊天室类型的网站工作。当前布局使用html框架。底部框架是“页脚”或“消息输入”框架。顶部框架是显示公共消息的位置。我使用ajax每秒更新顶部帧。它工作正常。我的问题是:

我需要能够将顶部框架一直滚动到底部 - 例如,用户向上滚动以查看旧消息。我目前有一个功能可以让它向下滚动到底部,但每次ajax更新页面时,它会强制它回到底部,所以我无法向上滚动超过一秒钟,这真的令人沮丧。我已经找到了解决方案,但我找不到任何对我有用的东西。我用来滚动到底部的功能如下:

function jumpToPageBottom() {
    $('html, body').scrollTop( $(document).height());
}

这是它的工作,但是,如果用户向上滚动以查看较旧的消息,我需要它来停止强制页面到底部。

更新 -

我应该澄清一下,我使用的是实际帧,而不是iframe。我的“索引”页面代码是:

<FRAMESET ROWS="*,90">
<FRAME SRC="header.php" name="display" MARGINWIDTH="0" MARGINHEIGHT="0" FRAMEBORDER="NO">
<FRAME SRC="footer.php" name="message" SCROLLING="no" BORDERCOLOR="00FF00" MARGINWIDTH="0" MARGINHEIGHT="0">
</FRAMESET>

刷新聊天消息的代码是:

<script id="source" language="javascript" type="text/javascript">
  function jumpToPageBottom() {
    $('html, body').scrollTop( $(document).height());
}


    $(function() {
    startRefresh();
});

function startRefresh() {
    setTimeout(startRefresh,1000);
  $.ajax({                                      
      url: 'api.php',                  //the script to call to get data          
      data: "",                        //you can insert url argumnets here to pass to api.php
                                       //for example "id=5&parent=6"
      dataType: 'json',                //data format      
      success: function(data)          //on recieve of reply
      {

        //--------------------------------------------------------------------
        // 3) Update html content
        //--------------------------------------------------------------------

        $('#output').html(data); //Set output element html   
           jumpToPageBottom();

      } 
    });
  }; 

  </script>

令人耳目一新的只是一种糟糕的方法吗? div的更新方式是否会导致我的一些问题?我很清楚所有这些(显然) - 所以任何建议都会非常感激。

1 个答案:

答案 0 :(得分:3)

您需要的基本逻辑是:

var wasAtBottom = isAtBottom();

$('#output').html(data);

if (wasAtBottom) {
    jumpToPageBottom();
}

isAtBottom来自this answer

function isAtBottom() {
    return $(window).scrollTop() + $(window).height() === $(document).height();
}

以下是适用于您的工作演示:http://jsfiddle.net/9q17euuo/2/