自动滚动div问题

时间:2017-12-05 07:28:44

标签: javascript asynchronous vue.js vuejs2

我正在尝试制作div滚动,因为内容已添加到其中。我正在使用Vuejs列表更新项目作为源数组(vuejs的数据数组)更改。

<message v-for="message in messages"></message>

这是我的自动滚动伪代码:

let scroll = false;

messagesContainer.addMessageChild(new messageElement(...)); // addMessageChild appends item to vuejs's data, it may be async when it actually adds the element to the DOM which may cause the problem

if (messagesContainer.scrollTop = maxScrollOfMessagesContainer)
    scroll = true;
messagesContainer.scrollTop = maxScrollOfMessagesContainer;

但是,messages容器元素不会滚动。我担心Vuejs可能会异步更新(插入)源(数据)中的元素,这样可能会跳过if (messagesContainer.scrollTop = maxScrollOfMessagesContainer)检查(在检查后添加元素(消息))。

我可以做些什么来阻止这种情况?

1 个答案:

答案 0 :(得分:1)

滚动上一条消息的方法怎么样?

模板:

<message v-for="message in messages" v-class="last-message : $index === (items.length-1)">
</message >

<强>方法:

// smooth scroll on .last-message
scrollToLastMessage: function () {
  document.querySelector('.last-message').scrollIntoView({ 
    behavior: 'smooth' 
  })
}

// scroll when messages change
watch: {
  messages: function () {
    this.scrollToLastMessage()
  }
}

// scroll when page ready
ready() {
  this.scrollToLastMessage()
}