仿简书,知乎pc官网顶部导航栏上下滚动效果
描述:简书,知乎顶部导航栏,当鼠标上下滚动时切换不同导航栏,非常符合用户习惯。
先上代码
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
- <title>Document</title>
- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
- </head>
- <body>
- <div id="app">
- <div class="nav-bar-wrapper fixed">
- <div class="content-wrapper">
- <div class="nav-bar-fixed">
- <div class="top-navBar" :class="{'up': isUp}">
- <div class="nav-bar-content">
- <div class="content-wrapper flex-sb">
- <h1 class="logo">
- <a href="" title="webrabbit博客">
- <img src="" alt="webrabbit博客">
- </a>
- </h1>
- <div class="nav-bar-item">
- <ul>
- <li><a href="">首页</router-link></li>
- <li><a href="">webrabbit开源博客</router-link></li>
- <li><a href="/">IT技术笔记</a></li>
- <li><a href="/">其他分享</a></li>
- </ul>
- </div>
- </div>
- </div>
- <div class="nav-bar-content">
- <div class="content-wrapper flex-sb">
- <h1 class="logo">
- <a href="/" title="webrabbit博客">
- <img src="" alt="webrabbit博客">
- </a>
- </h1>
- <div class="nav-bar-item">
- <ul>
- <li><a href="">首页</router-link></li>
- <li><a href="">webrabbit开源博客</router-link></li>
- <li><a href="/">IT技术笔记</a></li>
- <li><a href="/">其他分享</a></li>
- </ul>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="app-main">
- 滚动一下试试
- </div>
- </div>
- </body>
- </html>
- <script>
- var vm = new Vue({
- el: '#app',
- data() {
- return {
- isUp: false, // 判断是否是向上滚动
- changeUpDir: 0, // 设置从向下滚动到向上滚动时的位置(距离滚动条顶部)
- changeDownDir: 0 // 设置从向上滚动到向下滚动时的位置(距离滚动条顶部)
- }
- },
- mounted() {
- const _this = this
- let scrollTop = 0 // 初始化滚动条为位置为0
- let topValue = this.getScrollTop() // 设置一个标识位,即复制一个滚动条位置,但是这个位置获取的时间比 scrollTop慢,
- document.onscroll = function() {
- scrollTop = _this.getScrollTop() // 滚动条的位置
- if (scrollTop <= topValue) { // 当后者滚动条大于前者滚动条时,即认为滚动条向上运动,但是我们设置一个临界值,当大于这个临界值时,即认为是用户有意向上滚动
- _this.changeUpDir = scrollTop // changeUpDir 这个是 刚好从向下滚动到向上滚动改变方向时的位置
- if (_this.changeDownDir - scrollTop > 120) { // 这个是else 里面记录的值减滚动条位置 大于120 即认为是向上滚动
- _this.isUp = true
- }
- } else {
- _this.changeDownDir = scrollTop
- if (scrollTop - _this.changeUpDir > 120) {
- _this.isUp = false
- }
- }
- setTimeout(function() { topValue = scrollTop }, 0)
- }
- },
- methods: {
- getScrollTop() { // 获取滚动条位置
- var scrollTop=0;
- if(document.documentElement&&document.documentElement.scrollTop) {
- scrollTop=document.documentElement.scrollTop;
- } else if(document.body) {
- scrollTop=document.body.scrollTop;
- }
- return scrollTop;
- }
- }
- })
- </script>
-
- <style scoped lang="scss">
- .nav-bar-wrapper {
- width: 100%;
- height: 78px;
- border-bottom: 1px solid #f0f0f0;
- box-shadow: 0 2px 10px rgba(0,0,0,.05);
- }
- .nav-bar-wrapper .content-wrapper {
- width: 90%;
- margin: 0 auto;
- }
- .nav-bar-wrapper .nav-bar-content h1 {
- margin: 0;
- }
- .nav-bar-wrapper .nav-bar-content h1:hover {
- animation: logo .6s;
- }
- .nav-bar-content .nav-bar-item ul li {
- margin:0 10px;
- color: #777;
- }
- .nav-bar-content .nav-bar-item ul li:hover {
- color: #3399CC;
- }
-
- .fixed {
- position: fixed;
- top: 0;
- left: 0;
- z-index: 800;
- background: #fff;
- }
- @keyframes logo {
- 0% {
- transform: scale(1);
- }
- 25% {
- transform: scale(1.1);
- }
- 50% {
- transform: scale(1);
- }
- 75% {
- transform: scale(1.1);
- }
- 100% {
- transform: scale(1);
- }
- }
- .nav-bar-fixed {
- position: fixed;
- width: 100%;
- top: 30px;
- left: 0;
- height: 48px;
- overflow: hidden;
- }
- .top-navBar {
- width: 100%;
- border-bottom: 1px solid #f0f0f0;
- box-shadow: 0 2px 10px rgba(0,0,0,.05);
- overflow: hidden;
- transition: all .3s cubic-bezier(.645,.045,.355,1);
- transform: translateY(-48px);
- }
- .up {
- transform: translateY(0px);
- }
- ul li {
- display: inline-block;
- list-style: node;
- }
-
- .app-main {
- height: 2000px;
- font-size: 100px;
- writing-mode:tb-rl;
- margin: 110px auto;
- }
- .flex-sb {
- display: flex;
- justify-content: space-between;
- align-items: center;
- flex-wrap: wrap;
- }
- </style>
-
这里有两个主要的点
1,html 布局
2,isUp为true 或false的判断
文章由官网发布,如若转载,请注明出处:https://www.veimoz.com/113
0 评论
3.7k
发表评论
热门文章
自媒体博客Spimes主题45w 阅读
Spimes主题专为博客、自媒体、资讯类的网站设计....
Splity博客双栏主题15w 阅读
仿制主题,Typecho博客主题,昼夜双版设计,可....
vCard主题个人简历主题13w 阅读
一款个人简历主题,可以简单搭建一下,具体也比较简单....
Spzac个人资讯下载类主题12w 阅读
用于作品展示、资源下载,行业垂直性网站、个人博客,....
热评文章
自媒体博客Spimes主题424 评论
Splity博客双栏主题191 评论
Spzac个人资讯下载类主题89 评论
Splinx博客图片主题35 评论
Spzhi知识付费社区主题34 评论
三栏清新博客S_blog主题31 评论
vCard主题个人简历主题29 评论
Pure轻简主题29 评论
chenyu
4月7日
能不能支持deepseek