实现顶部导航栏点击后动态滚动,使选中的导航项一直处于屏幕最中间,可以通过以下步骤来实现:
- 确保已经有一个使用 Vue 和 Vue Router 构建的导航栏组件。
- 在导航栏组件中,为每个导航项添加一个点击事件处理程序。在点击事件处理程序中,触发滚动操作。
- 获取被点击的导航项的位置,并计算滚动距离,使其处于屏幕中间。
- 使用 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>
点击导航项时会计算滚动距离,使选中的导航项位于屏幕中间。根据项目结构和样式进行适当的调整。