实现头部Sticky 粘性布局,并且点击菜单滑动到相应位置

摘要:该代码实现了一个带粘性导航栏的页面滚动功能。通过el-button组件绑定点击事件,调用scrollToCity方法实现平滑滚动到对应ID的区块。使用scrollIntoViewsmooth参数实现平滑滚动效果,并通过CSS的position:sticky使导航栏固定在顶部。注意事项包括:祖先元素不能设置overflow:hidden,否则会导致粘性布局失效。导航栏设置了z-index确保始终显示在前端。

复制代码
<template>
<div>
    <div class="buildNameClass">
         <!--给导航项绑定点击事件-->
         <el-button type="primary" @click="scrollToCity('one')">工商信息</el-button>
         <el-button type="primary" @click="scrollToCity('two')">股权关系</el-button>
         <el-button type="primary" @click="scrollToCity('three')">城市布局</el-button>
         <el-button type="primary" @click="scrollToCity('four')">分支机构</el-button>
    </div>
    <div>
        <!--给目标元素加 id -->
        <div class="thirdClass" id="city-one"></div>
        <div class="eighthClass" id="city-two"></div>
        <div class="eighthClass" id="city-three"></div>
        <div class="fourthClass" id="city-four"></div>
    </div>
</div>
<template>

<script>
export default {
    methods: {
        //使用 scrollIntoView({behavior: 'smooth'}) 实现平滑滚动
        scrollToCity(cityId) {
            const element = document.getElementById(`city-${cityId}`);
            if (element) {
                element.scrollIntoView({
                    behavior: 'smooth', // 平滑滚动
                    block: 'start'       // 对齐顶部
                });
            }
        },
    }
}
</script>

<style>
    //css样式粘性布局
    //要注意相关祖先组件不能有overflow: hidden;会导致粘性布局失效
    //如果滚动是body层级控制,则要确保从 .buildNameClass 到 <body> 之间没有任何 overflow:                     hidden;
    .buildNameClass{
        width: 100%;
        height: 50px;
        margin-top: 20px;
        border-radius: 6px;
        background-color: rgba(255,255,255,0.74);
        font-size: 19px;
        font-weight: bold;
        display: flex;
        flex-direction: row;
        align-items: center;
        position: sticky;
        position: -webkit-sticky;
        top: 50px;
        z-index: 9999;
    }
</style>
相关推荐
万少8 小时前
用腻了 WorkBuddy 的默认界面?这个开源小工具给它换上了毛玻璃
前端·javascript·后端
To_OC10 小时前
LC 15 三数之和:双指针不难,难的是把去重做对
javascript·算法·leetcode
触底反弹11 小时前
🔥 前端也能玩转 AI 流式输出!从二进制流到打字机效果,一篇讲透
javascript·人工智能·node.js
胡萝卜术11 小时前
深度重构:Agent Skills——从 Prompt 工程到能力工程
javascript·架构·github
海上彼尚12 小时前
Nodejs也能写Agent - 16.LangGraph篇 - 条件分支与循环
前端·后端·langchain·node.js
To_OC13 小时前
从 “卡死半天” 到 “打字机效果”:大模型流式输出前端实现全记录
前端·javascript·llm
rockey62713 小时前
基于AScript的JavaScript脚本语言发布啦
javascript·c#·.net·js·script
SoaringHeart14 小时前
Flutter最佳实践:键盘辅助视图输入框天添加图片附件
前端·flutter
kyriewen14 小时前
我看完这篇安全论文——AI推荐的npm包,92%是编出来的
前端·javascript·ai编程
心中有国也有家15 小时前
AtomGit Flutter 鸿蒙客户端:Canvas 绘制进阶-路径、渐变与混合模式
android·javascript·flutter·华为·harmonyos