爆改导航栏
▶
前期尝试
导航栏在页首时会隐藏,而阴影还会在。下面是简单粗暴地将阴影设为零的方法。
位置Blog\themes\fluid\source\css\_pages\_base\_widget\header.styl
1 | |
修改为0 0px 0px 0 rgba(0, 0, 0, 0.16), 0 0px 0px 0 rgba(0, 0, 0, 0.12)
导航栏变化原理
- 初始化:页面加载时,
registerNavbarEvent函数被调用,注册滚动事件监听器▶滚动事件监听器在
Blog\themes\fluid\source\js\events.js文件中,registerNavbarEvent函数实现了滚动位置检测:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26// 注册导航栏滚动事件
registerNavbarEvent: function() {
var navbar = jQuery('#navbar');
if (navbar.length === 0) {
return;
}
var submenu = jQuery('#navbar .dropdown-menu');
if (navbar.offset().top > 0) {
navbar.removeClass('navbar-dark');
submenu.removeClass('navbar-dark');
}
// 监听滚动事件
Fluid.utils.listenScroll(function() {
// 当滚动超过50px时添加毛玻璃效果类,否则移除
navbar[navbar.offset().top > 50 ? 'addClass' : 'removeClass']('top-nav-collapse');
submenu[navbar.offset().top > 50 ? 'addClass' : 'removeClass']('dropdown-collapse');
if (navbar.offset().top > 0) {
navbar.removeClass('navbar-dark');
submenu.removeClass('navbar-dark');
} else {
navbar.addClass('navbar-dark');
submenu.removeClass('navbar-dark');
}
});
// 其他代码...
} - 滚动检测:当用户滚动页面时,
listenScroll函数触发回调▶滚动监听在
Blog\themes\fluid\source\js\utils.js文件中,listenScroll函数实现了滚动事件的防抖处理:1
2
3
4
5
6
7// 监听滚动事件(带防抖)
listenScroll: function(callback) {
var dbc = new Debouncer(callback);
window.addEventListener('scroll', dbc, false);
dbc.handleEvent();
return dbc;
} - 类名切换:JavaScript 根据滚动位置(
navbar.offset().top > 50)添加或移除top-nav-collapse类 - 毛玻璃效果:CSS 检测到
top-nav-collapse类后,应用ground-glass函数实现毛玻璃效果 - 响应式变化:当滚动回到顶部时,移除
top-nav-collapse类,毛玻璃效果消失
关键参数
- 滚动阈值:50px(当滚动超过这个值时触发毛玻璃效果)
- 毛玻璃效果类:
top-nav-collapse(导航栏)和dropdown-collapse(下拉菜单) - 毛玻璃配置:
$navbar-glass-px:毛玻璃模糊像素$navbar-bg-color:导航栏背景颜色$navbar-glass-alpha:毛玻璃透明度
核心修改
在 Blog\themes\fluid\source\js\events.js 文件中:
- 实现平滑滚动效果:根据滚动位置计算滚动比例(0-1)
- 平滑改变毛玻璃透明度:滚动时不透明度从0逐渐增加
- 注释掉页首取消毛玻璃效果的代码:确保毛玻璃效果在整个滚动过程中保持
- 从配置文件自动获取主题色:
- 设置非线性滚动效果:修改系数为先慢后快的指数变化
1
2var exponent = 1.5; // 指数系数,大于1时实现开始慢后面快的效果
var nonlinearScrollRatio = Math.pow(scrollRatio, exponent);
▶
核心代码
1 | |
▶
动态获取主题色
1 | |
爆改导航栏
https://blog.zhaosn.top/blog/navbar_css/