2 javascript vue.js vue-component vuejs2
我正在尝试向下滚动 vue 中新出现的元素:
我有聊天消息,其中有两个数组:
data() {
return {
activeChats: [],
openedChats: [],
maxOpened: math.round(window.innerWidth / 300),
}
}
Run Code Online (Sandbox Code Playgroud)
当我收到新消息并且对话不在活动和打开的数组中时,我将其添加到两个数组中,并且它出现在屏幕上,因为我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;
Run Code Online (Sandbox Code Playgroud)
而且都不起作用...
有什么帮助吗?:D
可以在没有额外库的情况下完成吗?我不需要动画就可以出现在元素的底部......
谢谢
看这个例子:
https://jsfiddle.net/eywraw8t/430100/
使用“watch”( https://v2.vuejs.org/v2/guide/compulated.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'});
}
}
})Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12507 次 |
| 最近记录: |