【问题标题】:Chat scroll bottom CSS or Javascript only仅聊天滚动底部 CSS 或 Javascript
【发布时间】:2018-02-15 20:50:57
【问题描述】:

请帮我解决这个问题。我在这里附上我的代码的一部分。这是一个聊天,默认情况下我需要滚动条位于底部,并且当有新消息进入时,它应该将其余部分向上移动。

.inner-chat-info {
  display: flex;
  align-items: center;
  display: -webkit-flex;
  margin-bottom: 10px;
  padding-top: 10px;
}
.chat-user-name {
  font-size: 16px;
  font-weight: bold;
  color: #2581bd;
}

.chat-user-data {
  margin-left: 12px;
}
.dialog-text {
  font-weight: 100;
  font-size: 16px;
}
.message-date {
  color: #bbbbbb;
  font-weight: 100;
}
.dialog {
  padding: 0 40px;
  height: 350px;
  overflow-y: scroll;
}

.send-msb-btn {
  margin-right: 10px;
}
<div class="dialog">
              <div class="inner-chat-info">
                <div class="chat-user-photo">
                  <img class="" src="./assets/images/users/tom.png" alt="">
                </div>
                <div class="chat-user-data">
                  <span class="chat-user-name">Hello hello </span>  
                  <span class="message-date">сHello hello :17</span>
                <div class="dialog-text">
                  Hello hello 
                </div>
                </div>
              </div>
              <div class="inner-chat-info">
                <div class="chat-user-photo">
                  <img class="" src="./assets/images/users/leonardo.png" alt="">
                </div>
                <div class="chat-user-data">
                  <span class="chat-user-name"> Hello hello </span>  
                  <span class="message-date">9:20</span>
                <div class="dialog-text">
                  Hello hello 
                </div>
                </div>
              </div>
              <div class="inner-chat-info">
                <div class="chat-user-photo">
                  <img class="" src="./assets/images/users/tom.png" alt="">
                </div>
                <div class="chat-user-data">
                  <span class="chat-user-name"> Hello hello  </span>  
                  <span class="message-date">10:20 </span>
                <div class="dialog-text">
                  Hello hello 
                </div>
                </div>
              </div>
              <div class="inner-chat-info">
                <div class="chat-user-photo">
                  <img class="" src="./assets/images/users/leonardo.png" alt="">
                </div>
                <div class="chat-user-data">
                  <span class="chat-user-name"> Hello hello  </span>  
                  <span class="message-date">Hello hello </span>
                <div class="dialog-text">
                  Hello hello 
                </div>
                </div>
              </div>
              <div class="inner-chat-info">
                <div class="chat-user-photo">
                  <img class="" src="./assets/images/users/tom.png" alt="">
                </div>
                <div class="chat-user-data">
                  <span class="chat-user-name"> Hello hello и </span>  
                  <span class="message-date">Hello hello </span>
                <div class="dialog-text">
                  Hello hello 
                </div>
                </div>
              </div>
              <div class="inner-chat-info">
                <div class="chat-user-photo">
                  <img class="" src="./assets/images/users/tom.png" alt="">
                </div>
                <div class="chat-user-data">
                  <span class="chat-user-name"> Hello hello  </span>  
                  <span class="message-date">Hello hello </span>
                <div class="dialog-text">
                  :)
                </div>
                </div>
              </div>
            </div>

我尝试自己实现它,但没有得到它。我用 scrollTop 和 scrollHeight 尝试了所有这些答案,但没有奏效。如果可能,请帮助我更正我的代码。谢谢!

