导航栏吸顶效果


一、利用position的sticky属性

sticky
页面不动的情况下,它就像 position:relative;
而当页面滚动超出目标区域时,它表现的就像 position:fixed;,会固定在目标位置。

relative(相对定位)是指给元素设置相对于原本位置的定位,元素并不脱离文档流,因此元素原本的位置会被保留,其他的元素位置也不会受到影响。
而fixed:表示固定定位,与absolute定位类型类似,但它的相对移动的坐标并不是body,而是视图(屏幕内的网页窗口)本身

#sticky-nav { position: sticky; top: 0px; /**必须设置一个top值,否则不生效 */ width: 100%; height: 80px; background-color: yellowgreen;
        }

但是浏览器兼容性不好

所以采取所以采取第二种方法

二、通过监听浏览器scroll事件,动态绑定class

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style> * { margin: 0; padding: 0 } html body { height: 100vh; width: 100% } h1 { height: 200px; position: relative; background-color: lightblue;
        } h1:after { content: ''; position: absolute; top: 100px; left: 0; width: 100%; height: 2px; background-color: red;
        } #sticky-nav {
            /* position: sticky; */ top: 0px; /**必须设置一个top值,否则不生效 */ width: 100%; height: 80px; background-color: yellowgreen;
        } .scroll-container { height: 600px; width: 100%; background-color: lightgrey;
        } .fiexd { position: fixed; top: 0;
        }
    </style>
</head>
<body>

<h1>高200px;距顶部100px</h1>
<div id="sticky-nav">这是一个tab切换栏,给sticky定位top=100px</div>
<p class="scroll-container">发生滚动</p>
<p class="scroll-container" style="background:lightgoldenrodyellow;">发生滚动</p>
    
</body>
<script> window.onscroll = function(){ var scrollT = document.documentElement.scrollTop||document.body.scrollTop; var scrollH = document.documentElement.scrollHeight||document.body.scrollHeight; var clientH = document.documentElement.clientHeight||document.body.clientHeight console.log('scrollT:'+scrollT) console.log('scrollH:'+scrollH) console.log('clientH:'+clientH) if(scrollT>200){ console.log("滚轮已经大于200,置顶按钮出现"); document.getElementById('sticky-nav').classList.add('fiexd') //动态绑定class属性
 }else { document.getElementById('sticky-nav').classList.remove('fiexd') //动态删除class属性
 } } </script>
</html>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM