基础业务:滚动到指定位置导航固定(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,嗯,勉强合格。

优秀一点的同学会说还有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的兼容性不太强。

如果我们在面试中能说出这样的一个属性及其相关说明,并能给出它具体的业务场景的话,那就相当的不错了。

原文地址:https://www.cnblogs.com/isLiu/p/8683801.html

时间: 2024-10-09 03:08:51

基础业务:滚动到指定位置导航固定(CSS实现)的相关文章

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

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>js滚动到指定位置导航栏固定顶部</title> <style type="text/css"> body{height: 2500px; margin: 0; padding: 0;} .banner{height: 250px; width: 100%; bac

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

最近整理一下之前做的一个项目,把滚动条动态固定顶部的代码整理出来和大家分享,上代码 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>js滚动到指定位置导航栏固定顶部</title> 6 <style type="text/css"> 7 body{height: 2500px; margin:

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

scroll 滚动到指定位置触发事件:$(function(){ $(window).scroll(function() { var s =$(window).scrollTop(); if (s>=782) {//782是导航条离页面顶部的距离(px) $('.nav').addClass('fixednav'); } else{ $('.nav').removeClass('fixednav'); } });}); .fixednav{ position:fixed; top:0px; le

微信小程序点击滚动到指定位置

公司项目要做一个类似微信通讯录导航的效果,点击右侧字母页面滚动到相应位置. 因为微信小程序没有dom概念,所以不能使用锚点,也不能直接获取对应字母相对页面的偏移位置.此时只能使用小程序创建对象实例的API获取节点信息: let query = wx.createSelectorQuery().in(this); query.selectViewport().scrollOffset() query.select("#Nav").boundingClientRect(); query.s

IOS学习之UITableView滚动到指定位置

IOS学习之UITableView滚动到指定位置 方法很简单: - (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated 有些需要注意的地方: 如果在reloadData后需要立即获取tableview的cell.高度,或者需要滚动tableview,那么,直接在reloadDa

js将滚动条滚动到指定位置的方法

代码如下(主要是通过设置Location的hash属性): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <

监听页面滚动及滚动到指定位置

两种监听页面滚动的方法 一.原生js通过window.onscroll监听window.onscroll = function() {//为了保证兼容性,这里取两个值,哪个有值取哪一个//scrollTop就是触发滚轮事件时滚轮的高度var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;console.log("滚动距离" + scrollTop);} 二.Jquery通过$(wind

js 页面滚动到指定位置

项目中,本来想通过点击左侧列表让页面进行快速导航(根据 id="item" 和 a标签的 href 属性[<a href="#item"></a>]),不过滚动后的页面一直是顶在浏览器页面顶部的,不符合项目需求,所以就通过 js 代码让页面进行指定位置滚动,代码如下: $(".left_nav>ul>li").click(function () { var n = parseInt($(this)[0].id)

DIV内滚动条滚动到指定位置

相对浏览器,将指定div滚到到指定位置,其用法如下: $("html,body").animate({scrollTop: $(obj).offset().top},speed); ps:obj是需要定位的对象,speed是滚动的速度 然而如果需要相对某一个容器(称之div1),将其内部的div2滚动到相对div1的指定位置,用法如下: $("div1").animate({scrollTop: $("div2").position().top}