vue 实现左侧导航栏,右侧锚点定位滚动到指定位置(超简单方法)

项目截图:

实现方法:

点击左侧菜单根据元素id定位到可视内容区域。

浏览器原生提供了一种方法scrollIntoView 。

通过scrollIntoView方法可以把元素滚动到可视区域内。

 

behavior: "smooth"是指定滚动方式为平滑效果。

 具体代码如下:

<div class="main">
            <div class="sidebar">
              <el-menu default-active="1" class="nav" @open="handleOpen" @close="handleClose">
                <el-submenu index="1">
                  <template slot="title">
                    <span>应用API</span>
                  </template>
                  <el-menu-item-group>
                    <el-menu-item
                      v-for="(item, index) in sections"
                      :key="item.name"
                      :index="index"
                      @click="changeMenu(item)"
                      >{{ item.name }}</el-menu-item
                    >
                  </el-menu-item-group>
                </el-submenu>
              </el-menu>
            </div>
            <div class="content">
              <div id="Start" class="content-item">
                <h2 class="name">快速开始</h2>
              </div>
              <div id="UpDate" class="content-item">
                <h2 class="name">检查更新</h2>
              </div>
              <div id="DownLoad" class="content-item">
                <h2 class="name">下载应用</h2>
              </div>
              <div id="History" class="content-item">
                <h2 class="name">更新历史</h2>
              </div>
            </div>
          </div>
data(){
    return {
        sections: [
        {
          name: '快速开始',
          value: 'Start'
        },
        {
          name: '检查更新',
          value: 'UpDate'
        },
        {
          name: '下载应用',
          value: 'DownLoad'
        },
        {
          name: '更新历史',
          value: 'History'
        }
      ]
    }
},
methods:{
    changeMenu(item) {
      const el = this.$el.querySelector(`#${item.value}`);
      if (el) {
        el.scrollIntoView({ behavior: 'smooth' });
      }
    }
}

css样式

.main {
  display: flex;
  .sidebar {
    width: 260px;

    .nav {
      height: 100%;
    }
  }
  .content {
    flex: 1;
    height: 78vh;
    overflow-y: auto;
    padding: 20px 30px;
  }
  .content-item {
    margin-bottom: 30px;

    &-p {
      padding: 2px 0;
    }
  }
  .content-item-name {
    font-weight: bold;
    padding: 30px 0 20px 0;
  }
  .name {
    margin-bottom: 10px;
  }
}

相关推荐

  1. Vue实现滚动指定区域

    2024-04-28 15:28:07       32 阅读
  2. vue 路由跳转其他页面指定位置

    2024-04-28 15:28:07       53 阅读
  3. vue实现定位功能

    2024-04-28 15:28:07       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-28 15:28:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-28 15:28:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-28 15:28:07       82 阅读
  4. Python语言-面向对象

    2024-04-28 15:28:07       91 阅读

热门阅读

  1. c++缓冲区同步原理与std::ios::sync_with_stdio作用

    2024-04-28 15:28:07       34 阅读
  2. 故障诊断 | 基于GASF-CNN的状态识别研究

    2024-04-28 15:28:07       32 阅读
  3. 使用Vite+Vue 3+Qiankun构建微前端应用

    2024-04-28 15:28:07       32 阅读
  4. StatusBar,状态栏设置中文

    2024-04-28 15:28:07       28 阅读
  5. pam配置文件中[default=2 ignore=ignore success=ok]

    2024-04-28 15:28:07       27 阅读
  6. 前端小白学习Vue3框架(一)

    2024-04-28 15:28:07       29 阅读
  7. 裸金属服务器的优势有哪些?

    2024-04-28 15:28:07       36 阅读
  8. CentOS yum安装jdk8

    2024-04-28 15:28:07       30 阅读
  9. 【SQL函数:TO_CHAR】

    2024-04-28 15:28:07       34 阅读