javascript - 使div的内容向下滚动并溢出

标签 javascript jquery html css

我为我正在做的元素创建了一个小型聊天系统。聊天功能正常。但是,我不知道如何使 div 停留在聊天的底部,而不是必须向下滚动才能阅读某人说的最后一句话。

我指的是此处发布的另一个类似问题以供指导。 How to keep a div scrolled to the bottom as HTML content is appended to it via jquery, but hide the scroll bar?

但它仍然不适合我。然后聊天记录存储在 chat.txt 文件中。每行都被标签包围。以下是我正在使用的代码。

标题中的js:

$container = $('#chat-area');
$container[0].scrollTop = $container[0].scrollHeight;

$('#sendie').keypress(function (e) {
  if (e.which == 13) {
    $container = $('#chat-area');
    $container.append('<p>' + e.target.value + '</p>');
    $container.animate({ scrollTop: $container[0].scrollHeight }, "slow");
  }
}); 

聊天.php:

<script type="text/javascript">


    // strip tags
    name = name.replace(/(<([^>]+)>)/ig,"");

    // display name on page
    $("#name-area").html("You are: <span>" + name + "</span>");

    // kick off chat
    var chat =  new Chat();
    $(function() {

         chat.getState(); 

         // watch textarea for key presses
         $("#sendie").keydown(function(event) {  

             var key = event.which;  

             //all keys including return.  
             if (key >= 33) {

                 var maxLength = $(this).attr("maxlength");  
                 var length = this.value.length;  

                 // don't allow new content if length is maxed out
                 if (length >= maxLength) {  
                     event.preventDefault();  
                 }  
              }  
                                                                                                                                                                                                        });
         // watch textarea for release of key press
         $('#sendie').keyup(function(e) {   

              if (e.keyCode == 13) { 

                var text = $(this).val();
                var maxLength = $(this).attr("maxlength");  
                var length = text.length; 

                // send 
                if (length <= maxLength + 1) { 

                    chat.send(text, name);  
                    $(this).val("");

                } else {

                    $(this).val(text.substring(0, maxLength));

                }   


              }
         });

    });
</script>

<p id="name-area"></p>
    <div id="chatWrap"><div id="chat-area"></div></div>

    <form id="send-message-area">
        <p>Your message: </p>
        <textarea id="sendie" maxlength = '100' ></textarea>
   </form>

</div>

CSS:

#pageWrap
{

    position: fixed;
    display: block;
    right: 0;
    bottom: 0;
    background: #8B1918;
    box-shadow: 0px 0px 12px #333;
    transition: height .5s;
}

#pageWrap p
{
    color: white;
    font-family: arial;
    margin-left: 5px;
    margin-bottom: 4px;
}

#chatWrap
{
    width: 200px;
    height: 200px;
    overflow: scroll;
    overflow-x:hidden;
    box-shadow: 1px 1px 10px #333 inset;
    color: white;
    font-family: arial;
    font-size: 14px;
}

#chat-area
{
    padding-left: 11px;
}

#sendie
{
    resize: none;
    display: block;
    width: 92%;
    margin-left: auto;
    margin-right: auto;
    margin-bottom: 6px;
}

最佳答案

我得到它(部分)为你工作。以下是我发现的问题:

  • 尽量不要命名以 $ 开头的变量 - 它会造成不必要的混淆。
  • 您没有将 $container 声明为 var,因此您在声明它之前使用了一个变量。
  • jQuery 支持 99% 的纯 Javascript 功能,而且还做得更好。在可能的情况下,我更改了您的代码以改用 jQuery。
  • 我不确定 e.target.value,但 $('#sendie').val() 也可以。
  • 您绝对需要将其包装在主体 onload 函数中。
  • 您想在事件处理程序中添加 e.preventDefault();,这样它就不会在框中放置回车符。
  • 您没有清除输入文本区域(使用 jQuery 它只是 $('#sendie').val('');)。
  • 聊天消息区域的字体颜色是白色的(至少在 JSFiddle 上是这样)。因此,消息是不可见的。

这是一个演示一切正常的 fiddle (据我所知)- http://jsfiddle.net/U9XAv/

这是更新后的 Javascript:

$(function()
{
    var container = $('#chat-area');
    container.css('scrollTop', container.css('scrollHeight'));

    $('#sendie').keydown(function (e)
    {
        if (e.which == 13)
        {
            container.append('<p>' + $(this).val() + '</p>')
                     .animate({ scrollTop: container[0].scrollHeight) }, "slow");
            $(this).val('');
            e.preventDefault();      
        }
    });
});

我更改的 CSS:

#chat-area
{
    padding-left: 11px;
    color: black;
}

关于javascript - 使div的内容向下滚动并溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20863321/

相关文章:

javascript - 在 ASP.NET MVC 表单上提交?

javascript - JQuery 验证按钮切换上的输入

php - 使用 PHP 和 CSS 显示图像

javascript - 如何在不破坏 CSS 的情况下使这个小 javascript 与 2 个 textarea 元素一起工作?

javascript - UWP 应用中的 Web 请求

javascript - Facebook 如何更改 Javascript 控制台输出的字体?

javascript - 使用jquery查找父级父元素

javascript - 刷新动画然后重定向到不同的 url

html - 向右浮动不起作用

javascript - Cordova - 如何访问设备存储?