Javascript 如何在发送新消息时滚动到页面底部-Socket.io
我正在尝试在网页上创建聊天应用程序。我有一个正在发送的消息列表。问题是,最新消息不会使页面自动滚动到该消息 我试过:Javascript 如何在发送新消息时滚动到页面底部-Socket.io,javascript,html,css,node.js,socket.io,Javascript,Html,Css,Node.js,Socket.io,我正在尝试在网页上创建聊天应用程序。我有一个正在发送的消息列表。问题是,最新消息不会使页面自动滚动到该消息 我试过: socket.on('chat message', function (msg) { $('#messages').append($('<li>').text(msg)); // then you can scroll down once to show the new messages
socket.on('chat message', function (msg) {
$('#messages').append($('<li>').text(msg));
// then you can scroll down once to show the new messages
var elem = document.getElementsByName('#messages');
elem.scrollTop = elem.scrollHeight;
});
socket.on('chat message',函数(msg){
$(“#消息”).append($(“”).text(msg));
//然后,您可以向下滚动一次以显示新消息
var elem=document.getElementsByName(“#消息”);
elem.scrollTop=elem.scrollHeight;
});
我还尝试过使用溢出:滚动选项NoLuck。以及css表单中的position:relative选项(这有点有效,但并不令人满意,文本框在开始时位于网页顶部,向下跟随消息-如下所示:)
我面临的问题看起来很像这个堆栈溢出页面
但我不明白标记为已解决的答案
以下是迄今为止我在html文档中的代码:
<!doctype html>
<html>
<head>
<title>HF-Chat</title>
<link href="https://fonts.googleapis.com/css?family=Roboto&display=swap" rel="stylesheet">
<style>
/* width */
::-webkit-scrollbar {
width: 6px;
}
/* Track */
::-webkit-scrollbar-track {
background: #2F3136;
border-radius: 5px;
}
/* Handle */
::-webkit-scrollbar-thumb {
background: #202225;
border-radius: 5px;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font: 13px Roboto;
color:#DCDDDE;
background-color: #36393F;
}
form {
background: #36393F;
padding: 3px;
position: fixed;
bottom: 0;
width: 100%;
}
form input {
background: #484C52;
color:#DCDDDE;
border: 0;
padding: 10px;
width: 90%;
margin-right: .5%;
margin-left: .2%;
margin-bottom: .2%;
border-radius: 5px;
outline-color: transparent;
}
form button {
width: 9%;
background: #7289DA;
border: none;
padding: 10px;
margin-bottom: .2%;
border-radius: 5px;
}
#messages {
list-style-type: none;
margin: 0;
padding: 5px;
padding-bottom: 50px; /*Sets the distance between the textbox and bottom message once enough messages has been sent for the scrollbar to appear */
}
#messages li {
padding: 5px 10px;
background: #36393F;
border-bottom: 1px solid #484C52;
}
#messages li:nth-child(odd) {
background: #36393F;
}
</style>
</head>
<body>
<div>
<ul id="messages"></ul>
<script src="/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
$(function () {
var socket = io();
$('form').submit(function (e) {
e.preventDefault(); // prevents page reloading
if ($('#m').val().startsWith("/")) {
socket.emit('user command', $('#m').val());
}
else{
socket.emit('chat message', $('#m').val());
}
$('#m').val('');
return false;
});
socket.on('chat message', function (msg) {
$('#messages').append($('<li>').text(msg));
// then you can scroll down once to show the new messages
var elem = document.getElementsByName('#messages');
elem.scrollTop = elem.scrollHeight;
});
});
</script>
</div>
<form action="">
<input id="m" autocomplete="off" /><button><font color="#DCDDDE">Send</font></button>
</form>
</body>
</html>
高频聊天
/*宽度*/
:-webkit滚动条{
宽度:6px;
}
/*跟踪*/
:-webkit滚动条轨迹{
背景#2F3136;
边界半径:5px;
}
/*处理*/
:-webkit滚动条拇指{
背景:#202225;
边界半径:5px;
}
* {
保证金:0;
填充:0;
框大小:边框框;
}
身体{
字体:13px机器人;
颜色:#DCDDDE;
背景色:#36393F;
}
形式{
背景#36393F;
填充:3倍;
位置:固定;
底部:0;
宽度:100%;
}
表单输入{
背景#484C52;
颜色:#DCDDDE;
边界:0;
填充:10px;
宽度:90%;
保证金权利:.5%;
左边缘:.2%;
利润底部:.2%;
边界半径:5px;
轮廓颜色:透明;
}
窗体按钮{
宽度:9%;
背景#7289DA;
边界:无;
填充:10px;
利润底部:.2%;
边界半径:5px;
}
#信息{
列表样式类型:无;
保证金:0;
填充物:5px;
padding bottom:50px;/*设置发送足够多的消息以显示滚动条后文本框和底部消息之间的距离*/
}
#信息李{
填充物:5px10px;
背景#36393F;
边框底部:1px实心#484C52;
}
#信息李:第n个孩子(单数){
背景#36393F;
}
$(函数(){
var socket=io();
$('form')。提交(函数(e){
e、 preventDefault();//防止页面重新加载
if($('#m').val().startsWith(“/”){
emit('user command',$('#m').val();
}
否则{
emit('chat message',$('#m').val());
}
$('m').val('');
返回false;
});
socket.on('chat message',函数(msg){
$(“#消息”).append($(“”).text(msg));
//然后,您可以向下滚动一次以显示新消息
var elem=document.getElementsByName(“#消息”);
elem.scrollTop=elem.scrollHeight;
});
});
发送
尝试使用滚动。设置动画
const $li = $('<li>').text(msg);
$('#messages').append($li);
$('html, body').animate({
scrollTop: $li.offset().top
}, 2000); // change the animation delay to whatever you like
const$li=$(“”).text(msg);
$('#messages')。追加($li);
$('html,body')。设置动画({
scrollTop:$li.offset().top
}, 2000); // 将动画延迟更改为您喜欢的任何值
尝试使用滚动。设置动画
const $li = $('<li>').text(msg);
$('#messages').append($li);
$('html, body').animate({
scrollTop: $li.offset().top
}, 2000); // change the animation delay to whatever you like
const$li=$(“”).text(msg);
$('#messages')。追加($li);
$('html,body')。设置动画({
scrollTop:$li.offset().top
}, 2000); // 将动画延迟更改为您喜欢的任何值
获取元素的顶部偏移量
var offset = $('.element').offset().top;
$('html, body').animate({
scrollTop: offset
})
获取元素的顶部偏移量
var offset = $('.element').offset().top;
$('html, body').animate({
scrollTop: offset
})
我喜欢事件监听器:
document.addEventListener(
“加载”,
功能(事件){
event.composedPath().forEach(函数(dom){
if(dom.classList&&dom.classList.value==“ClassOfLoadContent”){
$(“.div要滚动”).scrollTop($(.content”).innerHeight();
}
});
},
真的
);
我喜欢事件监听器:
document.addEventListener(
“加载”,
功能(事件){
event.composedPath().forEach(函数(dom){
if(dom.classList&&dom.classList.value==“ClassOfLoadContent”){
$(“.div要滚动”).scrollTop($(.content”).innerHeight();
}
});
},
真的
);
工作正常!非常感谢你:D在过去的三天里,我一直在努力解决这个问题,哈哈,唯一需要记住的是,无论是谁,都可能在关注这个问题,并寻找解决方案。您可能希望将动画延迟设置为0,而不是2000,因为当您向上滚动时,动画将使消息看起来像是在变换位置!非常感谢您的帮助!工作得很好!非常感谢你:D在过去的三天里,我一直在努力解决这个问题,哈哈,唯一需要记住的是,无论是谁,都可能在关注这个问题,并寻找解决方案。您可能需要将动画延迟设置为