我正在做一个聊天机器人。我想滚动到底部的聊天框时,一个新的输入是由用户或数据是通过API发送。
它不滚动,滚动只是停留在相同的位置,但数据正在添加到聊天框中
我试过其他聊天机器人的代码,但它也不工作
var outputArea = $('#chat-output');
$('#user-input-form').on('submit', function (e) {
e.preventDefault();
var message = $('#user-input').val();
outputArea.append(`
<div class='bot-message'>
<div class='message'>
${message}
</div>
</div>
`);
const req = https.request(options, (res) => {
res.setEncoding('utf8');
res.on('data', (d) => {
const myobj = JSON.parse(d);
if ('narrative' in myobj.conversationalResponse.responses[0]) {
const temp = myobj.conversationalResponse.responses[0].narrative.text;
outputArea.append(`
<div class='user-message'>
<div class='message'>
${temp}
</div>
</div>
`);
} else if ('imageUrl' in myobj.conversationalResponse.responses[0]) {
const img = myobj.conversationalResponse.responses[0].imageUrl;
if ('narrative' in myobj.conversationalResponse.responses[1]) {
const text_r = myobj.conversationalResponse.responses[1].narrative.text;
outputArea.append(`
<div class='user-message'>
<div class ="message">
${text_r}
<a href=""></a>
</div>
</div>
`);
} else {
outputArea.append(`
<div class='user-message'>
<div class='message'>
<img src="" width="300" height="200">
</div>
</div>
`);
}
}
});
});
req.on('error', (error) => {
console.error(error);
});
req.write(data);
req.end();
$('#user-input').val('');
.form-container {
width: 400px;
height: 450px;
padding: 10px;
background-color: white;
overflow: scroll;
position: relative;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="chat-popup" id="myForm">
<div class="form-container">
<div class="chat-output" id="chat-output">
<div class="user-message">
<div class="message">Hi! I'm Bot, what's up?</div>
</div>
</div>
<div class="chat-input">
<form action="#0" id="user-input-form" autocomplete="off">
<input type="text" id="user-input" class="user-input" placeholder="Talk to the bot.">
</form>
</div>
</br></br>
<button type="button" class="btn cancel" onclick="closeForm()">Close</button>
</div>
</div>
3条答案
按热度按时间r3i60tvu1#
另一个有趣的方法是使用纯CSS,使用
flex-direction
方法,该方法通过为滚动元素 * 内部 * 的内容创建一个 Package 器来工作。我在下面做了一个快速的演示(有一个按钮和一些添加新项目的JavaScript),你也可以看看this separate demo-page。
诀窍在于在滚动条中使用
column-reverse
来反转内容的方向。因为项目在另一个容器中,所以它们不会被"翻转",而是总是排到底部。事实上,这使得滚动条在添加内容时滚动到底部。额外奖励:保持滚动位置
还有,这也是我很喜欢这个方法的地方每当用户开始滚动(向上)时,滚动条在添加内容时不会丢失其滚动位置。因此,如果滚动条已经滚动(默认情况下,或由用户)到底部,它只会"粘"到底部。这确保了没有恼人的内容跳跃,提供了更好的用户体验。
演示
hgb9j2n62#
您可以使用
scrollTop
来实现它。我简单的写了一个例子供大家参考,大家会发现实现scrollTop有两种方法,一种是使用动画 Package 器,另一种是直接使用,大家可以比较一下两种方法的区别。
q3aa05253#
这对我很有效: