代码之家  ›  专栏  ›  技术社区  ›  icecub

附加到容器底部(不是代码结尾)

  •  0
  • icecub  · 技术社区  · 6 年前

    一般信息
    在聊天系统上工作。当用户加入聊天室时,他们无法看到任何以前的消息。我试图让第一条新消息出现在消息容器的底部,然后在它下面附加后续消息。

    我有自己的想法

    1. 使容器相对并绝对定位每个消息。那就给我留言吧 bottom: 10px; . 这不起作用,因为它会将消息放在底部,然后开始将它们堆叠起来。

    2. 在容器内创建一个百分比高度的不可见的DIV,这样就占用了大部分的空白空间,并且任何附加的消息都会显示在它下面。这也不起作用,因为百分比高度将保持有效,并不断推低一切。

    3. 创建一个不可见的DIV,并使用javascript根据用户的屏幕大小给它一个静态高度。它可以工作,但如果用户调整屏幕大小,问题就会出现。可以用自定义事件处理程序从技术上解决这个问题 onresize 调整不可见的DIV的大小,但这似乎是解决问题的错误方法。

    代码

    聊天室消息容器:

    <div class="chatroom" id="room-roomname"></div>
    

    消息示例:

    <div class="row">
        <div class="col s12 chat-msg-container">
            <div class="chat-msg">
                <span class="default-color">
                    Username
                </span><br/>
                <span>
                    Message
                </span>
            </div>
            <div class="chat-msg-image">
                <img class="userImg" src="">
            </div>
        </div>
    </div>
    

    问题
    我正在寻找正确的方法。如何在DIV的可视底部附加一个DIV?

    1 回复  |  直到 6 年前
        1
  •  1
  •   bigless    6 年前

    将translatey与固定的整个msg容器一起使用:

    var msgRow = `<div class="row">
        <div class="col s12 chat-msg-container">
            <div class="chat-msg">
                <span class="default-color">
                    Username
                </span><br/>
                <span>
                    Message {{num}}
                </span>
            </div>
            <div class="chat-msg-image">
                <img class="userImg" src="">
            </div>
        </div>
    </div>
    `;
    
    var scrollbox = document.getElementById('scroll-box');
    var chatrooms = document.querySelectorAll('.chatroom');
    var chatbox = document.getElementById('chat');
    
    var i = 0;
    var id = setInterval(function() {
      let room = chatrooms[i % 2];
      room.innerHTML += msgRow.replace('{{num}}', i);
      if (i == 0 || i == 1) room.classList.add('active');
      if (i == 3) window.clearInterval(id);
      i++;
    }, 1000);
    #chatrooms {
      position: absolute;
      top: 0;
      left:0;
      width: 100%;
      border: 1px solid red;
      overflow: hidden;
    }
    
    #scroll-box {
      height: 170px;
      overflow-y: scroll;
      display: flex;
    }
    
    #chat.container {
      margin-top: auto;
    }
    
    .chatroom {
      align-self: flex-end;
      transform:translateY(100%);
      transition: transform 0.5s ease-in;
    }
    
    .chatroom.active {
      transform: translateY(0%);
    }
    
    .chat-msg-container {
      background-color: lightgrey;
      margin-bottom: 10px;
      animation: animateElement ease-in .5s;
      animation-iteration-count: 1;
    }
    
    @keyframes animateElement{
      0% {
        transform:  translateY(100%);
      }
      100% {
        transform:  translateY(0%);
      }
    }
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>
    
    <div id="chatrooms">
      <div id="scroll-box">
        <div id="chat" class="container">
          <div class="row">
            <div class="chatroom col-6"></div>
            <div class="chatroom col-6"></div>
          </div>
        </div>
      </div>
    </div>