【问题讨论】:

    标签: javascript html css chat


    【解决方案1】:

    我用 jquery 做这个,因为它用一段代码解决了你的问题。

    首先我们得到窗口的高度

    $(window).height()
    

    然后我们可以以该高度为目标,并以窗口的高度为值应用 scrollTop 函数

    $('.dialog').scrollTop(heightValue);
    

    如您所见,我添加了一个按钮来克隆消息并将其插入底部。此侦听器将 100 添加到页面高度变量,因此它将始终到达底部。我在获取消息的确切高度时遇到了一些问题。

    我尝试使用outerHeight(),但最终它还是跌到了谷底。

    希望这就是您想要的。如果需要,很乐意解释或帮助提供更好的解决方案。

    var pageHeight = $('.dialog').height();
    
    $('.dialog').scrollTop(pageHeight);
    
    
    //Function to fake new message
    $('button').click(function() {
      $('#clone').clone().appendTo('.dialog');
      pageHeight = pageHeight + 100;
      $('.dialog').scrollTop(pageHeight);
    })
    .inner-chat-info {
      display: flex;
      align-items: center;
      display: -webkit-flex;
      margin-bottom: 10px;
      padding-top: 10px;
    }
    
    .chat-user-name {
      font-size: 16px;
      font-weight: bold;
      color: #2581bd;
    }
    
    .chat-user-data {
      margin-left: 12px;
    }
    
    .dialog-text {
      font-weight: 100;
      font-size: 16px;
    }
    
    .message-date {
      color: #bbbbbb;
      font-weight: 100;
    }
    
    .dialog {
      padding: 0 40px;
      height: 350px;
      overflow-y: scroll;
    }
    
    .send-msb-btn {
      margin-right: 10px;
    }
    
    button {
      position: fixed;
      top: 5vh;
      left: 5vw;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="dialog">
      <div class="inner-chat-info">
        <div class="chat-user-photo">
          <img class="" src="./assets/images/users/tom.png" alt="">
        </div>
        <div class="chat-user-data">
          <span class="chat-user-name">Hello hello </span>
          <span class="message-date">сHello hello :17</span>
          <div class="dialog-text">
            Hello hello
          </div>
        </div>
      </div>
      <div class="inner-chat-info">
        <div class="chat-user-photo">
          <img class="" src="./assets/images/users/leonardo.png" alt="">
        </div>
        <div class="chat-user-data">
          <span class="chat-user-name"> Hello hello </span>
          <span class="message-date">9:20</span>
          <div class="dialog-text">
            Hello hello
          </div>
        </div>
      </div>
      <div class="inner-chat-info">
        <div class="chat-user-photo">
          <img class="" src="./assets/images/users/tom.png" alt="">
        </div>
        <div class="chat-user-data">
          <span class="chat-user-name"> Hello hello  </span>
          <span class="message-date">10:20 </span>
          <div class="dialog-text">
            Hello hello
          </div>
        </div>
      </div>
      <div class="inner-chat-info">
        <div class="chat-user-photo">
          <img class="" src="./assets/images/users/leonardo.png" alt="">
        </div>
        <div class="chat-user-data">
          <span class="chat-user-name"> Hello hello  </span>
          <span class="message-date">Hello hello </span>
          <div class="dialog-text">
            Hello hello
          </div>
        </div>
      </div>
      <div class="inner-chat-info">
        <div class="chat-user-photo">
          <img class="" src="./assets/images/users/tom.png" alt="">
        </div>
        <div class="chat-user-data">
          <span class="chat-user-name"> Hello hello и </span>
          <span class="message-date">Hello hello </span>
          <div class="dialog-text">
            Hello hello
          </div>
        </div>
      </div>
      <div class="inner-chat-info">
        <div class="chat-user-photo">
          <img class="" src="./assets/images/users/tom.png" alt="">
        </div>
        <div class="chat-user-data">
          <span class="chat-user-name"> Hello hello  </span>
          <span class="message-date">Hello hello </span>
          <div class="dialog-text">
            :)
          </div>
        </div>
      </div>
    
      <div class="inner-chat-info">
        <div class="chat-user-photo">
          <img class="" src="./assets/images/users/tom.png" alt="">
        </div>
        <div class="chat-user-data">
          <span class="chat-user-name"> Hello hello  </span>
          <span class="message-date">Hello hello </span>
          <div class="dialog-text">
            :)
          </div>
        </div>
      </div>
    
      <div class="inner-chat-info">
        <div class="chat-user-photo">
          <img class="" src="./assets/images/users/tom.png" alt="">
        </div>
        <div class="chat-user-data">
          <span class="chat-user-name"> Hello hello  </span>
          <span class="message-date">Hello hello </span>
          <div class="dialog-text">
            :)
          </div>
        </div>
      </div>
    
      <div class="inner-chat-info">
        <div class="chat-user-photo">
          <img class="" src="./assets/images/users/tom.png" alt="">
        </div>
        <div class="chat-user-data">
          <span class="chat-user-name"> Hello hello  </span>
          <span class="message-date">Hello hello </span>
          <div class="dialog-text">
            :)
          </div>
        </div>
      </div>
    
      <div class="inner-chat-info">
        <div class="chat-user-photo">
          <img class="" src="./assets/images/users/tom.png" alt="">
        </div>
        <div class="chat-user-data">
          <span class="chat-user-name"> Hello hello  </span>
          <span class="message-date">Hello hello </span>
          <div class="dialog-text">
            :)
          </div>
        </div>
      </div>
    
      <div id='clone' class="inner-chat-info">
        <div class="chat-user-photo">
          <img class="" src="./assets/images/users/tom.png" alt="">
        </div>
        <div class="chat-user-data">
          <span class="chat-user-name"> Hello hello  </span>
          <span class="message-date">Hello hello </span>
          <div class="dialog-text">
            :)
          </div>
        </div>
      </div>
    
      <button>New Message</button>
    </div>

    【讨论】:

      【解决方案2】:

      这是一个使用纯js的解决方案。每当添加新消息时,您都可以调用updateScroll()(来自https://stackoverflow.com/a/18614545/1309377),如本例所示,或将其保持在一秒或其他时间间隔内。

      element.scrollTop = element.scrollHeight;会将对话框的滚动设置为div的总高度,从而使滚动条保持在底部。

      document.getElementById("addMessage").addEventListener("click", addMessage);
      
      function addMessage() {
        var chatInfo = document.getElementsByClassName("inner-chat-info")[0].outerHTML;
        var dialog = document.getElementsByClassName("dialog")[0];
        var currMsgs = dialog.innerHTML;
        dialog.innerHTML = currMsgs += chatInfo;
        updateScroll();
      }
      
      function updateScroll() {
        var element = document.getElementsByClassName("dialog")[0];
        element.scrollTop = element.scrollHeight;
      }
      .inner-chat-info {
        display: flex;
        align-items: center;
        display: -webkit-flex;
        margin-bottom: 10px;
        padding-top: 10px;
      }
      
      .chat-user-name {
        font-size: 16px;
        font-weight: bold;
        color: #2581bd;
      }
      
      .chat-user-data {
        margin-left: 12px;
      }
      
      .dialog-text {
        font-weight: 100;
        font-size: 16px;
      }
      
      .message-date {
        color: #bbbbbb;
        font-weight: 100;
      }
      
      .dialog {
        padding: 0 40px;
        height: 350px;
        overflow-y: scroll;
      }
      
      .send-msb-btn {
        margin-right: 10px;
      }
      <button id="addMessage">Add message</button>
      <div class="dialog">
        <div class="inner-chat-info">
          <div class="chat-user-photo">
            <img class="" src="./assets/images/users/tom.png" alt="">
          </div>
          <div class="chat-user-data">
            <span class="chat-user-name">Hello hello </span>
            <span class="message-date">сHello hello :17</span>
            <div class="dialog-text">
              Hello hello
            </div>
          </div>
        </div>
        <div class="inner-chat-info">
          <div class="chat-user-photo">
            <img class="" src="./assets/images/users/leonardo.png" alt="">
          </div>
          <div class="chat-user-data">
            <span class="chat-user-name"> Hello hello </span>
            <span class="message-date">9:20</span>
            <div class="dialog-text">
              Hello hello
            </div>
          </div>
        </div>
        <div class="inner-chat-info">
          <div class="chat-user-photo">
            <img class="" src="./assets/images/users/tom.png" alt="">
          </div>
          <div class="chat-user-data">
            <span class="chat-user-name"> Hello hello  </span>
            <span class="message-date">10:20 </span>
            <div class="dialog-text">
              Hello hello
            </div>
          </div>
        </div>
        <div class="inner-chat-info">
          <div class="chat-user-photo">
            <img class="" src="./assets/images/users/leonardo.png" alt="">
          </div>
          <div class="chat-user-data">
            <span class="chat-user-name"> Hello hello  </span>
            <span class="message-date">Hello hello </span>
            <div class="dialog-text">
              Hello hello
            </div>
          </div>
        </div>
        <div class="inner-chat-info">
          <div class="chat-user-photo">
            <img class="" src="./assets/images/users/tom.png" alt="">
          </div>
          <div class="chat-user-data">
            <span class="chat-user-name"> Hello hello и </span>
            <span class="message-date">Hello hello </span>
            <div class="dialog-text">
              Hello hello
            </div>
          </div>
        </div>
        <div class="inner-chat-info">
          <div class="chat-user-photo">
            <img class="" src="./assets/images/users/tom.png" alt="">
          </div>
          <div class="chat-user-data">
            <span class="chat-user-name"> Hello hello  </span>
            <span class="message-date">Hello hello </span>
            <div class="dialog-text">
              :)
            </div>
          </div>
        </div>
      </div>

      【讨论】:

        猜你喜欢
        • 2018-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多