Browse Source

优化: ios h5上拉消息滚动条异常问题

master
xsx 10 months ago
parent
commit
6313b49f43
  1. 36
      im-uniapp/pages/chat/chat-box.vue

36
im-uniapp/pages/chat/chat-box.vue

@ -4,8 +4,9 @@
<view class="chat-main-box" :style="{height: chatMainHeight+'px'}">
<view class="chat-message" @click="switchChatTabBox('none')">
<scroll-view class="scroll-box" scroll-y="true" upper-threshold="200" @scrolltoupper="onScrollToTop"
:scroll-into-view="'chat-item-' + scrollMsgIdx">
<view v-if="chat" v-for="(msgInfo, idx) in chat.messages" :key="idx">
@scroll="onScroll" :scroll-into-view="'chat-item-' + scrollMsgIdx" :scroll-top="scrollTop">
<view v-if="chat" class="chat-wrap">
<view v-for="(msgInfo, idx) in chat.messages" :key="idx">
<chat-message-item :ref="'message'+msgInfo.id" v-if="idx >= showMinIdx"
:headImage="headImage(msgInfo)" @call="onRtCall(msgInfo)" :showName="showName(msgInfo)"
@recall="onRecallMessage" @delete="onDeleteMessage" @copy="onCopyMessage"
@ -14,6 +15,7 @@
:groupMembers="groupMembers">
</chat-message-item>
</view>
</view>
</scroll-view>
<view v-if="!isInBottom" class="scroll-to-bottom" @click="onClickToBottom">
{{ newMessageSize > 0 ? newMessageSize+'条新消息' :'回到底部'}}
@ -144,7 +146,9 @@ export default {
isReadOnly: false, //
playingAudio: null, //
isInBottom: true, //
newMessageSize: 0 //
newMessageSize: 0, //
scrollTop: 0, // ios h5
scrollViewHeight: 0 //
}
},
methods: {
@ -574,12 +578,20 @@ export default {
this.newMessageSize = 0;
}, 100)
},
onScroll(e) {
//
this.scrollViewHeight = e.detail.scrollHeight;
},
onScrollToTop() {
if (this.showMinIdx > 0) {
// #ifndef H5
//
// appscroll-into-view
this.scrollToMsgIdx(this.showMinIdx);
// #endif
// #ifdef H5
// h5scroll-top
this.holdingScrollBar(this.scrollViewHeight);
// #endif
// 20
this.showMinIdx = this.showMinIdx > 20 ? this.showMinIdx - 20 : 0;
}
@ -591,6 +603,20 @@ export default {
this.isInBottom = true;
this.newMessageSize = 0;
},
holdingScrollBar(scrollViewHeight) {
//
const query = uni.createSelectorQuery().in(this);
setTimeout(() => {
query.select('.chat-wrap').boundingClientRect();
query.exec(data => {
this.scrollTop = data[0].height - scrollViewHeight;
if(this.scrollTop < 10){
//
this.holdingScrollBar();
}
});
}, 50)
},
onShowMore() {
if (this.chat.type == "GROUP") {
uni.navigateTo({
@ -973,7 +999,7 @@ export default {
this.$nextTick(() => {
this.windowHeight = uni.getSystemInfoSync().windowHeight;
this.reCalChatMainHeight();
this.scrollToBottom();
// #ifdef H5
this.initHeight = window.innerHeight;
// iosh5:

Loading…
Cancel
Save