页面滚动时隐藏element-ui下拉框/时间弹框

本文介绍了一种解决在有垂直滚动的后台管理系统中,点击下拉框后因页面滚动导致下拉项遮挡布局的问题。通过在页面滚动或缩放时隐藏下拉项来实现,利用了点击目标元素时下拉项自动隐藏的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景

在类后台管理的系统中,当(有垂直滚动时)点击下拉框后滚动页面,会发现下拉项会遮盖住layout
正常页面:
在这里插入图片描述

滚动后:在这里插入图片描述

解决

  • 在页面滚动或者缩放时隐藏下拉项即可(借助点击目标元素,下拉项会自动隐藏的特点)
let mouseUp = null;
let mouseDown = null;

// 隐藏popper
export const hidePopper = function (cls='.el-popper') {
  let dom = document.querySelector(cls);
  if(!dom){
    return;
  }
  // 创建鼠标事件
  if (!mouseUp || !mouseDown) {
    console.log('-----create events-----');
    mouseUp = new MouseEvent('mouseup', {
      'view': window,
      'bubbles': true,
      'cancelable': true
    });
    mouseDown = new MouseEvent('mousedown', {
      'view': window,
      'bubbles': true,
      'cancelable': true
    });
  }
  // 顺序触发mouseDown、mouseUp
  dom.dispatchEvent(mouseDown);
  dom.dispatchEvent(mouseUp);
}

// 清除鼠标事件
export const delEvents = function () {
  console.log('-----delete events-----');
  mouseUp = null;
  mouseDown = null;
}

/**
  * 滚动时隐藏
  * @param contain 滚动监听的容器
  * @param cls 隐藏的元素class:如下拉、时间弹框等
*/
export const scrollHide = function (contain,cls) {
  // 先移除
  if(mouseUp||mouseDown){
    delEvents();
  }
  // 再绑定
  contain.onscroll = function () {
    hidePopper(cls);
  }
}
  • 使用
// 在container有滚动时
// 隐藏popper类的组件
scrollHide(document.getElementById('container'),'.popper');
// 隐藏下拉项
scrollHide(document.getElementById('container'),'.el-select-dropdown');
// 隐藏时间弹框
scrollHide(document.getElementById('container'),'.el-date-range-picker');
Vue.js配合Element UI开发,如果你想要实现在页面滚动隐藏`el-select`组件的下拉菜单,你可以使用`@scroll`事件和元素的高度计算来动态控制。首先,确保你的`el-select`有`.el-select-dropdown`这个CSS类关联到它的下拉部分。然后,添加如下的Vue组件内脚本: ```html <template> <div ref="selectContainer"> <el-select v-model="selectedValue" @scroll.native.prevent> <!-- select options --> </el-select> </div> </template> <script> export default { data() { return { selectedValue: '', }; }, mounted() { this.$refs.selectContainer.addEventListener('scroll', this.handleScroll); }, methods: { handleScroll() { const dropdownHeight = this.$refs.selectDropdown.offsetHeight; const scrollTop = this.$refs.selectContainer.scrollTop; if (scrollTop + this.$refs.selectContainer.clientHeight >= dropdownHeight) { // 当滚动到底部 this.$refs.selectDropdown.style.maxHeight = '0'; // 隐藏下拉框 } else { this.$refs.selectDropdown.style.maxHeight = null; // 显示下拉框 } }, }, beforeDestroy() { this.$refs.selectContainer.removeEventListener('scroll', this.handleScroll); // 移除监听 }, }; </script> <style scoped> .el-select-dropdown { /* 如果你的下拉框有自己的CSS选择器,替换为对应的 */ .el-select-dropdown { max-height: 0; /* 初始状态隐藏下拉框 */ } </style> ``` 这里的关键在于`handleScroll`方法,当用户滚动到`selectContainer`的底部,设置下拉菜单的最大高度为0,使其不可见。当你向上滚动,下拉菜单会恢复默认样式。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值