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

相关文章

来自专栏跟着阿笨一起玩NET

[C#]工具类—FTP上传下载

  不错的文章:http://www.cnblogs.com/greatverve/archive/2012/03/03/csharp-ftp.html

1201
来自专栏DT乱“码”

简单的考勤系统

连接数据库类 package com.lianrui.it; import java.sql.Connection; import java.sql.Driv...

3499
来自专栏CreateAMind

文字描述生成视频的开源项目

Tensorflow implementation for the paper Attentive Semantic Video Generation usin...

1132
来自专栏互联网开发者交流社区

WinForm之窗体应用程序

1863
来自专栏闻道于事

商城项目整理(三)JDBC增删改查

商品表的增加,修改,删除,订单表的增加,确认,用户表的查看,日志表的增加,查看 商品表建表语句: 1 create table TEST.GOODS_TABL...

5485
来自专栏听雨堂

想修改CSS

      下载了一个“通用”的CSS文件,本来想偷懒的,结果发现有问题,就是它用的颜色是变量定义的,无法识别。我又找不到在哪里可以定义。 BODY{     ...

20410
来自专栏c#开发者

C# : row-clickable GridView and get and set gridview rows using JavaScript

Complete C# code: ---------------- using System; using System.ComponentModel; ...

2996
来自专栏码匠的流水账

聊聊spring cloud的AbstractLoadBalancingClient

本文主要研究一下spring cloud的AbstractLoadBalancingClient

842
来自专栏c#开发者

jquery easyui datagrid mvc server端分页排序筛选的实现

1自定义一个ModelBinder public class filterRule { public string field { g...

4189
来自专栏xingoo, 一个梦想做发明家的程序员

windows程序设计-第四章 system1.c

/*---------------------------------------------------- SYSMETS1.C -- System M...

23710

扫码关注云+社区