聊天框,自动滚动到底部 [英] Chat box, auto scroll to bottom

查看:36
本文介绍了聊天框,自动滚动到底部的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何自动滚动聊天框

HTML:

<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="robots" content="noindex"><title>大学咨询聊天</title><meta name="viewport" content="width=device-width, initial-scale=1"><link href="assets/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"><script src="assets/js/jquery-1.10.2.min.js"></script><script src="assets/js/bootstrap.min.js"></script><script type="text/javascript">window.alert = function(){};var defaultCSS = document.getElementById('bootstrap-css');功能改变CSS(CSS){if(css) $('head > link').filter(':first').replaceWith('<link rel="stylesheet" href="'+ css +'" type="text/css"/>');else $('head > link').filter(':first').replaceWith(defaultCSS);}<身体><div class="panel panel-primary" style="border:0px"><div class="panel-heading top-bar"><div class="col-md-8 col-xs-8"><h3 class="panel-title"><span class="glyphicon glyphicon-comment" style="margin-right:6px;"></span>大学咨询聊天</h3>

<div class="panel-body msg_container_base"><div class="row msg_container base_sent"><div class="col-md-10 col-xs-10"><div class="messages msg_sent"><p>mongodb 的东西看起来不错,是吧?微小的主数据库和巨大的文档存储</p>

<div class="row msg_container base_receive"><div class="col-md-10 col-xs-10"><div class="messages msg_receive"><p>mongodb 的东西看起来不错,是吧?微小的主数据库和巨大的文档存储</p>

<聊天记录>.</chat_log>

<!--聊天用户框--><div class="panel-footer"><div class="input-group" id="myForm"><input id="btn-input" type="text" class="form-control input-sm chat_input" placeholder="在此处写下您的消息..."><span class="input-group-btn"><button class="btn btn-primary btn-sm" id="submit" type="submit">发送</button></span></表单>

