JS 吸顶导航,告别“回到顶部”

当我们浏览页面篇幅较大,浏览过半的时候想回到导航位置,只能通过往回滚动或通过”回到顶部”重新滚动到导航位置,这样的操作显得繁琐与不便。于是便有了吸顶式导航的交互方式,吸顶条导航最大的好处是将最常用或者设计者最愿意让用户看到的内容、功能经常保持在用户面前,为用户提供了极大的便利与交互体验。

本文主要内容

1、吸顶导航是什么

2、吸顶导航的实现方法

3、小结

1、吸顶条导航是什么

如图:

吸顶导航栏的初始位置一般是靠近在页面的顶部位置,但是又存在一定距离,通常这块区域放置最为醒目或者重要元素的地方,如Banner图。

当页面向下滚动时超过了吸顶导航的初始位置时,需要把吸顶导航栏固定在窗口顶部,一般吸顶导航栏还可以替换成文章标题栏,搜索框、tab条等等,例如百度糯米,天猫,淘宝最为常用。它们共同点是在内容或者功能上比较重要,但又不是最重要的元素,最重要的一般会放置于顶部。明白了吸顶导航条的基本效果,下面写个简单的demo吧。

2、吸顶导航的实现方法

一、样式结构搭建

考虑到触发吸顶功能,需要为导航条设置触发后的样式。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <style type="text/css">
        body {
            padding: 0;
            margin: 0;
        }
        #nav {
            width: 100%;
            height: 60px;
            background: #39f;
            color: #fff;
            line-height: 60px;
            text-align: center;
            padding: 0;
            margin: 0;
            list-style: none;
        }
        #nav li{
            float: left;
            width: 25%;
            height: 60px;
        }
        .fix {
            position: fixed;
            top: 0;
            left: 0;
        }
    </style>
    <body>
        <div class="wrap">
            <h1>H5-学堂</h1>
            <p>HTML5学堂是一个热爱H5的讲师组成的组织,致力于构建一个前端、HTML5的分享平台,能够给学生提供一些资料,也为广大前端爱好者提供一个分享平台,其中涉及到的基本知识,JS底层知识,JS底层知识,面试真题、相关技术、未来发展等。</p>
            <ul id="nav">
                <li>HTML5学堂</li>
                <li>HTML5微博</li>
                <li>HTML5贴吧</li>
                <li>HTML5微信</li>
            </ul>
            <div class="con">
                <p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
                <p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
<p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
                <p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
<p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
                <p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
<p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
                <p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
<p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
                <p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
<p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
                <p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
<p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
                <p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
<p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
                <p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
<p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
                <p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
<p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
                <p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
<p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
                <p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
<p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
                <p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
<p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
                <p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
<p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
                <p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
<p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
                <p>告别“回到顶部”,如影随行的“吸顶式导航”</p>
            </div>
        </div>
    </body>
</html>

ps:内容区要够长,不然无法滚动。

二、吸顶功能添加

1.实现思路是监听 scroll 事件,判断当前页面的滚动位置,当滚动距离大于导航条距顶部的距离时,为导航条采用窗口定位。

2.与“回到顶部“的实现方法一样,但是会发现实现吸顶功能时,到了临界位置时,页面会抖动一下,因为当导航条fixed出去,下部内容填补了导航条离开的位置。抢占了导航条的位置,所以抖动了一下。此处我们设置一个占位符,守住导航条的位置

<script>
    var tit = document.getElementById('nav');
    // 占位符设置
    var rect = tit.getBoundingClientRect();//获得页面中导航条相对浏览器视窗的位置。
    var inseDiv = document.createElement('div');
    tit.parentNode.replaceChild(inseDiv, tit);
    inseDiv.appendChild(tit);
    inseDiv.style.height = rect.height + 'px';
    // 获取导航条距页面顶部的距离
    var titTop = tit.offsetTop;
    //设置滚动监听事件
    document.onscroll = function() {
            //获取当前滚动距离
            var btop = document.body.scrollTop || document.documentElement.scrollTop;
            //如果滚动距离大于导航条距顶部距离
            if (btop > titTop) {
                    //为导航条设置fixed
                    tit.className = "clearfix fix";
            }else {
                    //移出fixed
                    tit.className = "clearfix";
            }
    }
</script>

实现效果:

3、小结

吸顶导航的交互方式极大的提高了用户体验,是电商网站网站最常用的交互效果之一,希望本文能给大家带来一些帮助。

原文发布于微信公众号 - HTML5学堂(h5course-com)

原文发表时间:2016-12-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python小屋

改造Python中文拼音扩展库pypinyin补充自定义声母全过程

问题要从昨天说起,应根球老师发给我一个代码问可能是啥原因,如下: ? 该函数的第二个参数3含义为只保留声母,为啥“应”的声母丢了呢? 因为当时正是课间休息,一会...

3628
来自专栏企鹅号快讯

前端三大框架vue,angular,react大杂烩

摘要:从angular的诞生独步天下,到现在三大框架平分天下,基本形势已经趋于稳定。每一个框架从诞生到受欢迎,都有其特定的原因和背景。不同的开发者选择时,也是依...

2219
来自专栏FreeBuf

基于时延的盲道研究:受限环境下的内容回传信道

在一次漏洞赏金活动中,挖到个命令注入的洞,我先以时延作为证明向厂商提交该漏洞,厂商以国内网络环境差为由(的确得翻墙)拒收,几次沟通,告知若我能取回指定文件 se...

885
来自专栏申龙斌的程序人生

零基础学编程013:import让你飞起来

在《零基础学编程012:画出复利曲线图》这篇文章中只需6行语句就画出复利曲线图,前两行语句全是import。 import numpy as np import...

2644
来自专栏何俊林

【独家】一种手机上实现屏幕录制成gif的方案

前言:一直以来,很多做apk演示效果时,通过图片的方式,总是没有看起来那样炫丽和灵动。如果能在手机上,直接通过录制屏幕,而变成gif。那可是省去了好多时间。进而...

1887
来自专栏ml

JavaWeb学习之环境搭建

 1. HTML(Hyper Text Markup Language) , 超文本标记语言。 HTML文件的后缀名一般是: .htm , .html 表单(f...

2513
来自专栏河湾欢儿的专栏

html5标签

什么是html5? 仅仅是狭义的概念。h5草案前身叫做web application 由WHATWG组织编写,在2007年提交到了w3c,w3c起名叫做HTM...

561
来自专栏机器学习从入门到成神

Vue-router的配置以及实战(易错点)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

591
来自专栏知晓程序

开发 | 技术高人如何开发小程序?他们用这套方法

782
来自专栏分布式系统和大数据处理

HTML5触摸界面设计与开发

首先讲了移动端和电脑端的一些不同,讲到了viewport的概念和相关的虚拟像素、媒体查询,借助媒体查询来实现横屏、竖屏的区别显示。

693

扫码关注云+社区