2015-04-12 2 views
4

Я собираюсь добавить свое сообщение, и оно будет автоматически добавлено в textarea, и оно будет прокручиваться вниз. У меня есть свои собственные коды. Но похоже, что это не работает. Я тоже пробовал этот код, но его трудно было создать. HereAuto scroll down при добавлении нового сообщения

EDIT:
Отправить

<textarea name="msg" id="area" ></textarea><br/> 
<a href="#" onclick="submitChat()"> Send </a> 


    <div id="chatlogs"> 
    </div> 




var onKeyDown = function(e) { 
    if (e.which == 13) { 
    e.preventDefault(); 

    submitChat(); 
    $("#area").val(""); 
    } 
}; 

$("#area").on("keydown", onKeyDown); 

function submitChat(){ 

    if(form1.msg.value ==''){ //tell the function to exit if one of the fields are blank 
    alert("All fiels are mandatory"); 
    return; 
    } 

    form1.uname.readonly=true; 
    form1.uname.style.border='none'; 
    $('#imageload').show(); 

    var uname= form1.uname.value; //storing the value pf fields into js variable which will pass on insert.php myimage 
    var msg = form1.msg.value; 
    var myimage = form1.myimage.value; 
var room = form1.room.value; 

    var xmlhttp = new XMLHttpRequest(); 

    xmlhttp.onreadystatechange = function(){ 
     if(xmlhttp.readyState == 4 && xmlhttp.status ==200) 
     { 
     document.getElementById('chatlogs').innerHTML = xmlhttp.responseText; 
      $('#imageload').hide(); 
     } 

    } 

    xmlhttp.open('GET','insert.php?uname='+uname+'&msg='+msg+'&myimage='+myimage+'&room='+room,true); 
    xmlhttp.send(); 
} 


$(document).ready(function(e) 
{ 

    $.ajaxSetup({cache:false}); 
    setInterval(function() {$('#chatlogs').load('logs.php');}, 2000); 


}); 

ответ

1

В вашем АЯКСЕ обратного вызова, вы можете использовать автоматические прокрутки DIV элемента:

var element = document.getElementById('chatlogs'); 

element.scrollTop = element.clientHeight; 

//You can even use 
// element.scrollTop = element.scrollHeight; 

Основываясь на высоту сНа, он будет прокручивать на дно дива.

setInterval(function() { 
    $('#chatlogs').load('logs.php'); 
    var element = document.getElementById('chatlogs'); 
    element.scrollTop = element.clientHeight; 
}, 2000); 
+0

Где именно я помещаю этот var "element = document.getElementById ('# chatlogs'); – Ikaros

+0

В вашем setInterval, который у вас есть внизу. Я включил это и в свой ответ. – mohamedrias

+0

Yup, you're использовал jquery 'scrollTop' – mohamedrias

4

Вы можете использовать

document.getElementById('chatlogs').lastChild.scrollIntoView(false) 

, если у вас есть сообщения в отдельных элементах (вы должны).

+0

Когда я пытаюсь прокрутить чат-чат, он всегда опускается. который не подходит для создания чата – Ikaros

+0

, это полезно. для тех, кто хочет добавить больше контроля, они могут добавить условие, где, если клиент НЕ находится в нижней части прокрутки, он не должен автоматически прокручиваться. –

0

Если бы я тебя, я бы дать мой элемент в моем CSS в overflow-y: scroll и добавьте следующие строки в мой успех обратного вызова

var element = document.getElementById('chatlogs'); 
element.scrollTop = element.scrollHeight; 

Я его, используя в React приложения, и она работает достаточно хорошо. Просто убедитесь, что сообщение добавлено перед прокруткой элемента.