添加新消息时自动向下滚动

时间:2015-04-12 04:16:05

标签: javascript jquery html ajax

我将添加我的消息,它将自动添加到textarea,它将向下滚动。我有自己的代码。但它似乎不起作用。我也尝试了这段代码,但很难进行操作。 Here

修改
 发送

<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);


});

4 个答案:

答案 0 :(得分:4)

您可以使用

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

如果您在单独的元素中有消息(您应该)。

答案 1 :(得分:1)

在你的ajax成功回调中,你可以使用自动滚动div元素:

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

element.scrollTop = element.clientHeight;

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

根据div高度,它将滚动到div的底部。

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

答案 2 :(得分:0)

如果我是你,我会在我的CSS中为我的元素添加overflow-y: scroll并将以下内容添加到我的成功回调中

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

我在React应用程序中使用它并且它运行得相当好。只需确保在滚动元素之前添加消息。

答案 3 :(得分:0)

这对我有用

//check condition before inserting messages into chatbox div
if(window.pageYOffset+740==html.scrollHeight)
{
   flag=true;
}
/*


append messages into the chatbox

*/

//now if the user is in the last child it will scroll
if(flag)
{
   html.scrollTop=messages.scrollHeight;
            flag=false;
}