elementUI el-dialog 滚动条滚动到el-cascader标签显示
时间: 2023-07-30 11:12:45 浏览: 409
你可以在 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 组件已经加载完成并且展开过子菜单才能使用。
阅读全文