el-autocomplete 当页面滚动但滚动区域不为window时,弹出层定位不准确问题

20 篇文章 0 订阅
1 篇文章 0 订阅
问题

element中el-autocomplete组件,当页面滚动但滚动区域不为window时,弹出层定位不准确问题

解决方案

研究源码发现,el-autocomplete所依赖的popperjs有监听window滚动事件,能够在页面滚动时实时更新popper的位置。
但因为我的布局滚动区域不是window,而是内容区域所在div。接下来我提供一种思路。在mounted方法中监听滚动容器的滚动事件。一旦滚动,获取popper元素,调用update()方法,重新计算位置。

popperjs有提供update()方法,可以重新计算popper位置(即更新下图红色所示区位置)

在这里插入图片描述

代码示例
  • 这里面ref是关键,通过ref一层层获取popperjs对象
 <el-autocomplete ref="myAutocomplete"></el-autocomplete>
  • 更新位置的方法
 this.$refs.myAutocomplete.$refs.suggestions.popperJS.update()
  • 监听滚动事件,实时更新位置
/**  page滚动同步更新popper位置事件 */
      registerScrollEvent () {
        let rightPage = document.getElementById('homeContent')
        rightPage.addEventListener('scroll', this.pageScrollEvent)
      },
      pageScrollEvent () {
        let self = this
        requestAnimationFrame(function () {
          self.$refs.myAutocomplete&& self.$refs.myAutocomplete.$refs && self.$refs.myAutocomplete.$refs.suggestions && self.$refs.myAutocomplete.$refs.suggestions.popperJS && self.$refs.myAutocomplete.$refs.suggestions.popperJS.update(})
      },
      /** 取消page滚动同步更新popper位置事件 */
      unRegisterScrollEvent () {
        let rightPage = document.getElementById('homeContent')
        rightPage.removeEventListener('scroll', this.pageScrollEvent)
      },
我的布局

在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值