首页>建站相关>小巧的js悬浮导航插件

小巧的js悬浮导航插件

headroom.js是一个轻量级、高性能的js小工具(不依赖任何工具库!),它能在页面滚动时做出响应。此页面顶部的导航条就是一个鲜活的案例,当页面向下滚动时,导航条消失,当页面向上滚动时,导航条就出现了。headroom.js不仅能够响应鼠标滚轮事件,在移动端也能够良好的运行。

headroom工作原理

简单来说,headroom.js 只是为需要响应滚动事件的页面元素增加或删除一些css类,比如在本博客中,headroom.js会实现这样一套动作:

<!-- 初始状态的类名 -->
<header class="animated headroom--top headroom--not-bottom">
<!-- 上滚至顶部 -->
<header class="animated headroom--not-bottom slideDown headroom--top">
<!-- 上滚至触发导航条下降 -->
<header class="animated headroom--not-top headroom--not-bottom slideDown">
<!-- 下滚至触发导航条隐藏 -->
<header class="animated headroom--not-top headroom--not-bottom slideUp">
<!-- 下滚至底部 -->
<header class="animated headroom--not-top slideUp headroom--bottom">

通过为css类设置不同的样式,当页面向上或向下滚动时,我们就可以控制导航条的显示与隐藏,甚至为它实现一个动画特效。

headroom的用法

首先需要在页面的head部分引用headroom.js,只需要在head部分添加如下语句就可以了,这里作者引用了七牛的静态资源:

<script src="https://cdn.staticfile.org/headroom/0.12.0/headroom.min.js"></script>

将需要浮动的导航条的id名称修改为header,当然也可以选择改动下面的程序,将getElementById(“header”)语句中的id替换为实际站点导航元素的id,然后为站点添加如下的js语句:

/*========
事件处理函数
========*/
function addLoadEvent(func){
    var oldonload = window.onload;
    if (typeof window.onload != 'function'){
        window.onload = func;
    } else {
        window.onload = function(){
        oldonload();
        func();
        }
    }
}
/*========
导航栏动作
========*/
function headerAction() {
    header = new Headroom(document.getElementById("header"), {
        tolerance: 5,
        offset : 205,
        classes: {
            initial: "animated",
            pinned: "slideDown",
            unpinned: "slideUp"
        }
    });
    header.init();
}

addLoadEvent(headerAction);

如果添加无误的话,此时目标元素已经可以响应滚动事件实时变换类名了,但是因为没有为其设置css,所以视觉上暂时并没有什么变化。

添加一些css

.animated {
    animation-duration: .6s;
    animation-fill-mode: both;
}
.animated.slideUp {
    animation-name: slideUp;
}
.animated.slideDown {
    animation-name: slideDown;
}
@keyframes slideDown{0%{transform:translateY(-55px)}100%{transform:translateY(0)}}
@keyframes slideUp{0%{transform:translateY(0)}100%{transform:translateY(-55px)}}

因为本博客的导航高度仅50像素,所以这里的translateY设置为了55像素,css的参数可以根据自己的实际需求做相应的更改。

headroom实例的可用方法

因为呼出了移动端菜单,或者弹出了一个优先的窗口,希望暂时停止菜单栏滚动的时候,headroom也提供了解决相应问题的方法:

  • init():实例化一个对象;
  • destroy(): 销毁一个实例,移除事件监听器和任何添加的类;
  • pin(): 强制设置 headroom 实例的状态为 pinned;
  • unpin(): 强制将 headroom 实例的状态设置为 unpinned;
  • freeze():冻结空间实例的状态(固定或取消固定),不再响应滚动事件;
  • unfreeze(): 恢复响应滚动事件。

headroom的相关站点

headroom官网(中文版本)
headroom官网(英文版本)

标签: javascript

移动端可扫我直达哦~

推荐阅读

javascript 2023-10-13

用jquery取代a链接的title说明文字

站点的标签页原来是类似下图左侧的,在标签后用括号的形式展示了文章数量,边栏本来就小,加了数字后感觉内容变长,也有点影响标签文字的识别,就想着改成下图右侧的形式。记录一下原来生成含数字标签的代码,方便以后修改时的查询:<?php ...

建站相关 javascript

javascript 2023-10-11

js正则表达式的匹配与替换操作

利用exec()可以提取到某一段字符串中的指定的值,比如有下面这样一行字符串:a='-aaaa-bbbb-cccc-';想要分别提取其中的连续的字符,即“aaaa”、“bbbb”、“cccc”,书写正则表达式如下,并利用exec()函...

建站相关 javascript

javascript 2023-10-09

双栏多栏主题图片的lazyload问题

想为全站添加lazyload效果,这样在图片加载成功后会得到一个渐变显示的效果,看起来酷酷的。使用jquery的lazyload老牌插件,先写的js效果,后添加的模块,左边栏的图片加载的好好的,等到右边栏输出缩略图时,就出现了问题。l...

建站相关 javascript

javascript 2023-09-27

php如何传递数据给前端的javascript

尝试写主题的时候遇到了需要利用后台的设置数据去改变前端javascript设置的需求,比如后台设置一个幻灯的轮播速度为“5000”毫秒,需要将这个数据传递给js插件“slidejs”。最初的做法是利用php直接输出一段标签,类似下面这...

建站相关 javascript

javascript 2023-05-28

利用js获取当前页面的域名与网络协议等信息

浏览器会在用户有历史搜索记录之后自动弹出一些关键词供用户选择。但弹出的窗口的位置往往距离输入框过近,弹窗样式也不是特别好看。所以准备参考360,记录用户的搜索关键词,以标签的形式放在弹出窗口中,当输入框获取到焦点时,弹出自定义的窗口,...

建站相关 javascript

javascript 2023-05-09

利用localStorage保存用户的浏览记录

尝试在页面上加载了一言,没事刷新页面就会看到一条新的记录。偶然刷到这样一句话:“大佬永远都觉得自己是萌新”,秉承这种态度的人,一方面可能是出自谦虚。另一方面,技术迭代日新月异,知识浩如烟海,能在某一方面保持拔尖的人,确实为数不多。说回...

建站相关 javascript

javascript 2023-04-27

利用console.time来测试一下js程序的执行效率

想测试一下自己的程序跑一圈需要多少时间,可以尝试启动一个计时器来跟踪它的占用时长。每一个计时器必须拥有唯一的名字。当以此计时器名字为参数调用 console.timeEnd() 时,浏览器将以毫秒为单位,输出对应计时器所经过的时间。启...

建站相关 javascript

javascript 2023-04-10

利用lazysizes.js实现图片懒加载

站点的专题图片稍有点大,恩,其实主要是服务器的带宽过小。导致访问的时候图片加载过慢,页眉部分会空出一块,直到加载结束。于是就想参照joe主题的样式,做一个图片懒加载的效果。joe主题使用了lazysizes实现图片的懒加载。于是查询了...

建站相关 javascript