jQuery滚动到底部动画速度问题

时间:2017-12-30 19:06:07

标签: javascript jquery html animation

我只是在讨论论坛应用程序的前端jQuery方面(我更适合后端 - 这是对模板+ js创建的前端世界的一个非常小的尝试)。

基本上,对于每个新评论,聊天框容器会自动滚动到底部,向用户显示最新消息。我用来实现这个目的的代码如下:

聊天消息ID位于聊天框id容器中,css用于:

#chat-box {
  overflow: none;
  position: relative;
  width: 100%;
  height: 91vh;
}
#chat-messages {
  overflow: auto;
  position: absolute;
  width: 100%;
  max-height: 91vh;
}

对于这些,我正在应用以下动画:

$('#chat-messages').animate({scrollTop: $(document).height() + $('#chat-messages').height()}, "slow");

触发提交事件时使用的精简版函数是:

function submitChatMessageEvent( event ) {
   console.log($('#btn-chat-input').val());
   $(chatMessageBlock).hide().appendTo("#chat-messages").fadeIn(1000);
   $('#chat-messages').animate({scrollTop: $(document).height() + $('#chat-messages').height()}, 8000);
}

动画也是我想要的 - 也就是说,确保聊天框始终显示聊天框底部的最新聊天。然而 - 对于上面的动画,“慢”方面根本不起作用......?任何关于自动滚动到div底部并溢出的专业提示。

我的想法是我需要创建分隔框 - 但不知何故先隐藏它,然后触发滚动效果,同时淡化新创建的注释......但如果这是正确的方法,我需要一些指针!< / p>

2 个答案:

答案 0 :(得分:0)

似乎与您提供的信息一起正常工作。

  

持续时间以毫秒为单位;值越高表示速度越慢   动画,而不是更快的动画。字符串'快'和'慢'可以   提供的指示持续时间为200和600毫秒,   分别。   http://api.jquery.com/show/

var chatMessageBlock = $('#chat-block');

function submitChatMessageEvent( event ) {
    $(chatMessageBlock).hide().appendTo("#chat-messages").fadeIn(200 /* fast */);
    $('#chat-messages').animate({
      scrollTop: $(document).height() + $('#chat-messages').height()
    }, 600 /* 'slow' */);
}

submitChatMessageEvent();

$('#btn-chat-input').on('click',function(e){
  $('#chat-messages')[0].scrollTop = 0;
  submitChatMessageEvent(e);
});
#chat-box {
  overflow: none;
  position: relative;
  width: 100%;
  height: 91vh;
}
#chat-messages {
  overflow: auto;
  position: absolute;
  width: 100%;
  max-height: 91vh;
}
p {
  margin: 1em;
  padding: 1em;
  border-bottom: 1px solid #ddd;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input id="btn-chat-input" value="Send" type="button"/>
<div id="chat-block" style="display:none">
  <p>One chat message</p>
  <p>Lorem ipsum</p>
  <p>My response</p>
  <p>Lorem ipsum</p>
  <p>Another chat message</p>
  <p>Lorem ipsum</p>
  <p>Another chat message</p>
  <p>Lorem ipsum</p>
  <p>One last chat message</p>
</div>
<div id="chat-box">
  <div id="chat-messages"></div>
</div>

答案 1 :(得分:0)

只需从点击事件中删除$('#chat-messages')[0].scrollTop = 0;

var chatMessageBlock = $('#chat-block');

function submitChatMessageEvent( event ) {
    $(chatMessageBlock).hide().appendTo("#chat-messages").fadeIn(200 /* fast */);
    $('#chat-messages').animate({
      scrollTop: $(document).height() + $('#chat-messages').height()
    }, 600 /* 'slow' */);
}

submitChatMessageEvent();

$('#btn-chat-input').on('click',function(e){
  submitChatMessageEvent(e);
});
#chat-box {
  overflow: none;
  position: relative;
  width: 100%;
  height: 91vh;
}
#chat-messages {
  overflow: auto;
  position: absolute;
  width: 100%;
  max-height: 91vh;
}
p {
  margin: 1em;
  padding: 1em;
  border-bottom: 1px solid #ddd;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="btn-chat-input" value="Send" type="button"/>
<div id="chat-block" style="display:none">
  <p>One chat message</p>
  <p>Lorem ipsum</p>
  <p>My response</p>
  <p>Lorem ipsum</p>
  <p>Another chat message</p>
  <p>Lorem ipsum</p>
  <p>Another chat message</p>
  <p>Lorem ipsum</p>
  <p>One last chat message</p>
</div>
<div id="chat-box">
  <div id="chat-messages"></div>
</div>