fix scrollBottom
This commit is contained in:
parent
5f536adc8f
commit
008acbb056
@ -35,11 +35,11 @@ export default {
|
||||
roomId: String
|
||||
},
|
||||
methods: {
|
||||
async sendMessage(){
|
||||
sendMessage(){
|
||||
let content = this.msg.content;
|
||||
if (!content.body) return;
|
||||
if (!content.body.trim()) return;
|
||||
let msgSend = Object.assign({}, this.msg);
|
||||
await matrix.sendEvent(msgSend, this.roomId);
|
||||
matrix.sendEvent(msgSend, this.roomId);
|
||||
content.body = "";
|
||||
let id = this.$refs.newMessageInput;
|
||||
id.style.height = "1.25rem";
|
||||
|
14
src/lib/scrollHandler.js
Normal file
14
src/lib/scrollHandler.js
Normal file
@ -0,0 +1,14 @@
|
||||
export default class {
|
||||
constructor(element) {
|
||||
this.element = element
|
||||
}
|
||||
scrollToBottom(){
|
||||
this.setScrollBottom(0);
|
||||
}
|
||||
getScrollBottom(){
|
||||
return this.element.scrollHeight - this.element.scrollTop - this.element.offsetHeight;
|
||||
}
|
||||
setScrollBottom(height){
|
||||
this.element.scrollTop = this.element.scrollHeight - this.element.offsetHeight - height;
|
||||
}
|
||||
}
|
@ -1,12 +1,12 @@
|
||||
<template>
|
||||
<div>
|
||||
<div ref="chatContainer" class="chatContainer">
|
||||
<div @scroll="scrollHandler()" ref="msgContainer" id="messagesContainer" class="messagesContainer">
|
||||
<div @scroll="onScroll()" ref="msgContainer" id="messagesContainer" class="messagesContainer">
|
||||
<div v-if="loadingStatus" @click="loadEvents()" class="loadMore">{{loadingStatus}}</div>
|
||||
<p v-if="room.timeline.length === 0" class="chatInfo">this room is empty</p>
|
||||
<timeline :timeline="room.timeline" :group-timeline="isGroup()" :user="user" :roomId="room.roomId"/>
|
||||
<timeline :timeline="room.timeline" :group-timeline="isGroup()" :user="user" :roomId="room.roomId" />
|
||||
</div>
|
||||
<icon v-if="showScrollBtn" @click.native="scrollToBottom()" id="scrollDown" ic="./sym/expand_more-black-24dp.svg" />
|
||||
<icon v-if="showScrollBtn" @click.native="scroll.scrollToBottom()" id="scrollDown" ic="./sym/expand_more-black-24dp.svg" />
|
||||
</div>
|
||||
<newMessage :onResize="height=>resize(height)" :roomId="room.roomId"/>
|
||||
<topBanner :room="room" :close-chat="()=>closeChat()" :open-chat-info="()=>openChatInfo()"/>
|
||||
@ -20,6 +20,7 @@ import Icon from '@/components/icon';
|
||||
import {matrix} from '@/main';
|
||||
import splitArray from '@/lib/splitArray.js'
|
||||
import timeline from '@/components/timeline';
|
||||
import scrollHandler from "@/lib/scrollHandler";
|
||||
|
||||
export default {
|
||||
name: 'chat',
|
||||
@ -36,13 +37,9 @@ export default {
|
||||
openChatInfo: Function
|
||||
},
|
||||
methods:{
|
||||
scrollToBottom(){
|
||||
this.$refs.msgContainer.scrollTop = this.$refs.msgContainer.scrollHeight;
|
||||
},
|
||||
scrollHandler(){
|
||||
onScroll(){
|
||||
if (this.$refs.msgContainer.scrollTop === 0) this.loadEvents();
|
||||
let msg = this.$refs.msgContainer;
|
||||
this.showScrollBtn = msg.scrollHeight - msg.scrollTop > msg.offsetHeight + 200;
|
||||
this.showScrollBtn = this.scroll.getScrollBottom() > 400;
|
||||
},
|
||||
resize(height){
|
||||
this.$refs.chatContainer.style.height = `calc(100% - ${height}px - 3.5rem)`;
|
||||
@ -51,9 +48,11 @@ export default {
|
||||
return Object.keys(this.room.currentState.members).length > 2;
|
||||
},
|
||||
async loadEvents(){
|
||||
let scrollBottom = this.scroll.getScrollBottom();
|
||||
this.loadingStatus = 'loading ...';
|
||||
await matrix.client.paginateEventTimeline(this.room.getLiveTimeline(), {backwards: true})
|
||||
.then(state => this.loadingStatus = state?'load more':false);
|
||||
this.scroll.setScrollBottom(scrollBottom);
|
||||
},
|
||||
getUser(userId){
|
||||
return matrix.client.getUser(userId);
|
||||
@ -64,14 +63,16 @@ export default {
|
||||
return {
|
||||
showScrollBtn: false,
|
||||
scrollOnUpdate: true,
|
||||
loadingStatus: 'load more'
|
||||
loadingStatus: 'load more',
|
||||
scroll: ()=>{}
|
||||
}
|
||||
},
|
||||
updated(){
|
||||
//this.scrollToBottom();
|
||||
if(this.scroll.getScrollBottom() < 400) this.scroll.scrollToBottom();
|
||||
},
|
||||
mounted(){
|
||||
//this.scrollToBottom();
|
||||
this.scroll = new scrollHandler(this.$refs.msgContainer);
|
||||
this.scroll.scrollToBottom();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<h1>[chat]</h1>
|
||||
<input v-model="search" class="input" type="text" maxlength="50" placeholder="search"><br>
|
||||
<div v-for="room in matrix.rooms" :key="room.roomId" @click="openChat(room)" >
|
||||
<div v-if="!search || room.name.toLowerCase().includes(search.toLowerCase())" class="roomListElement">
|
||||
<div v-if="!search || room.name.toLowerCase().includes(search.toLowerCase().trim())" class="roomListElement">
|
||||
<userThumbnail
|
||||
class="roomImg"
|
||||
:mxcURL="getUrl(room)"
|
||||
@ -63,9 +63,9 @@ export default {
|
||||
},
|
||||
methods:{
|
||||
openChat(room){
|
||||
this.currentRoom = room;
|
||||
this.currentRoom = undefined
|
||||
this.$nextTick(() => this.currentRoom = room);
|
||||
this.$router.push(`/rooms/${room.roomId}`);
|
||||
this.$forceUpdate();
|
||||
this.search = '';
|
||||
},
|
||||
getUrl(room){
|
||||
|
Loading…
Reference in New Issue
Block a user