代码之家  ›  专栏  ›  技术社区  ›  Diasline

每x秒加载一次div并允许向上滚动

  •  1
  • Diasline  · 技术社区  · 6 年前

    在聊天应用程序中,我希望继续加载接收已发布消息的div并向下滚动到该div。我的问题是,一旦向下滚动,我就无法滚动到顶部查看以前的消息,因为向下滚动在setInterval功能中。我该如何解决这个问题,或者是否有其他方法来实现这一点?

    小提琴: jsfiddle.net/hu4zqq4x/316

    setInterval(function() {
      $(".messages").stop().animate({
        scrollTop: $(".messages")[0].scrollHeight
      }, 1000);
      var messageTo = $("#message-to").val();
      var message_from = <?=$iduser?>;
      $('#new_message1_doc').load("<?php echo base_url("
        admin_medico / newMessageDoc ")?>?messageTo=" + messageTo + "&id_user=" + message_from);
    }, 1000)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div class='messages'>
      <div id="new_message1_doc"></div>
    </div>
    1 回复  |  直到 6 年前
        1
  •  1
  •   Itay Gal    6 年前

    您可以保存滚动到的位置,如果没有新消息,此位置将不会更改,在这种情况下,请不要执行滚动。

    Example here

    var lastScrollPosition;
    function getMessages(letter) {
        var div = $("#messages");
        if (lastScrollPosition != div.prop('scrollHeight')){
          lastScrollPosition = div.prop('scrollHeight');
          div.scrollTop(lastScrollPosition );
        }
    }
    
    $(function() {
    setInterval(function(){
         getMessages();
    }, 1000);
    
    });
    

    另一种方法是只发送新消息,然后仅在新消息到达时滚动。