vue实现对话框指定某个对话内容的滚动到指定位置(滚动到可视区域的中间位置)

1、使用el-scrollbar实现定位滚动(elementui组件库)
如何滚动:参考链接
比如说指定某条对话内容滚动到可视区域的中间
html结构:

    <div class="chat-list" id="chat-list">
      <el-scrollbar ref="scroll" style="height: 100%;">
        <div v-if="chatListAll.length === 0 && !callEnd" style="color: rgba(0, 0, 0, 0.4); text-align: center;">暂无对话div>
        <chat-item
          v-for="(chat, index) in chatListAll"
          :key="index"
          :chat="chat"
					:searchKey="searchKey"
          ref="chat"
          :class="chat.isActive ? 'active' : ''"
        />

        <div v-if="callEnd" style="color: rgba(0, 0, 0, 0.4); text-align: center;">本次通话已结束div>
      el-scrollbar>
    div>

js计算滚动的代码:

		scrollUncivilized(data) {
			this.$nextTick(() => {
				let chatDiv = document.querySelector('#chat-list');
				console.log(chatDiv.offsetHeight);
				// const parentHeight = chatDiv.offsetHeight - 48; // 减去上下padding
				const parentHeight = chatDiv.clientHeight; // 直接获取可视区域的高度
				if (this.chatListAll.length) {
					const index = this.chatListAll.findIndex(item => item.warning === data);
					if (index > -1) {
						const itemOffsetTop = this.$refs.chat[index].$el.offsetTop; // item顶部到父元素顶部的距离
						const itemOffsetHeight = this.$refs.chat[index].$el.offsetHeight; // 元素本身的高度
						// if (this.$refs.chat[index].$el.offsetTop > parentHeight) {
						this.$refs['scroll'].wrap.scrollTop = itemOffsetTop - (parentHeight - itemOffsetHeight) / 2;
						// }
						// this.$refs.chat[index].$el.scrollIntoView(true);
						console.log(this.$refs['scroll'].wrap.scrollTop);
					}
				}
			});
		},

2、使用ScrollIntoView滚动到可视区域
如果对滚动的位置要求不高,只是滚动到可视区域内,可以使用ScrollIntoView滚动到可视区域的顶部或底部
参考链接

参考识别:scrollTop、offsetTop、offsetHeight、clientHeight等
vue实现聊天框自动滚动参考链接

你可能感兴趣的:(element-ui,Vue,vue.js,前端,javascript,elementui)