网页开发,实现顶部导航栏点击后动态滚动,使选中的导航项一直处于屏幕最中间

280 阅读1分钟

实现顶部导航栏点击后动态滚动,使选中的导航项一直处于屏幕最中间,可以通过以下步骤来实现:

  1. 确保已经有一个使用 Vue 和 Vue Router 构建的导航栏组件。
  2. 在导航栏组件中,为每个导航项添加一个点击事件处理程序。在点击事件处理程序中,触发滚动操作。
  3. 获取被点击的导航项的位置,并计算滚动距离,使其处于屏幕中间。
  4. 使用 DOM 操作或者一些库(如 vue-scrollto)来实现平滑滚动。
<template>
  <div class="navbar">
    <ul>
      <li v-for="(item, index) in navItems" :key="index" @click="scrollToItem(index)">
        {{ item }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      navItems: ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5'], // Your navigation items
    };
  },
  methods: {
    scrollToItem(index) {
      const navbar = document.querySelector('.navbar');
      const navItems = navbar.querySelectorAll('li');
      const selectedItem = navItems[index];
      
      const navbarRect = navbar.getBoundingClientRect();
      const selectedItemRect = selectedItem.getBoundingClientRect();
      
      const scrollDistance = selectedItemRect.left - navbarRect.left - (navbarRect.width - selectedItemRect.width) / 2;
      
      navbar.scrollBy({ left: scrollDistance, behavior: 'smooth' });
    },
  },
};
</script>

<style>
.navbar {
  width: 100%;
  overflow-x: auto;
  white-space: nowrap;
}

ul {
  list-style: none;
  padding: 0;
  display: flex;
  align-items: center;
  margin: 0;
}

li {
  padding: 10px 20px;
  cursor: pointer;
  transition: background-color 0.2s;
}

li:hover {
  background-color: #f0f0f0;
}
</style>

点击导航项时会计算滚动距离,使选中的导航项位于屏幕中间。根据项目结构和样式进行适当的调整。