2010-12-02 3 views
3

Ich brauche einige Anwendungsbeispiele, um dies zu erreichen. Ich habe einige HTML:Erstellen eines AJAX-Chats mit erweiterten Bildlauffunktionen. Wie?

<div id="chatDisplay"> 
</div> 
<input type="text" id="message" /><input type="button" id="send" value="Send" /> 

Dann habe ich einige JQuery:

// This function sets up the ajax that posts chat messages to the server. 
$(function() 
{ 
    $('#send').click(function() 
    { 
      $.ajax(
      { 
       url: "chat/postmsg",, 
       data: { msg: $('#message').val(); }, 
       type: "POST", 
       success: function (response) 
       { 
        // Server sends back formated html to append to chatDisplay. 
        $('#chatDisplay').append(response); 
        //scroll to bottom of chatDisplay 
       } 
      }); 
    }); 
}); 

// This function periodically checks the server for updates to the chat. 
$(function() 
{ 
    setInterval(function() 
    { 
      $.ajax(
      { 
       url: "chat/getupdates", 
       type: "POST", 
       success: function (response) 
       { 
         // Server sends back any new updates since last check. 
         // Perform scroll and data display functions. Pseudo-code to follow: 

         // If (chatDisplay is scrolled to bottom) 
         // { 
         //  append response to chatDisplay 
         //  scroll to bottom of chatDisplay 
         // } 
         // else if (chatDisplay is scrolled up from bottom by any amount) 
         // { 
         //  append response to chatDisplay, but do not scroll to bottom. 
         // } 
       } 
      }); 
    }, 7000); 
}); 

Dies ist nur ein Beispiel für grundlegende Chat-Funktionen, ohne serverseitigen Code natürlich. Was ich brauche, ist ein Beispiel, wie der Pseudo-Code beschrieben wird. Wie erkenne ich, ob der Benutzer zum Ende des DIV gescrollt wurde und wie scrolle ich nach unten? Ich möchte nicht, dass sie auf den Grund des DIV gesprungen werden, wenn sie scrollen, um sich die Chat-Geschichte anzusehen.

Ich habe von ScrollTo-Plugin von JQuery gehört, aber brauche nur ein paar Beispiele.

Vielen Dank im Voraus!

EDIT: Hier ist die Lösung für Interessenten.

success: function (response) 
{ 
    var elem = $('#chatDisplay'); 
    var atBottom = (elem[0].scrollHeight - elem.scrollTop() == elem.outerHeight()); 
    $('#chatDisplay').append(response); 
    if (atBottom) 
      $('#chatDisplay').scrollTop($('#chatDisplay')[0].scrollHeight); 
} 

Zum http://www.jsfiddle.net/f4YFL/4/ für ein Beispiel dafür in Aktion.

+0

Ty, für diesen Beitrag. Die angegebene Lösung funktionierte jedoch nicht für mich. Vielleicht lag es daran, dass ich das 'html' -Tag als' elem' verwendet habe. Allerdings habe ich das Update gefunden: 'var atBottom = ($ (window) .height() + elem.scrollTop() == elem.outerHeight());'. Vielleicht braucht jemand es :) –

Antwort

1

Scheint, wie Sie Ihren Pseudo-Code zu diesem Refactoring können:

append Antwort auf chatDisplay if (chatDisplay an der Unterseite) {nach unten scrollen}

Hier ist ein Link, wie um zu bestimmen, wenn Sie nach unten gescrollt werden:

http://yelotofu.com/2008/10/jquery-how-to-tell-if-youre-scroll-to-bottom/

Hoffe, das hilft.

Bob

+0

Danke, aber ich habe nicht nach meinem Pseudocode gefragt, um refaktorisiert zu werden, das Ziel ist klar. Ich fragte nach konkreten Beispielen im Kontext der Methode, in der sich der Pseudocode befindet. Aus diesem Grund habe ich so viele kontextbezogene Informationen zur Verfügung gestellt, dass jemand mir innerhalb des von mir bereitgestellten Codes ziemlich konkrete Beispiele geben konnte. – Chev

+0

Der Code, den Sie für den unteren Bildlauf prüfen müssen, befindet sich in dem Post, auf den ich verwiesen habe. Verwenden Sie diesen Code, um vor dem Anhängen nach unten zu suchen. Fügen Sie Ihren Inhalt an. Wenn Sie unten waren, verwenden Sie den Code in diesem Artikel zum Scrollen. – rcravens

+0

Es tut mir leid, ich mag es einfach nicht, mit externen Ressourcen als die ganze Antwort verknüpft zu sein. Ich nahm mir die Zeit, eine detaillierte Frage zu stellen, zumindest konnte sich jemand die Zeit nehmen, eine etwas detailliertere Antwort zu erstellen, anstatt einen Link zu geben und auf ein Häkchen zu hoffen. – Chev

Verwandte Themen