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

效果图如下:

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

处理核心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)
      }
    },
相关推荐
夏幻灵13 分钟前
HTML5里最常用的十大标签
前端·html·html5
冰暮流星14 分钟前
javascript之二重循环练习
开发语言·javascript·数据库
Mr Xu_27 分钟前
Vue 3 中 watch 的使用详解:监听响应式数据变化的利器
前端·javascript·vue.js
未来龙皇小蓝30 分钟前
RBAC前端架构-01:项目初始化
前端·架构
程序员agions39 分钟前
2026年,微前端终于“死“了
前端·状态模式
万岳科技系统开发39 分钟前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
程序员猫哥_1 小时前
HTML 生成网页工具推荐:从手写代码到 AI 自动生成网页的进化路径
前端·人工智能·html
龙飞051 小时前
Systemd -systemctl - journalctl 速查表:服务管理 + 日志排障
linux·运维·前端·chrome·systemctl·journalctl
我爱加班、、1 小时前
Websocket能携带token过去后端吗
前端·后端·websocket
AAA阿giao1 小时前
从零拆解一个 React + TypeScript 的 TodoList:模块化、数据流与工程实践
前端·react.js·ui·typescript·前端框架