基础业务:滚动到指定位置导航固定(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>利用 ...
随机推荐
- CentOS添加并挂载新硬盘
1.查看当前硬盘使用状况: [test@master Desktop]$ df -hFilesystem Size Used Avail Use% Mounted on/dev/sda2 13G 12 ...
- display:inline、block、inline-block的区别(摘抄)
display:inline.block.inline-block的区别 display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都 ...
- JS基础-组成
类型 前缀 类型 实例 数组 a Array aItems 布尔值 b Boolean bIsComplete 浮点数 f Float fPrice 函数 fn Function fnHandler ...
- 0CO_PC_ACT_10 不能提取NV类别的数据
今天用 BW 标准数据源 0CO_PC_ACT_10 提取数据时,发现物料有一项数据[没有被分摊]无法取到. 根据SAP的解释,此项不在后台存数,通过前台动态生成. For the virtual c ...
- 为什么继续选择DELPHI?
已经钻DELPHI很深了,当然现在DELPHI是过了最辉煌的时代.但为什么要继续下去,而不转向其它的?这是不是死脑筋? 我看了一下C#的LINQ的产生,然后又被实体框架所代替.思考了一下: 1)LIN ...
- 【Hive一】Hive安装及配置
Hive安装及配置 下载hive安装包 此处以hive-0.13.1-cdh5.3.6版本的为例,包名为:hive-0.13.1-cdh5.3.6.tar.gz 解压Hive到安装目录 $ tar - ...
- JavaWeb基础—VerifyCode源码
package com.jiangbei.verifycodeutils; import java.awt.BasicStroke; import java.awt.Color; import jav ...
- mfc 函数模板
函数模板的使用 一. 函数模板的使用 使用函数模板可以简化 形参个数相同,而类型不同的函数. template<typename T> //可以用class替换typename int m ...
- 【LG3246】[HNOI2016]序列
[LG3246][HNOI2016]序列 题面 洛谷 题解 60pts 对于每个位置\(i\),单调栈维护它往左第一个小于等于它的位置\(lp_i\)以及往右第一个小于它的位置\(rp_i\). 那么 ...
- CF GYM 101196 G That’s One Hanoi-ed Teacher
That’s One Hanoi-ed Teacher 链接 题意: 询问一个汉诺塔的状态是否是最优的状态,如果是,询问还有多少步到最终状态. 分析: 考虑汉诺塔是怎么操作的,首先是考虑F(i)是有i ...