BootStrap 导航栏实现下滑消失,上滑出现
时间:2022-07-22
本文章向大家介绍BootStrap 导航栏实现下滑消失,上滑出现,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.Html
首先是导入bootstrap等样式,和jquery,再复制一个nav组件;代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<title>多凡Blog</title>
<!-- Bootstrap core CSS -->
<link rel="stylesheet" href="vendor/css/bootstrap.css">
<!-- Custom css -->
<link rel="stylesheet" href="css/base.css">
<link rel="stylesheet" href="css/index.css"> </head>
<body>
<!-- Navigation -->
<nav class=" navbar navbar-expand-lg navbar-light fixed-top" id="mainNav">
<a class="navbar-brand" href="#" >DuoFan</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive"
aria-expanded="false" aria-label="Toggle navigation">
Menu
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto mt-2 mt-lg-0">
<li class="nav-item active">
<a class="nav-link" href="index.html">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="about.html">About</a>
</li>
<li class="nav-item">
<a class="nav-link " href="post.html">About</a>
</li>
<li class="nav-item">
<a class="nav-link " href="contact.html">Contact</a>
</li>
<form class="form-inline my-0 my-lg-0">
<input class="form-control mr-sm-2" type="search" placeholder="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
</ul>
</div>
</nav>
<header class="masthead" style="background-image: url(img/home-bg.jpg); height: 1200px;">
</header>
<!-- Jquery 3.3.1 -->
<script src="vendor/js/jquery-3.3.1.js"></script>
<!-- Bootstrap core JS -->
<!-- <script src="vendor/js/bootstrap.js"></script> -->
<script src="vendor/js/bootstrap.bundle.js"></script>
<script src="js/index.js" type="text/javascript" ></script>
</body>
</html>
2.JS
接下来控制nav可以下滑消失,上滑出现, 思路是,将nav首先固定到浏览器顶部,然后使用js监听滚轮滚动事件, 设置nav显示到浏览器顶部。 js代码如下:
(function ($) {
// Show the navbar when the page is scrolled up
var MQL = 992;
//primary navigation slide-in effect
if ($(window).width() > MQL) {
var headerHeight = $('#mainNav').height();
$(window).on('scroll', {
previousTop: 0
},
function () {
var currentTop = $(window).scrollTop();
//check if user is scrolling up
if (currentTop < this.previousTop) {
//if scrolling up...
if (currentTop > 0 && $('#mainNav').hasClass('is-fixed')) {
$('#mainNav').addClass('is-visible');
}
// when scrolling to top
else {
$('#mainNav').removeClass('is-visible is-fixed');
}
} else if (currentTop > this.previousTop) {
//if scrolling down...
$('#mainNav').removeClass('is-visible');
if (currentTop > headerHeight && !$('#mainNav').hasClass('is-fixed')) $('#mainNav').addClass('is-fixed');
}
this.previousTop = currentTop;
});
}
})(jQuery); // End of use strict
3.CSS
css 样式如下:
/* Navigation Start*/
#mainNav {
position: absolute;
border-bottom: 1px solid #e9ecef;
background-color: white;
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
#mainNav .navbar-brand {
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-weight: 800;
color: #343a40;
}
#mainNav .navbar-toggler {
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 12px;
font-weight: 800;
padding: 13px;
text-transform: uppercase;
color: #343a40;
}
#mainNav .navbar-nav>li.nav-item>a {
font-size: 12px;
font-weight: 800;
letter-spacing: 1px;
text-transform: uppercase;
}
@media only screen and (min-width: 992px) {
#mainNav {
border-bottom: 1px solid transparent;
background: transparent;
}
#mainNav .navbar-brand {
padding: 10px 20px;
color: #fff;
}
#mainNav .navbar-brand:focus,
#mainNav .navbar-brand:hover {
color: rgba(255, 255, 255, 0.8);
}
#mainNav .navbar-nav>li.nav-item>a {
padding: 10px 20px;
color: #fff;
}
#mainNav .navbar-nav>li.nav-item>a:focus,
#mainNav .navbar-nav>li.nav-item>a:hover {
color: rgba(255, 255, 255, 0.8);
}
}
@media only screen and (max-width: 992px) {
#mainNav {
transition: background-color 0.5s;
}
}
@media only screen and (min-width: 992px) {
#mainNav {
transition: background-color 0.5s;
transform: translate3d(0, 0, 0);
-webkit-backface-visibility: hidden;
}
#mainNav.is-fixed {
position: fixed;
top: -67px;
transition: transform 0.2s;
border-bottom: 2px solid white;
background-color: rgba(255, 255, 255, 0.9);
}
#mainNav.is-fixed .navbar-brand {
color: #212529;
}
#mainNav.is-fixed .navbar-brand:focus,
#mainNav.is-fixed .navbar-brand:hover {
color: #0085A1;
}
#mainNav.is-fixed .navbar-nav>li.nav-item>a {
color: #212529;
}
#mainNav.is-fixed .navbar-nav>li.nav-item>a:focus,
#mainNav.is-fixed .navbar-nav>li.nav-item>a:hover {
color: #0085A1;
}
/* 当js事件触发时,给nav增加 is-visible样式,效果是显示出nav
其效果就相当于:
postion: fixed;
top:0;
但是transform 这里使用的是GPU渲染会看起来更加流畅。
*/
#mainNav.is-visible {
transform: translate3d(0, 100%,0);
}
}
/* Navigation End*/
好了以上就是本次功能实现的全部代码了。
4.效果图
置顶时
下滑时
上滑时
- HTML 教程
- HTML 简介
- html div 标签介绍
- html span 标签介绍
- html a 超链接标签
- HTML Br换行标签介绍
- HTML P段落标签介绍
- HTML br与p标签区别
- Html H 标题标签
- html px em pt长度单位
- HTML form 标签
- HTML radio 单选框
- HTML B 加粗标签
- HTML strong加粗粗体标签
- HTML em 强调标签
- HTML i 斜体标签
- HTML u下划线标签
- HTML s 删除线标签
- Html img 图片标签
- Html上标注sup与下标注sub标签
- HTML nobr 禁止换行标签
- HTML hr 水平线标签
- HTML label 标签
- HTML input 标签
- HTML textarea 标签
- HTML select下拉列表标签
- HTML checkbox 多选框
- HTML font color 标签
- HTML iframe 框架标签
- HTML Table 表格
- HTML dl dt dd 标签
- HTML ol li有序列表标签
- HTML ul li 无序列表标签
- HTML 注释
- CSS 教程
- CSS 简介
- CSS 语法
- CSS Id 和 Class选择器
- CSS 样式的创建
- CSS background 背景介绍
- CSS 文本样式
- CSS font 字体
- CSS A 链接
- CSS ul ol列表样式
- CSS TABLE 样式
- CSS 框模型
- CSS border 边框
- CSS Outlines 轮廓
- CSS 外边距 Margin
- CSS Padding 内边距
- CSS 分组和嵌套选择器
- CSS 尺寸 (Dimension)
- CSS Display 属性
- CSS Position 定位
- CSS Float 浮动
- CSS 水平对齐(Horizontal Align)
- CSS 组合选择符
- CSS 伪类
- CSS 伪元素
- CSS 导航栏
- CSS 下拉菜单
- CSS 图片廊
- CSS 图像透明/不透明
- CSS sprite 图像拼合技术
- CSS 媒体类型
- CSS 属性选择器
- CSS 实例
- then, catch, finally如何影响返回的Promise实例状态
- 第016课 Nand Flash操作原理及裸机程序分析
- 第20课 SPI协议详解及裸机程序开发分析
- 第017课 LCD原理详解及裸机程序分析
- 微信小程序:一文彻底搞懂openid和unionid
- MySQL 最佳实践:程序端连接池配置
- Java获取CPU序列号
- 第018课 ADC和触摸屏硬件原理详解及裸机编程
- Mysql优化概述及其压力测试工具
- 第019课 I2C协议详解及裸机程序分析
- Redis适配采坑记
- 笔记 GWAS 操作流程6-2:手动计算GWAS分析中的GLM和Logistic模型
- 记录一次生产环境中Redis内存增长异常排查全流程!
- 移植tslib库出现selected device is not a touchscreen I understand的解决方法
- 【PHP】使用dirname(__FILE__)把目录定在需要引用的文件目录下