AJAX Chat – 自动向下拖动向下滚动,但在用户向上滚动时不要拖动它?

当出现新消息时,您知道大多数聊天内容,滚动内容是否已关闭。 我的聊天每5000毫秒重新加载一次,然后在300毫秒后拖动滚动。

但是我想做到这一点,所以当用户拖动向上滚动时,滚动拖动不会影响他。 是否有一个函数,一旦用户向上滚动,填充变量,如draggedScroll = true?

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

这是聊天,如你所见,如果你上去,它会每隔5000毫秒拖动你,我想只在用户向上滚动时阻止它。 如果用户再次滚动到底部[0],它将使draggedScroll = false,这将再次影响他。

我怎么做?

问题还没有解决!

问题解释:

滚动在滚动的高度至少为1500px( scrollTop(1500) )时才起作用(聊天中有34条消息)。

如果低于该值,滚动将不起作用,并将向上滚动新消息。

function reload() { var oldscrollHeight = ($("#chat").scrollTop() + 470); console.log(" old: " + oldscrollHeight); $.post("ajax.php", { loadMessages : "1" }, function(data) { $(".discussion").html(data); var newscrollHeight = $("#chat").prop("scrollHeight"); console.log(" new: " + newscrollHeight); if(newscrollHeight < (oldscrollHeight + 150)) { var height = $('#chat')[0].scrollHeight; $('#chat').scrollTop(height); } }); } 

基本上我在那里做了什么,我采取了卷轴的当前位置,并添加了470像素(因为它将始终低于整个高度)。

然后检查,如果新的高度<<旧高度+ 150px。

如果是,则向下滚动。 否则保持相同的位置。

我自己遇到了问题,这就是我解决的问题:

  1. 绑定到相应容器的scroll事件
  2. 在事件处理程序内部读出:
    • $(element).scrollTop()
    • $(element).prop('scrollHeight')
    • $(element).height()
  3. scrollTop == scrollHeight - height时,滚动条位于底部
  4. 如果条件为true :启用自动滚动,否则禁用它。
  5. 如果需要减去某种余量以改善用户体验(请参阅我的解决方案)

我的解决方案(用CoffeeScript编写)

 $('#messageContainer').on('scroll', function(event) { var element, height, scrollHeight, scrollTop; element = $(this); scrollTop = element.scrollTop(); scrollHeight = element.prop('scrollHeight'); height = element.height(); if (scrollTop < scrollHeight - height - 25) { disableScroll(); } if (scrollTop > scrollHeight - height - 10) { return enableScroll(); } }); 

检查element.scrollTop 。 如果它等于element.scrollHeight - element.height进行滚动,否则不滚动。

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

只需在滚动条被设置时设置一个标志,例如:

 var bScroll = true; // My flag for true = scrolling allowed, false = scrolling prevented $('#scrollbar').focus(function(){ bScroll = false; ); $('#scrollbar').focusOut(function(){ bScroll = true; ); function scroll(){ if(!bScroll){ return false } } 

更新 :对,检查bScroll