最近公司做的业务都是使用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,嗯,勉强合格。

优秀一点的同学会说还有inheritinitialunset,嗯不错,挺好,还有吗?

这时候你赶紧趁着趁着面试官说话的时机百度了一下,发现还有一个值,sticky,你装作思考了一下说还有一个sticky,面试管觉得你很不错,那你在业务种使用过这个值吗?GG。

sticky,就叫它粘性定位吧,粘性定位是基于position:relativeposition:fixed两者之间的,为什么说介于两者之间呢?粘性定位根据一个阈值来决定,超出阈值之前采用相对定位,超出阈值之后就是fixed定位了。

那这个阈值又是什么呢?就是toprightbottomleft四种之一,也只有这四种之一,才能让粘性定位生效,否则表现为相对定位

相对定位和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实现)的更多相关文章

  1. js-滚动到指定位置导航栏固定顶部

    最近整理一下之前做的一个项目,把滚动条动态固定顶部的代码整理出来和大家分享,上代码 <!DOCTYPE html> <html> <head> <meta c ...

  2. Vue如何引入jquery实现平滑滚动到指定位置效果

    在以往的做法里首选jquery的animate实现,但是Vue里并没有这个方法.如何在Vue项目中实现点击导航平滑滚动到指定位置,为了这效果我是快要崩溃了,上网查阅了很久发现并没有真正意义上解决这个问 ...

  3. scroll 滚动到指定位置触发事件 and 点击一按钮/链接让页面定位在指定的位置

    scroll 滚动到指定位置触发事件:$(function(){ $(window).scroll(function() { var s =$(window).scrollTop(); if (s&g ...

  4. 自定义ScrollViewer的Touch事件--触摸上下移动ScrollViewer滚动到指定位置

    double mPointY;//触摸点的Y坐标 double mOffsetY;//滚动条当前位置 bool mIsTouch = false;//是否触摸 //触摸事件 private void ...

  5. 通过scrollTop,使子元素滚动至指定位置

    想实现这样的一个功能,点击子元素,让元素滚动至指定位置,怎么实现呢? 在代码实现之前,先了解下相关关键点. 1.scrollHeight 属性 通过 scrollHeight 属性可获得子元素的滚动高 ...

  6. js滚动到指定位置

    序言:在网络上百度,关键字:“js div滚动到指定位置”,结果基本上大同小异!各种大神都给我们总结出来了四种滚动到指定位置的办法,可惜再下愚钝,每个都不会用,所以写了一个超级简单的方法来使初学者一看 ...

  7. ios开发之--令UITableView滚动到指定位置

    这个应用场景还是挺多的,代码如下: //获取到需要跳转位置的行数 NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow: inSect ...

  8. selenium webdriver——JS滚动到指定位置

    1.DOM滚动方法 1.scrollIntoView(alignWithTop)  滚动浏览器窗口或容器元素,以便在当前视窗的可见范围看见当前元素.如果alignWithTop为true,或者省略它, ...

  9. 利用jquery制作滚动到指定位置触发动画

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>利用 ...

随机推荐

  1. Kafka设计解析(十五)Kafka controller重设计

    转载自 huxihx,原文链接 Kafka controller重设计 目录 一.Controller是做什么的 二.Controller当前设计 三.Controller组成 四.Controlle ...

  2. 实现Redis Cluster并实现Python链接集群

    目录 一.Redis Cluster简单介绍 二.背景 三.环境准备 3.1 主机环境 3.2 主机规划 四.部署Redis 4.1 安装Redis软件 4.2 编辑Redis配置文件 4.3 启动R ...

  3. laravel 5.5 《电商实战 》基础布局

    我们需要为我们的项目构建一个基础的页面布局,布局文件统一存放在 resources/views/layouts 文件夹中,布局涉及的文件如下: app.blade.php —— 主要布局文件,项目的所 ...

  4. Delphi的idhttp报508 Loop Detected错误的原因

    一般是访问https时才出现“508 Loop Detected”,idhttp+IdSSLIOHandlerSocketOpenSSL,这个在上篇文章中讲过了. 由于该问题网上资料极少,连外文资料也 ...

  5. WPF MessageContract DataContract

    个人理解: DataContract:都序列化在消息体内. MessageContract :能够定义数据字段的序列化位置,比如在头部或者在消息体内.

  6. 生死系列--SongXingZhi

    SongXingZhi,我上中专时的同学,任劳动委员,湖北随州人.其实在上学以及毕业后,我们俩没什么交往,也没说过几句话. 印象比较深的一次是在上什么课时,老师拖堂了 ,他直接从课桌上翻过来,从后门出 ...

  7. 课下测试补交(ch01、ch02、ch07)

    课下测试补交(ch01.ch02.ch07) 课下测试ch01 1.Amdahl定律说明,我们对系统的某个部分做出重大改进,可以显著获得一个系统的加速比.(B) A . 正确 B . 错误 解析:课本 ...

  8. 一维码Code 39简介及其解码实现(zxing-cpp)

    一维码Code 39:由于编制简单.能够对任意长度的数据进行编码.支持设备广泛等特性而被广泛采用. Code 39码特点: 1. 能够对任意长度的数据进行编码,其局限在于印刷品的长度和条码阅读器的识别 ...

  9. org.springframework.mail.MailSendException: Failed messages: javax.mail.SendFailedException: Invalid Addresses

    一.问题分析 org.springframework.mail.MailSendException: Failed messages: javax.mail.SendFailedException: ...

  10. 2018年美国大学生数学建模竞赛(MCM/ICM) E题解题思路

    任务一就是让大家去做个基本的评价,是典型的评价类问题,所以应该按照 指标+方法的步骤去做,首先就是寻找国家脆弱性的相关概念,然后选择影响国 家脆弱性的指标,如气候变化,经济发展,政治状况等等,再就是构 ...