基础业务:滚动到指定位置导航固定(CSS实现)
最近公司做的业务都是使用Vue、Element写的,涉及到的相应的基础业务像轮播、预加载、懒加载,都是使用
NPM上的工具来实现,原理和基础还是要有的,就来实现几个项目中常用到的业务。
经常见到这样的效果,导航在页面中间,当界面滚动到导航的时候,导航就变成了fixed布局。为了看效果,我加了边框。

刚开始,京东金融的注册登陆、还有下载App的导航在界面中部。当你滚动到导航的位置或者是再向下滚动的时候,导航就固定住了。

这就是大概效果,反之滚动回来的时候,导航还在界面中部。来实现一下吧。
JS实现
不难,首先记录最初导航的位置,然后监听scroll事件控制CSS就好了。说的简单,感觉做了整么长时间的前端,基础都快忘光了,做了好久才实现,其中都是基础不牢固惹的货,看来以后还是要注重基础。
话不多说,就是几行代码,优化就不做了。
methods: {
scrolls () {
var header = this.$refs.header.$el
var headerTop = header.offsetTop
window.onscroll = () => {
if (document.documentElement.scrollTop > headerTop)
header.style.position = 'fixed'
else
header.style.position = 'static'
}
}
},
mounted () {
this.scrolls()
}
对呀,这么简单,为啥还整了一篇随笔呢?别急,那你会用CSS实现吗?
CSS实现
面试时候有人会问,position有那几种值,你说:绝对的、相对的、fixed,能说出这些是不及格的。
那你想了想,哦对,还有static,嗯,勉强合格。
优秀一点的同学会说还有inherit、initial、unset,嗯不错,挺好,还有吗?
这时候你赶紧趁着趁着面试官说话的时机百度了一下,发现还有一个值,sticky,你装作思考了一下说还有一个sticky,面试管觉得你很不错,那你在业务种使用过这个值吗?GG。
sticky,就叫它粘性定位吧,粘性定位是基于position:relative和position:fixed两者之间的,为什么说介于两者之间呢?粘性定位根据一个阈值来决定,超出阈值之前采用相对定位,超出阈值之后就是fixed定位了。
那这个阈值又是什么呢?就是top、right、bottom、left四种之一,也只有这四种之一,才能让粘性定位生效,否则表现为相对定位。
相对定位和fixed定位,拿不就完美的解决了我们的问题了吗?没错。来试试吧。
.header {
color: #666;
height: 100px;
line-height: 100px;
position: sticky;
top: 0px;
left: 0px;
right: 0px;
font-size: 32px;
background: #fff url(//m.jr.jd.com/spe/qyy/main/images/jr-logo.png) center center no-repeat;
background-size: auto 50%;
z-index: 100;
border: 1px solid #999;
}
看看效果:

