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

标签 javascript vue.js vuejs2 vue-component

我正在尝试向下滚动 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/

相关文章:

swift - PWA 中的额外边距 - 无法拉伸(stretch)整个高度

javascript - 在异步函数中设置和访问全局对象

javascript - 使用 Mocha 设置 JSDOM

javascript - Vue.js 打开/关闭捕获

css - Vue 和 Webpack 树抖动、副作用和 CSS : CSS of unused components being loaded

vue.js - 如何在没有CORS错误的情况下在Vue CLI中加载JSON

javascript - 如何在 vue.js 2 上添加类?

javascript - 在 b-form-select 中看不到 API 的值 - Vue.js

javascript - 使用 prefers-reduced-motion 禁用动画

javascript - 如何在倒计时结束后显示图像?