Сделать содержимое div прокрутить вниз с переполнением

0

Я создал небольшую систему чата для проекта, который я делаю. Чат работает нормально. Тем не менее, я не могу понять, как сделать так, чтобы div оставался в нижней части чата, вместо того, чтобы прокручивать вниз, чтобы прочитать последнее, что кто-то сказал.

Я имею в виду еще один подобный вопрос, размещенный здесь для руководства. Как сохранить div, прокручивающийся снизу, когда HTML-текст добавляется к нему через jquery, но скрывает полосу прокрутки?

Но это все равно не сработает для меня. Чат затем сохраняется в файле 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");
  }
}); 

chat.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;
}
  • 0
    Все еще без ответа, кто-нибудь?

1 ответ

0

Я получил (частично) работу для вас. Вот проблемы, которые я обнаружил:

  • Старайтесь не называть переменные, начинающиеся с $ - это создает ненужную путаницу.
  • Вы не объявляли $container как var, поэтому перед тем, как объявлять его, вы используете переменную.
  • jQuery поддерживает 99% всего, что вы можете сделать с помощью простого Javascript, но делает его лучше. Там, где это возможно, я изменил код, чтобы вместо него использовать jQuery.
  • Я не уверен в e.target.value, но $('#sendie').val() работает так же хорошо.
  • Вам определенно нужно было обернуть это в функцию onload для тела.
  • Вы хотите добавить e.preventDefault(); в обработчике событий, чтобы он не помещал символ возврата в поле.
  • Вы не $('#sendie').val(''); (с jQuery это просто $('#sendie').val('');).
  • Цвет шрифта области сообщения чата был белым (по крайней мере, на JSFiddle). Из-за этого сообщения были невидимы.

Здесь скрипка демонстрирует все, что работает (насколько я знаю) - 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;
}
  • 0
    Я изменил это к этому, и это все еще не работало. Он не только не работал, но и дублировал каждую запись в чате.
  • 0
    Держись - в твоем коде много проблем. Я набираю другой ответ сейчас. Я получил это на работу.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню