Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

134
Views
Vue.js muestra los mensajes de chat anteriores sin cambiar la posición de los mensajes actuales en la pantalla

Uso v-for para representar la lista de mensajes. cuando se procesa el primer lote de mensajes, uso scrollIntoView() en el más nuevo para que el contenedor se desplace hacia abajo. a medida que el usuario se desplaza hacia arriba, busco mensajes anteriores para crear un desplazamiento continuo. el problema es que cuando se procesan nuevos mensajes, el desplazamiento va a la parte superior del contenedor.

Intenté guardar la identificación del primer mensaje en la lista antes de actualizar la lista con los mensajes obtenidos y luego volver a desplazarme a ese mensaje, pero provoca un salto en la pantalla por un momento y no es una buena experiencia para el usuario.

¿Cómo puedo anteponer y representar mensajes más antiguos en la lista de mensajes para que los mensajes actuales permanezcan en su lugar dondequiera que estén en la pantalla?

la lista de mensajes se almacena en vuex y la actualizo usando esta acción:

 HandleMessageList({state, commit}, msgList) { const currentMessages = state.messages const updatedMessages = msgList.concat(currentMessages) commit('SET_MESSAGES', updatedMessages) }

y en plantilla:

 <template> <div class=msg-container" ref="messageDisplayArea"> <message-object v-for="msg in msgList" :key="msg.id" /> </div> </template> <script> import {mapState} from "vuex"; export default { name: "MessageDisplay", components: { MessageObject, }, computed: { ...mapState({ msgList: state => state.messages, }), }, updated() { this.$nextTick(() => this.scrollToTarget()) }, mounted() { this.$refs.messageDisplayArea.addEventListener('scroll', this.handleUserScroll) }, beforeDestroy() { this.$refs.messageDisplayArea.removeEventListener('scroll', this.handleUserScroll) }, methods: { scrollToTarget() { // ... scroll back to the position before message list update }, handleUserScroll(e) { const scrollTop = e.target.scrollTop const scrollHeight = e.target.scrollHeight const elementHeight = e.target.offsetHeight if (scrollTop === 0 && elementHeight < scrollHeight) { // ... fetch older messages } }, }, } </script>

versiones:

 vue 2.6.10 vuex 3.0.1
about 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Encontré el comportamiento que quería en este componente Quasar

es un componente de desplazamiento infinito, pero la parte principal es que el desplazamiento puede ser inverso, lo cual es necesario para el desplazamiento de un mensaje de chat.

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!