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 条评论
登录 后参与评论

相关文章

来自专栏数据科学与人工智能

【数据】常用API接口汇总

下面列举了100多个国内常用API接口,并按照 笔记、出行、词典、电商、地图、电影、即时通讯、开发者网站、快递查询、旅游、社交、视频、天气、团队协作、图片与图像...

9277
来自专栏黑白安全

黑客盒子丨HackBox.

592
来自专栏BestSDK

谷歌Flutter跨平台应用开发SDK,迎来首个发行预览版本

Google 刚刚放出了自家 Flutter 跨平台移动应用开发 SDK 的首个发布预览版本(Release Preview 1),如果你是一位需要同时兼顾 i...

1313
来自专栏极乐技术社区

小程序一周报 | 新注册公众号将没有留言功能

微信团队为进一步规范公众平台生态环境,后续新注册的账号将没有留言功能,「最近三个月内注册,但尚未使用留言功能的账号将被收回留言权限。」

820
来自专栏小白课代表

手机必备 | 听歌识曲APP——Shazam

1075
来自专栏数据库新发现

好消息---Gmail增加免费POP3支持

Google网页数扩至80亿 增加免费POP3支持 (2004.11.12)   来自:ZDNET    在发布到Google公司blo...

694
来自专栏Youngxj

腾讯云学生机加4元升级2核2G

2203
来自专栏*坤的Blog

史融资2.5亿的“自主国产”红芯浏览器,其实是个套壳Chrome

今天早上看到朋友发的浏览器图片,感觉很好奇,然后就看了下,感觉文章还不错,就转发了下,然后下载浏览器着实花了不小心思,最后文末添加了红芯浏览器转存在蓝奏云盘的下...

732
来自专栏大数据钻研

11 个 HTML5 动画工具

如今,在Web开发中最为流行的语言就是HTML5了,它帮助开发者将多样化的内容展现给用户。在过去两三年中,我们共同看到了HTML5的发展,它逐渐在网络的世界中积...

3496
来自专栏Phoenix的Android之旅

你的手机摄像头可能正在被监控

昨天晚上有用户Post了这么一张图, 他在使用 Telegram 聊天app的过程中没有打开摄像头拍照,但是摄像头却自己弹了出来。

712

扫描关注云+社区