Hoe zorgen dat chat niet naar beneden scrollt als je zelf omhoog scrollt

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Omar M

Omar M

29/01/2015 01:43:10
Quote Anchor link
Hallo,

Ik ben bezig een chat in vanilla JS en Ajax te maken. Het leeuwendeel van de chat werkt prima alleen is er een probleem wbt omhoog scrollen in de chat. Het is simpelweg onmogelijk om omhoog te scrollen. Dit komt omdat ik bij elke AJAX update de scrollDown() functie aanroep. Nu wil ik ervoor zorgen dat als je naarboven aan het scrollen bent of als de scrollbalk niet helemaal naar beneden is je dan niet telkens weer naar beneden scroll.

Ik heb al veel Gegoogled maar een goed antwoord kon ik niet vinden of het waren jQuery code examples. Ik heb ook al het enige geprobeerd met div.scrollHeight, div.scrollTop maar tevergeefs.

Hier is mijn code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<script type="text/javascript">


getBerichten();

function getHTTPObject(){
   if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
   else if (window.XMLHttpRequest) return new XMLHttpRequest();
   else {
      alert("Your browser does not support AJAX.");
      return null;
   }
}  

function doWork(id, user_id) {    
    nieuwbericht = getHTTPObject();
    if (nieuwbericht != null) {

        if( document.getElementById('bericht').value != "")
        {

        nieuwbericht.open("GET", "ajaxberichten.php?id=" + id + "&user_id=" + user_id + "&bericht="
                        + document.getElementById('bericht').value, true);

        nieuwbericht.send(null);
        document.getElementById("bericht").value = "";
        }
    }
}

function setOutput()
{
    if(httpObject.readyState == 4){
        document.getElementById('berichten').innerHTML = httpObject.responseText;
            aantalkeer = aantalkeer + 1;
             bericht = document.getElementById('chatbox');

        
                scrollDown();

                setInterval(getBerichten(),1000);
      

        
            

    }
}
 
function getBerichten()
{
    httpObject = getHTTPObject();
    
    if (httpObject != null)
    {
        httpObject.open("GET", "ajaxgetberichten.php?id=<?php echo $_GET['id'] ?>", true);

        httpObject.send(null);
        httpObject.onreadystatechange = setOutput;
    }
}

function scrollDown()
{
    var objDiv = document.getElementById("chatbox");
    objDiv.scrollTop = objDiv.scrollHeight;
}


</script>


<div class="postbox">

    <div class="post">

        <div class="chatbox" id="chatbox">
            <div id="berichten"></div>
        </div>

        <form method="post" action="">
            <textarea name="bericht" id="bericht"rows="20" cols="85"> </textarea>
            <input name="verstuur" type="button" onclick="doWork(<?php echo $_GET["id"] ?>, <?php echo $user_id ?>);" value="Verstuur"/>
        </form>  

    </div>
</div>


Alvast bedankt!
 
PHP hulp

PHP hulp

20/04/2024 05:28:31
 
- wes  -

- wes -

29/01/2015 09:11:45
Quote Anchor link
Mag ik vragen waarom je hiervoor geen jQuery wil/kan gebruiken?
 
Omar M

Omar M

29/01/2015 10:58:31
Quote Anchor link
Het betreft een schoolopdracht waarbij we geen gebruik van frameworks en toolkits mogen maken :p.
 
Thomas van den Heuvel

Thomas van den Heuvel

29/01/2015 14:26:19
Quote Anchor link
Misschien kun je een boolean variabele stickToBottom introduceren die standaard op true staat.

Dan, wanneer je omhoog scrollt, krijgt deze de waarde false.

Dan, wanneer je weer helemaal omlaag scrollt, krijgt deze weer de waarde true.

En wanneer er een bericht binnenkomt controleer je eerst de waarde van deze variabele voordat je daadwerkelijk gaat scrollen?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.