gpt4 book ai didi

javascript - 在 vue 中的特定元素中向下滚动

转载 作者:行者123 更新时间:2023-12-02 20:13:28 25 4
gpt4 key购买 nike

我正在尝试向下滚动 vue 中新出现的元素:

我有聊天消息,其中有两个数组:

data() {
return {
activeChats: [],
openedChats: [],
maxOpened: math.round(window.innerWidth / 300),
}
}

当我收到新消息并且对话不在事件和打开的数组中时,我将其添加到两者中,并且它出现在屏幕上,因为我使用了 v-for在两个阵列上。

这一切都有效,但我不确定当新的聊天出现时如何在 div 上向下滚动,我尝试使用 refs 但没有运气:

<div class="chat" v-for="chat in openedChats" ref="chat-{chat.id}"></div> 或者甚至只是打开一个聊天进行聊天测试..

里面axios then()成功后我说:

this.$refs.chat['-'+response.data.id].scrollTo(9999999,99999999);
or
this.$refs.chat['-'+response.data.id].scrollTop = 99999999;
or
this.$refs.chat.scrollTo(9999999,99999999);
or
this.$refs.chat.scrollTop = 99999999;

两者都不起作用......

有什么帮助吗? :D

可以在没有额外库的情况下完成吗?我不需要动画就可以出现在元素的底部......

谢谢

最佳答案

请参阅此示例:

https://jsfiddle.net/eywraw8t/430100/

使用“watch”( https://v2.vuejs.org/v2/guide/computed.html )来检测消息数组中的更改(来自 ajax 或简单的按钮,如示例中所示)。根据消息的索引设置 id(如果您愿意,也可以使用 ref)。然后滚动到数组中的最后一个元素(通过 array.length 获取最后一个元素)。

new Vue({
el: "#app",
data: {
messages: [
{ id: 1, text: 'message' },
],
},
watch:
{
messages: function() {
let id = this.messages.length;
//takes a bit for dom to actually update
setTimeout(function() {
document.getElementById('message-' + id).scrollIntoView();
}, 100);

},
},
methods: {
addMessage: function(){
let id = this.messages.length + 1;
this.messages.push({ id: id, text: 'message'});
}
}
})
<div id="app">
<button v-on:click="addMessage()" style="position:fixed">
Add message
</button>
<div class="message" v-for="message in messages" :id="'message-' + message.id">
{{message.text}} {{ message.id}}
</div>
</div>

关于javascript - 在 vue 中的特定元素中向下滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52951609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com