和之前使用JS实现的没什么区别,不过有句话说的好,能用CSS的话就别用JS,从性能上来考虑还是粘性定位更好一点。
注意了:并且 top 和 bottom 同时设置时,top 生效的优先级高,left 和 right 同时设置时,left 的优先级高。
不过美中不足的是:position:sticky的兼容性不太强。
如果我们在面试中能说出这样的一个属性及其相关说明,并能给出它具体的业务场景的话,那就相当的不错了。
基础业务:滚动到指定位置导航固定(CSS实现)的更多相关文章
- js-滚动到指定位置导航栏固定顶部
最近整理一下之前做的一个项目,把滚动条动态固定顶部的代码整理出来和大家分享,上代码 <!DOCTYPE html> <html> <head> <meta c ...
- Vue如何引入jquery实现平滑滚动到指定位置效果
在以往的做法里首选jquery的animate实现,但是Vue里并没有这个方法.如何在Vue项目中实现点击导航平滑滚动到指定位置,为了这效果我是快要崩溃了,上网查阅了很久发现并没有真正意义上解决这个问 ...
- scroll 滚动到指定位置触发事件 and 点击一按钮/链接让页面定位在指定的位置
scroll 滚动到指定位置触发事件:$(function(){ $(window).scroll(function() { var s =$(window).scrollTop(); if (s&g ...
- 自定义ScrollViewer的Touch事件--触摸上下移动ScrollViewer滚动到指定位置
double mPointY;//触摸点的Y坐标 double mOffsetY;//滚动条当前位置 bool mIsTouch = false;//是否触摸 //触摸事件 private void ...
- 通过scrollTop,使子元素滚动至指定位置
想实现这样的一个功能,点击子元素,让元素滚动至指定位置,怎么实现呢? 在代码实现之前,先了解下相关关键点. 1.scrollHeight 属性 通过 scrollHeight 属性可获得子元素的滚动高 ...
- js滚动到指定位置
序言:在网络上百度,关键字:“js div滚动到指定位置”,结果基本上大同小异!各种大神都给我们总结出来了四种滚动到指定位置的办法,可惜再下愚钝,每个都不会用,所以写了一个超级简单的方法来使初学者一看 ...
- ios开发之--令UITableView滚动到指定位置
这个应用场景还是挺多的,代码如下: //获取到需要跳转位置的行数 NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow: inSect ...
- selenium webdriver——JS滚动到指定位置
1.DOM滚动方法 1.scrollIntoView(alignWithTop) 滚动浏览器窗口或容器元素,以便在当前视窗的可见范围看见当前元素.如果alignWithTop为true,或者省略它, ...
- 利用jquery制作滚动到指定位置触发动画
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>利用 ...
随机推荐
- Servlet 处理请求
一:Servlet 处理请求也是通过request来进行处理,类似于python. get请求通过request.getparameter("key");key为前端传过来的key ...
- 最近邻规则分类(k-Nearest Neighbor )机器学习算法python实现
综述 Cover和Hart在1968年提出了最初的近邻算法 是分类(classification)算法 输入基于实例的学习(instance-based learning),惰性学习(lazy lea ...
- iOS Class结构分析
objc_class结构体 类在OC中是objc_class的结构体指针 typedef struct objc_class *Class; 在objc/runtime.h中objc_class结构体 ...
- 十七、S3C2440 音频解码芯片WM8976声卡驱动移植、madplay测试
学习目标:1. WM9876接口和工作原理:2. WM9876驱动移植:3. WM9876应用测试:4. 问题总结 1. WM9876接口和工作原理 本节使用了JZ2440开发板移植WM9876驱动 ...
- CTF-i春秋网鼎杯第四场部分writeup
CTF-i春秋网鼎杯第四场部分writeup 因为我们组的比赛是在第四场,所以前两次都是群里扔过来几道题然后做,也不知道什么原因第三场的题目没人发,所以就没做,昨天打了第四场,简直是被虐着打. she ...
- 基于BM3803处理器平台的PCI软硬件调试问题汇总(持续更新中)
一:相关基本配置: FPGA: XILINX XC5VFX130T-1FFG1738 PCI接口部分使用XILINX提供的pci32_v4_8硬核:PCI控制器由FPGA逻辑实现,主要完成PCI设备 ...
- Oracle 在 多个Virtualbox 虚拟机间 跨不同物理宿主机进行通信
因为单位网络管理的原因,不太方便使用 Virtualbox 的Bridge Adapter 模式,故此欲采用NAT模式,不对外不暴露虚拟机IP. 但是此时会有一个问题:采用NAT模式后,在通常情况下, ...
- 做题记录 To 2019.2.13
2019-01-18 4543: [POI2014]Hotel加强版:长链剖分+树形dp. 3653: 谈笑风生:dfs序+主席树. POJ 3678 Katu Puzzle:2-sat问题,给n个变 ...
- Kubernetes学习之路(三)之Mater节点二进制部署
K8S Mater节点部署 1.部署Kubernetes API服务部署 apiserver提供集群管理的REST API接口,包括认证授权.数据校验以及集群状态变更等. 只有API Server才能 ...
- [BZOJ4484][JSOI2015]最小表示[拓扑排序+bitset]
题意 给你一个 \(n\) 个点 \(m\) 条边的 \(\rm DAG\) ,询问最多能够删除多少条边,使得图的连通性不变 \(n\leq 3\times 10^4\ ,m\leq 10^5\) . ...