当前位置:首页 > VUE

vue实现左侧楼层导航

2026-01-20 17:30:30VUE

Vue实现左侧楼层导航的方法

数据准备

创建一个包含楼层信息的数组,每个楼层对象包含id、名称和对应的DOM元素id。例如:

data() {
  return {
    floors: [
      { id: 1, name: "楼层1", targetId: "floor1" },
      { id: 2, name: "楼层2", targetId: "floor2" }
    ],
    activeFloor: null
  }
}

模板结构

在模板中创建导航列表和对应的楼层区域:

<div class="container">
  <div class="nav-wrapper">
    <ul class="floor-nav">
      <li v-for="floor in floors" 
          :key="floor.id"
          :class="{active: activeFloor === floor.id}"
          @click="scrollToFloor(floor)">
        {{ floor.name }}
      </li>
    </ul>
  </div>

  <div class="content">
    <div v-for="floor in floors" 
         :id="floor.targetId" 
         class="floor-section">
      <h2>{{ floor.name }}</h2>
      <!-- 楼层内容 -->
    </div>
  </div>
</div>

滚动定位功能

实现点击导航跳转到对应楼层的方法:

methods: {
  scrollToFloor(floor) {
    const element = document.getElementById(floor.targetId)
    if (element) {
      element.scrollIntoView({ behavior: "smooth" })
      this.activeFloor = floor.id
    }
  }
}

滚动监听

添加滚动事件监听,自动更新当前激活的楼层导航:

mounted() {
  window.addEventListener("scroll", this.handleScroll)
},
beforeDestroy() {
  window.removeEventListener("scroll", this.handleScroll)
},
methods: {
  handleScroll() {
    const scrollPosition = window.scrollY
    this.floors.forEach(floor => {
      const element = document.getElementById(floor.targetId)
      if (element) {
        const offsetTop = element.offsetTop
        const offsetHeight = element.offsetHeight
        if (scrollPosition >= offsetTop && scrollPosition < offsetTop + offsetHeight) {
          this.activeFloor = floor.id
        }
      }
    })
  }
}

样式优化

添加基础样式使导航固定并美化:

.container {
  display: flex;
}
.nav-wrapper {
  position: fixed;
  width: 200px;
}
.floor-nav {
  list-style: none;
  padding: 0;
}
.floor-nav li {
  padding: 10px;
  cursor: pointer;
}
.floor-nav li.active {
  color: #42b983;
  font-weight: bold;
}
.floor-section {
  min-height: 100vh;
  margin-left: 220px;
}

性能优化

对于大量楼层的情况,可以使用节流函数优化滚动事件:

import { throttle } from "lodash"

methods: {
  handleScroll: throttle(function() {
    // 原有逻辑
  }, 100)
}

响应式处理

添加响应式处理,在小屏幕下隐藏导航或改为其他交互方式:

@media (max-width: 768px) {
  .nav-wrapper {
    display: none;
  }
  .floor-section {
    margin-left: 0;
  }
}

vue实现左侧楼层导航

标签: 楼层vue
分享给朋友:

相关文章

vue实现展开与收起

vue实现展开与收起

Vue 实现展开与收起功能 在 Vue 中实现展开与收起功能可以通过多种方式完成,以下是一些常见的方法: 使用 v-show 或 v-if 控制显示 通过 Vue 的指令 v-show 或 v-i…

vue实现绑卡的原理

vue实现绑卡的原理

Vue 实现绑卡的原理 Vue 实现绑卡功能通常涉及前端表单处理、数据绑定、验证以及和后端 API 的交互。以下是实现绑卡功能的核心原理和步骤: 数据绑定与表单处理 Vue 通过 v-model…

vue实现密码框的包

vue实现密码框的包

Vue 密码框实现方案 在 Vue 中实现密码框功能,可以通过原生 HTML 结合 Vue 指令或使用第三方组件库完成。以下是几种常见方案: 原生 HTML + Vue 双向绑定 <temp…

vue实现钟表

vue实现钟表

使用 Vue 实现动态钟表 以下是一个基于 Vue 3 的动态钟表实现方案,包含时分秒指针和数字时间显示。 模板部分 <template> <div class="clock-…

代码实现vue

代码实现vue

创建Vue项目 使用Vue CLI快速初始化项目,确保已安装Node.js和npm/yarn: npm install -g @vue/cli vue create my-vue-project c…

vue实现语音

vue实现语音

Vue 实现语音功能的方法 使用 Web Speech API Vue 可以结合 Web Speech API 实现语音识别和合成功能。Web Speech API 包含 SpeechRecognit…