【问题标题】:I need to keep a page scrolled to the bottom UNTIL the user scrolls back up我需要保持页面滚动到底部,直到用户向上滚动
【发布时间】:2015-04-17 01:56:08
【问题描述】:

好的,这是我的情况:

我一直在为一个业余项目/爱好开发聊天室类型的网站。当前布局使用 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. 获取用户是否滚动到底部 2. 添加消息。 3. 如果 1 为真,则滚动到底部。
  • 我明白了逻辑,我想我只是不明白它的语法。我还不太懂 JS 或 jquery,但我正在努力学习。我一直在谷歌上搜索你所说的,但到目前为止我还不够。不过我会继续检查。谢谢!
  • 我会写一个答案。

标签: javascript jquery css ajax scroll


【解决方案1】:

你需要的基本逻辑是:

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/

【讨论】:

  • 我已更新我的问题以包含更多代码。我认为您的答案肯定会奏效,因为它确实有意义 - 我只是无法让它正确触发。我认为这可能与我的 div 更新方式有关。我会做错事吗?
  • 试试看框架中$(window).scrollTop() + $(window).height()$(document).height()的值是多少。
  • 我使用了我在网上找到的一个函数来显示值是什么,它看起来大约是 819px - 这有帮助吗?此外,我使用的更新的 div 是:&lt;div id="output" style="overflow:auto;"&gt;&lt;/div&gt; 应该以某种方式有所不同吗?对于所有这些愚蠢的问题,我真的很抱歉。在这方面我只是个菜鸟
  • @MikeRoberts 当用户滚动到底部时它们是否相等?也许只需检查我发布的 jsfiddle 链接并尝试了解如何将其应用于您的场景。
  • 它在 IE 中似乎很好用!谢谢你。有没有理由为什么它不能在 chrome 中工作?不过我会接受这个答案,因为它确实在 IE 中起到了作用,而且我确信我只是在做一些让 chrome 起作用的小事
猜你喜欢
  • 1970-01-01
  • 2013-09-07
  • 2018-10-02
  • 1970-01-01
  • 2014-06-10
  • 2012-07-27
  • 1970-01-01
相关资源
最近更新 更多