处理元素卡在视野边界,滚动到视野内

效果图如下:

本示例处理场景:点击底部的折叠面板,展开后移动端滚动条位置不变,导致展开内容在视图外。造成面板展开无内容的错觉。

处理核心API: IntersectionObserver

此API可绑定元素并监听元素是否在视野内。若在视野外​​​​​​​则使用scrollIntoView将元素滚动到可视区域内。

javascript 复制代码
 handleCollapseItemIntoView (form) {
      if (form.isActive) {
        const formHeaderEl = form.$el.querySelector('.el-collapse-item__header')
        var options = {
          root: domTools.getScrollParent(form.$el),//根元素------------滚动条所在元素,以便操作滚动条
          rootMargin: '0px 0px -20px 0px',//根元素判定是否在视野内的Margin设置
        }

        const intersectionObserver = new IntersectionObserver((entries) => {
          const ratio = entries[0].intersectionRatio
          // 如果 intersectionRatio 为 0,则目标在视野外,
          if (ratio <= 0) {
            intersectionObserver.unobserve(formHeaderEl)
            return
          }
          if (ratio < 1) {
            formHeaderEl.scrollIntoView({ behavior: 'smooth', block: 'center' })
          }
        }, options)
        // 等待面板渲染完成,高度变化再开启监听(内部数据为异步加载)
        setTimeout(() => {
          intersectionObserver.observe(formHeaderEl)
        }, 300)
      }
    },
相关推荐
zhaoyang03019 分钟前
css3笔记 (1) 自用
前端·javascript·css·vue.js·笔记·html·css3
开开心心就好9 分钟前
免费PDF转图片软件
javascript·智能手机·pdf·flask·word·excel·scikit-learn
珎珎啊14 分钟前
CSS3 常用功能详细使用指南
前端·css·css3
moxiaoran57533 小时前
uni-app萌宠案例学习笔记--页面布局和CSS样式设置
前端·css·uni-app
CrissChan4 小时前
Pycharm 函数注释
java·前端·pycharm
小小小小宇5 小时前
Vue.nextTick()笔记
前端
小约翰仓鼠6 小时前
vue3子组件获取并修改父组件的值
前端·javascript·vue.js
Lin Hsüeh-ch'in6 小时前
Vue 学习路线图(从零到实战)
前端·vue.js·学习
烛阴6 小时前
bignumber.js深度解析:驾驭任意精度计算的终极武器
前端·javascript·后端