【vue】【intersectionObserver】滚动正文时菜单滚动到对应菜单

场景需求:

  • 左侧为菜单列表,右侧是对应菜单的内容,
  • 所有内容可进行无缝滚动
  • 当内容滚动到对应的菜单时,菜单进行定位并显示到可视区域
  • 点击菜单时,对应内容显示到可视区域

涉及知识点:

思路

切换菜单时,内容滚动到对应菜单
  • 定义变量active存储当前菜单名称,获取当前内容ref进行scrollTop滚动
效果图

在这里插入图片描述

滚动内容时,菜单切换对应菜单并可见
  • 页面加载时使用intersectionObserver.observe()建立观察,观察每一个内容是否在可视区域
  • 当内容出现在可视区域时,当entrie.intersectionRatio返回值不是0的时候,使用entrie.target.innerHTML.trim()拿到当前激活的菜单名称赋值给active
  • 此时active的值进行变化,有了新的ref名称activeMenu,于是使用scrollIntoView将新的激活菜单滚动到可视区域即可
效果图

在这里插入图片描述

HTML

  <div class="content-box">
    <div class="menu-tabs">
      <div
        class="tab"
        :class="{
    'tab-active':active === item.name}"
        v-for="(item,index) in menuList"
        :key="index"
        :ref="active === item.name ? 'activeMenu':''"
        @click="menuClick(item.name,index)">
        <span>{
  { item.name }}</span>
      </div>
    </div>
    <div class="content-wrap" id="contentWrap">
      <div
        class="content"
        v-for="(content,index) in this.contentList"
        :key
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值