解决使用el-dialog,切换tab页标签时滚动条还原到了最顶端

el-dialog里面内容比较多,每次用户滚动中间查看某个数据,切了其他tab页再回来的时候滚动条又回到了最顶端,给操作带来不便,故对代码进行了更改每次切完tab标签,el-dialog滚动条位置保持不变,因为项目中使用比较多,故写了公共方法

export function _handleScrollTable(ref) {
	let scrollTop = 0
	const bodyWrapper = ref.bodyWrapper
	const syncPostion = ref.syncPostion
	const resizeListener = ref.resizeListener
	ref.syncPostion = () => {
		syncPostion()
		if (ref?.layout?.scrollY) {
			scrollTop = bodyWrapper.scrollTop
		}
	}
	ref.resizeListener = () => {
		resizeListener()
		setTimeout(() => {
			bodyWrapper.scrollTop = scrollTop
		}, 0)
	}
	ref.bindEvents()
}
此处的ref为组件的实例

你可以在 el-dialog 组件中监听滚动事件,在滚动到 el-cascader 组件所在的位置,手动触发 el-cascader 组件的 `handleClickoutside` 方法来隐藏所有子菜单。 例如: ```html <el-dialog title="Dialog Title" :visible.sync="dialogVisible" @scroll.native="handleDialogScroll" > <el-cascader ref="cascader" :options="options" :props="{ lazy: true }" ></el-cascader> </el-dialog> ``` ```javascript methods: { handleDialogScroll() { const cascaderEl = this.$refs.cascader.$el const cascaderOffsetTop = cascaderEl.offsetTop const cascaderHeight = cascaderEl.offsetHeight const scrollTop = this.$refs.dialog.$el.scrollTop const dialogHeight = this.$refs.dialog.$el.offsetHeight const scrollBottom = scrollTop + dialogHeight if ( cascaderOffsetTop >= scrollTop && cascaderOffsetTop + cascaderHeight <= scrollBottom ) { // el-cascader 组件在可视区域内,不做处理 return } // el-cascader 组件不在可视区域内,隐藏所有子菜单 const cascader = this.$refs.cascader if (cascader.isExpand) { cascader.handleClickoutside() } } } ``` 在滚动事件中,首先获取 el-cascader 组件的位置和高度信息,以及 el-dialog 组件的滚动位置和高度信息,然后根据这些信息判断 el-cascader 组件是否在当前可视区域内。如果 el-cascader 组件不在可视区域内,就手动触发 el-cascader 组件的 `handleClickoutside` 方法来隐藏所有子菜单。 需要注意的是,这里的 `handleClickoutside` 方法是 el-cascader 组件内部的一个方法,需要通过 `$refs` 获取到 el-cascader 组件的实例才能调用。同,`isExpand` 属性是 el-cascader 组件内部用于判断子菜单是否展开的属性,需要保证 el-cascader 组件已经加载完成并且展开过子菜单才能使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值