Javascript:

 <脚本>$("#submit").click(function() {var data = $("#btn-input").val();//console.log(数据);$('chat_log').append('<div class="row msg_container base_sent"><div class="col-md-10 col-xs-10"><div class="messages msg_receive"><p>'+data+'</p></div></div></div><div class="row msg_container base_receive"><div class="col-md-10 col-xs-10"><div class="messages msg_receive"><p>'+data+'</p></div></div></div>');清除输入();});函数清除输入(){$("#myForm :input").each(function() {$(this).val('');//隐藏表单值});}$("#myForm").submit(function() {返回假;//防止重定向到save.php});

CSS:

.msg_container_base{背景:#e5e5e5;边距:0;填充:0 10px 10px;最大高度:80vh;溢出-x:隐藏;}.顶栏{背景:#666;白颜色;填充:10px;位置:相对;溢出:隐藏;}.msg_receive{填充左:0;左边距:0;}.msg_sent{填充底部:20px!重要;边距右:0;}.messages {背景:白色;填充:10px;边界半径:2px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);最大宽度:100%;}.messages >p{字体大小:13px;边距:0 0 0.2rem 0;}.messages >时间 {字体大小:11px;颜色:#ccc;}.msg_容器{填充:10px;溢出:隐藏;显示:弹性;}图像{显示:块;宽度:100%;}.头像{位置:相对;}.base_receive >.头像:在{之后内容: "";位置:绝对;顶部:0;右:0;宽度:0;高度:0;边框:5px 实心 #FFF;边框左颜色:rgba(0, 0, 0, 0);边框底部颜色:rgba(0, 0, 0, 0);}.base_sent {justify-content: flex-end;align-items: flex-end;}.base_sent >.头像:在{之后内容: "";位置:绝对;底部:0;左:0;宽度:0;高度:0;边框:5px纯白色;边框右色:透明;边框顶部颜色:透明;box-shadow: 1px 1px 2px rgba(black, 0.2);//不是很完美但很接近}.msg_sent >时间{浮动:对;}.msg_container_base::-webkit-scrollbar-track{-webkit-box-shadow: 插入 0 0 6px rgba(0,0,0,0.3);背景色:#F5F5F5;}.msg_container_base::-webkit-scrollbar{宽度:12px;背景色:#F5F5F5;}.msg_container_base::-webkit-scrollbar-thumb{-webkit-box-shadow: 插入 0 0 6px rgba(0,0,0,.3);背景色:#555;}.btn-group.dropup{位置:固定;左:0px;底部:0;}

以下代码功能显示,用户输入什么,点击发送时,用户会看到,他发送的消息有两种方式..一种在发送和;收到表格.

有没有办法自动滚动到底部

解决方案

将此添加到您的代码中:

$(".msg_container_base").stop().animate({ scrollTop: $(".msg_container_base")[0].scrollHeight}, 1000);

所以提交点击函数看起来像这样:

$("#submit").click(function() {var data = $("#btn-input").val();//console.log(数据);$('chat_log').append('<div class="row msg_container base_sent"><div class="col-md-10 col-xs-10"><div class="messages msg_receive"><p>'+data+'</p></div></div></div><div class="row msg_container base_receive"><div class="col-md-10 col-xs-10"><div class="messages msg_receive"><p>'+data+'</p></div></div></div>');清除输入();$(".msg_container_base").stop().animate({ scrollTop: $(".msg_container_base")[0].scrollHeight}, 1000);});

JSFiddle 演示

How to auto scroll chat box

HTML:

<!DOCTYPE html>
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">    
<meta name="robots" content="noindex">
<title>College Enquiry Chat</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="assets/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">

<script src="assets/js/jquery-1.10.2.min.js"></script>
    <script src="assets/js/bootstrap.min.js"></script>
    <script type="text/javascript">
        window.alert = function(){};
        var defaultCSS = document.getElementById('bootstrap-css');
        function changeCSS(css){
            if(css) $('head > link').filter(':first').replaceWith('<link rel="stylesheet" href="'+ css +'" type="text/css" />'); 
            else $('head > link').filter(':first').replaceWith(defaultCSS); 
        }
    </script>
</head>
<body>
            <div class="panel panel-primary" style="border:0px">
                <div class="panel-heading top-bar">
                    <div class="col-md-8 col-xs-8">
                        <h3 class="panel-title"><span class="glyphicon glyphicon-comment" style="margin-right:6px;"></span>College Enquiry Chat</h3>
                    </div>
                </div>


                <div class="panel-body msg_container_base">

                    <div class="row msg_container base_sent">
                        <div class="col-md-10 col-xs-10">
                            <div class="messages msg_sent">
                                <p>that mongodb thing looks good, huh?
                                tiny master db, and huge document store</p>
                            </div>
                        </div>
                    </div>

                    <div class="row msg_container base_receive">
                        <div class="col-md-10 col-xs-10">
                            <div class="messages msg_receive">
                                <p>that mongodb thing looks good, huh?
                                tiny master db, and huge document store</p>
                            </div>
                        </div>
                    </div>

                    <chat_log> . </chat_log>
                </div>

                <!--CHAT USER BOX-->
                <div class="panel-footer">
                    <div class="input-group" id="myForm">
                        <input id="btn-input" type="text" class="form-control input-sm chat_input" placeholder="Write your message here...">
                        <span class="input-group-btn">
                        <button class="btn btn-primary btn-sm" id="submit" type="submit">Send</button>
                        </span>
                    </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

Javascript:

    <script>
$("#submit").click(function() {
    var data = $("#btn-input").val();
        //console.log(data);
        $('chat_log').append('<div class="row msg_container base_sent"><div class="col-md-10 col-xs-10"><div class="messages msg_receive"><p>'+data+'</p></div></div></div><div class="row msg_container base_receive"><div class="col-md-10 col-xs-10"><div class="messages msg_receive"><p>'+data+'</p></div></div></div>');
        clearInput();
});

function clearInput() {
    $("#myForm :input").each(function() {
        $(this).val(''); //hide form values
    });
}

$("#myForm").submit(function() {
    return false; //to prevent redirection to save.php
});
</script>

CSS :

.msg_container_base{
  background: #e5e5e5;
  margin: 0;
  padding: 0 10px 10px;
  max-height:80vh;
  overflow-x:hidden;
}
.top-bar {
  background: #666;
  color: white;
  padding: 10px;
  position: relative;
  overflow: hidden;
}
.msg_receive{
    padding-left:0;
    margin-left:0;
}
.msg_sent{
    padding-bottom:20px !important;
    margin-right:0;
}
.messages {
  background: white;
  padding: 10px;
  border-radius: 2px;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
  max-width:100%;
}
.messages > p {
    font-size: 13px;
    margin: 0 0 0.2rem 0;
  }
.messages > time {
    font-size: 11px;
    color: #ccc;
}
.msg_container {
    padding: 10px;
    overflow: hidden;
    display: flex;
}
img {
    display: block;
    width: 100%;
}
.avatar {
    position: relative;
}
.base_receive > .avatar:after {
    content: "";
    position: absolute;
    top: 0;
    right: 0;
    width: 0;
    height: 0;
    border: 5px solid #FFF;
    border-left-color: rgba(0, 0, 0, 0);
    border-bottom-color: rgba(0, 0, 0, 0);
}

.base_sent {
  justify-content: flex-end;
  align-items: flex-end;
}
.base_sent > .avatar:after {
    content: "";
    position: absolute;
    bottom: 0;
    left: 0;
    width: 0;
    height: 0;
    border: 5px solid white;
    border-right-color: transparent;
    border-top-color: transparent;
    box-shadow: 1px 1px 2px rgba(black, 0.2); // not quite perfect but close
}

.msg_sent > time{
    float: right;
}



.msg_container_base::-webkit-scrollbar-track
{
    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
    background-color: #F5F5F5;
}

.msg_container_base::-webkit-scrollbar
{
    width: 12px;
    background-color: #F5F5F5;
}

.msg_container_base::-webkit-scrollbar-thumb
{
    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
    background-color: #555;
}

.btn-group.dropup{
    position:fixed;
    left:0px;
    bottom:0;
}

Following code functions shows, what user input and when click on send, user will see, his sended messaged in two way.. one in sended & received form.

Is there a way to auto-scroll to bottom

解决方案

Add this to your code:

$(".msg_container_base").stop().animate({ scrollTop: $(".msg_container_base")[0].scrollHeight}, 1000);

So the submit click function looks like this:

$("#submit").click(function() {
    var data = $("#btn-input").val();
        //console.log(data);
        $('chat_log').append('<div class="row msg_container base_sent"><div class="col-md-10 col-xs-10"><div class="messages msg_receive"><p>'+data+'</p></div></div></div><div class="row msg_container base_receive"><div class="col-md-10 col-xs-10"><div class="messages msg_receive"><p>'+data+'</p></div></div></div>');
        clearInput();
        $(".msg_container_base").stop().animate({ scrollTop: $(".msg_container_base")[0].scrollHeight}, 1000);
});

JSFiddle DEMO

这篇关于聊天框,自动滚动到底部的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
前端开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