【问题标题】:only scroll to bottom if user not scrolling如果用户不滚动,则仅滚动到底部
【发布时间】:2016-11-03 19:59:03
【问题描述】:

我发现自己再次对 JS 感到沮丧!请帮忙!

下面是我用于一个简单聊天应用程序的一些代码,它通过 AJAX 请求刷新文本文件中的内容。同时它滚动到窗口的底部。我想要它,所以如果用户向上滚动以赶上它,它不会在刷新时通过将它们向下发送到底部来继续中断这种行为。我怎么能这样。

<script>

$(function() {
  startRefresh();  
});
function startRefresh() {
    setTimeout(startRefresh,3000);

    $.post('pollchat.php', function(data) {
         $('#content_div_id').html(data);
         var wtf    = $('#content_div_id');
         var height = wtf[0].scrollHeight;
         wtf.scrollTop(height); 
    });
}
</script>

非常感谢任何帮助。

【问题讨论】:

  • 在刷新内容之前你需要获取用户的滚动位置和加载后设置滚动位置
  • 这与标签 PHP 有什么关系?
  • @user:看看我的回答,让我知道它是否有帮助
  • 试过了..没用

标签: javascript jquery ajax


【解决方案1】:

查看我如何使用当前滚动位置并计算用户是否滚动..

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

function startRefresh() {
  setTimeout(startRefresh, 1000);
  var wtf = $('#content_div_id');
  var currentScrollPos = wtf.scrollTop();
  var elementHeight = wtf[0].scrollHeight;
  var scroll = false;

  //User has scrolled, don't set scroll
  if (wtf.height() + currentScrollPos >= elementHeight) {
    scroll = true;
  }

  var data = $('#content_div_id').html();
  data += "Some Text<br/>";
  $('#content_div_id').html(data);

  if (scroll) {
    var height = wtf[0].scrollHeight;
    wtf.scrollTop(height);
  }
}
#content_div_id {
  max-height: 100px;
  overflow-y: scroll;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="content_div_id">
  Some Text
  <br/>Some Text
  <br/>Some Text
  <br/>Some Text
  <br/>
</div>

更新: 试试这段代码,你可能需要修复一两件事情......但是看看代码并得到一个想法

$(function() {
  startRefresh();  
});
function startRefresh() {
    setTimeout(startRefresh,3000);

    $.post('pollchat.php', function(data) {
        var wtf = $('#content_div_id');
        var currentScrollPos = wtf.scrollTop();
        var elementHeight = wtf[0].scrollHeight;
        var scroll = false;

        //User has scrolled, don't set scroll
        if (wtf.height() + currentScrollPos >= elementHeight) {
            scroll = true;
        }

         $('#content_div_id').html(data);
         if (scroll) {
            var height = wtf[0].scrollHeight;
            wtf.scrollTop(height);
        }
    });
}

【讨论】:

  • 因为您删除了提取数据的功能,我似乎根本无法让它工作。您可以使用我的发布数据 ajax 功能发布回复吗?
  • 如果你理解我在做什么的逻辑,这并不难......从 var wtf == .... 复制代码并将它放在你的 Ajax 回调中,尝试一次,然后让我知道你是否无法完成它......
猜你喜欢
  • 2011-11-28
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 2014-01-10
  • 2013-02-14
  • 1970-01-01
相关资源
最近更新 更多