2015-10-09 161 views
1

我有這個問題,向下滾動區間,如果用戶向下滾動

我創建一個聊天,其中更新每隔2個secounds一路,通過AJAX。

現在我想滾動到底部,每次加載時,都很有效。

現在的問題是,如果他們向上滾動檢查舊消息,它會向下滾動,煩人的權利?現在我試着想出一個解決方案,這應該是工作。但我很愚蠢。任何人都可以幫助我嗎?:

function loadChat() { 
    $.ajax({ 
     url: 'ajax/load_chat.php', 
     success: function(data) { 
      $('#chatbox').html(data); 
      //console.log($('#chatbox')[0].scrollHeight - $('#chatbox').innerHeight()); 
      //console.log($('#chatbox').scrollTop()); 
      if($('#chatbox')[0].scrollHeight - $('#chatbox').innerHeight() + 50 < $('#chatbox').scrollTop()) { 
       $("#chatbox").stop().animate({ scrollTop: $('#chatbox')[0].scrollHeight}, 200); 
      } 
     }, 
    }); 
} 

這段代碼讓它向下滾動,不管是什麼,但我的if語句應該停止那個......對吧?

+0

感謝taxicala爲編輯:)我不知道爲什麼它沒有縮進編號:S – Dyrhoi

回答

1

我建議設置一個標誌如下:

var atBottom = true; 
$('#chatbox').on('scroll', function() { 
    if($(this).scrollTop() + $(this).innerHeight() >= this.scrollHeight) { 
     atBottom = true; 
    } else { 
     atBottom = false; 
    } 
}); 

function loadChat() { 
    $.ajax({ 
     url: 'ajax/load_chat.php', 
     success: function(data) { 
      $('#chatbox').html(data); 
      //console.log($('#chatbox')[0].scrollHeight - $('#chatbox').innerHeight()); 
      //console.log($('#chatbox').scrollTop()); 
      if(atBottom) { 
       $("#chatbox").stop().animate({ scrollTop: $('#chatbox')[0].scrollHeight}, 200); 
      } 
     }, 
    }); 
} 

當用戶滾動起來,則標記被falsy當用戶滾動至底部,它得到truthy這樣。

+0

它的工作原理現在我把我的