2019独角兽企业重金招聘Python工程师标准>>>

需要看插件使用方法的请戳 插件介绍   查看源码请戳 github地址

官方使用时单页应用,每一个区域对应一个相应的class,在menu中也要相互对应

源码前几行是参数定义,数组定义,下面是一些具体代码

$(window).scroll(function(event){    var st = $(this).scrollTop();    if (st > lastScrollTop){    scrollDir = 'down';    } else {    scrollDir = 'up';    }    lastScrollTop = st;    });

调用scroll,判断页面是向上还是向下滚动

$.fn.stickUp = function( options ) {    // adding a class to users div    $(this).addClass('stuckMenu');    //getting options    var objn = 0;    if(options != null) {    for(var o in options.parts) {    if (options.parts.hasOwnProperty(o)){    content[objn] = options.parts[objn];    objn++;    }    }

$fn.stickup里这段是首次调用时添加一个stuckMenu类以便之后的dom查找

options是参数,包括parts(添加菜单内容用来单页导航),itemsclass等等,options不会空时记录下parts中的内容

itemClass = options.itemClass;
itemHover = options.itemHover;

获取itemitemclass(每个menu菜单的类),itemHover(菜单被选中时添加的类)

if (options.topMargin != null) {if (options.topMargin == 'auto') {topMargin = parseInt($('.stuckMenu').css('margin-top'));} else {if (isNaN(options.topMargin) && options.topMargin.search("px") > 0) {topMargin = parseInt(options.topMargin.replace("px", ""));} else if (!isNaN(parseInt(options.topMargin))) {topMargin = parseInt(options.topMargin);} else {console.log("incorrect argument, ignored.");topMargin = 0;}}
} else {topMargin = 0;
}
menuSize = $('.' + itemClass).size();

options中有一个topMargin参数,如果不为空并为auto就获取当前导航栏的margin-top参数,如果不为auto就获取值

这里用isNaN判断传递的是纯数值还是带px的参数

当时单页应用时,menusize是获取导航栏中menu的个数,如下,menusize就是8,menu中每一个对应单页应用中的一部分

            stickyHeight = parseInt($(this).height());stickyMarginB = parseInt($(this).css('margin-bottom'));currentMarginT = parseInt($(this).next().closest('div').css('margin-top'));vartop = parseInt($(this).offset().top);

获取一些参数,便于后面的定位

$(document).on('scroll', function() {varscroll = parseInt($(document).scrollTop());

当滚动时,获取滚动的长度

    if (menuSize != null) {for (var i = 0; i < menuSize; i++) {contentTop[i] = $('#' + content[i] + '').offset().top;function bottomView(i) {contentView = $('#' + content[i] + '').height() * .4;testView = contentTop[i] - contentView;//console.log(varscroll);if (varscroll > testView) {$('.' + itemClass).removeClass(itemHover);$('.' + itemClass + ':eq(' + i + ')').addClass(itemHover);} else if (varscroll < 50) {$('.' + itemClass).removeClass(itemHover);$('.' + itemClass + ':eq(0)').addClass(itemHover);}}if (scrollDir == 'down' && varscroll > contentTop[i] - 50 && varscroll < contentTop[i] + 50) {$('.' + itemClass).removeClass(itemHover);$('.' + itemClass + ':eq(' + i + ')').addClass(itemHover);}if (scrollDir == 'up') {bottomView(i);}}}

当menusize不为空时将他们添加到contentTop中

17-20行中,判断滑动方向为向下时,如果滑动进入某一区域上边界上下50px范围内,就在导航栏中修改该区域对应的menu为active

21-22行,当向上滑时调用bottomView函数

9-11行,判断当前页面哪个区域占的部分更多,在导航栏中激活相应的选项

12-14行是判断页面第一个区域用的

if(vartop < varscroll + topMargin){    $('.stuckMenu').addClass('isStuck');    $('.stuckMenu').next().closest('div').css({    'margin-top': stickyHeight + stickyMarginB + currentMarginT + 'px'    }, 10);    $('.stuckMenu').css("position","fixed");    $('.isStuck').css({    top: '0px'    }, 10, function(){    });    };

官方使用中,该导航栏先是在页面中部,之后滑动以后固定在页面顶部,这里就是实现这一功能

vartop是固定的导航栏距离网页顶部的距离,当滑动和外边距超过这一部分后,就将导航栏固定

if(varscroll + topMargin < vartop){    $('.stuckMenu').removeClass('isStuck');    $('.stuckMenu').next().closest('div').css({    'margin-top': currentMarginT + 'px'    }, 10);    $('.stuckMenu').css("position","relative");    };

当页面向上滑动来到页面最初的位置时,就要将position修改为relative,使导航栏跟着做相应的滑动

转载于:https://my.oschina.net/369679209/blog/301322

stickUp.js学习相关推荐

  1. ArcGIS JS 学习笔记4 实现地图联动

    原文:ArcGIS JS 学习笔记4 实现地图联动 1.开篇 守望屁股实在太好玩了,所以最近有点懒,这次就先写个简单的来凑一下数.这次我的模仿目标是天地图的地图联动. 天地的地图联动不仅地图有联动,而 ...

  2. backbone.js学习笔记

    backbone.js学习笔记 之前只接触过jQuery,看来Backbone是除了jQuery的第二大JS框架... backbone到底是个啥? 其实刚开始我也不知道=_=,我是这周二才听说居然还 ...

  3. 程序员的高速学习法——以JS学习为例,进行图解

    近期一直在忙着学习,感觉做总结的时间太少了,听起来挺好玩儿的,就像<倾城之恋>里面.范柳原说:那时候都忙着谈恋爱了哪里有时间恋爱.  学习和总结也是一样.不能一直忙着学习而导致自己没有时间 ...

  4. node.js学习笔记

    # node.js学习笔记标签(空格分隔): node.js---## 一 内置模块学习 ### 1. http 模块 ``` //1 导入http模块 const http =require('ht ...

  5. node.js学习笔记14—微型社交网站

    node.js学习笔记14-微型社交网站 1.功能分析 微博是以用户为中心,因此需要有注册和登录功能. 微博最核心的功能是信息的发表,这个功能包括许多方面,包括:数据库访问,前端显示等. 一个完整的微 ...

  6. WebGL three.js学习笔记 6种类型的纹理介绍及应用

    WebGL three.js学习笔记 6种类型的纹理介绍及应用 本文所使用到的demo演示: 高光贴图Demo演示 反光效果Demo演示(因为是加载的模型,所以速度会慢) (一)普通纹理 计算机图形学 ...

  7. js 学习笔记(一)

    前言 网上其实已经有非常多的js学习资料了,但是每个人都有自己的基础,所以往往是有的人讲的深一点,有的人说的浅一点. 就我自身而言,想要匹配自己水平的找些资料,往往是十分的零碎,所以可能今天看到的文章 ...

  8. html 流程控制,HTML5独家分享:原生JS学习笔记2——程序流程控制

    当当当当 .....楼主又来了!新一期的js学习笔记2--程序流程控制更新了! 想一键获取全部js学习笔记的可以给楼主留言哦! js中的程序控制语句 常见的程序有三种执行结构: 1.顺序结构 2.分支 ...

  9. 基于jquery的插件turn.js学习笔记

    基于jquery的插件turn.js学习笔记 简介 turn.js是一个可以实现3d书籍展示效果的jq插件,使用html5和css3来执行效果.可以很好的适应于ios和安卓等触摸设备. How it ...

最新文章

  1. C和C++安全编码笔记:指针诡计
  2. BZOJ 1799 [Ahoi2009] self 同类分布(数位DP)【BZOJ千题计划(quexin】
  3. 利用WCF的callback机制开发一个简单的多人游戏模型
  4. 电气论文:梯级水电站调度优化建模(文末有程序下载链接)
  5. Hadoop:你不得不了解的大数据工具
  6. Mybase到期 破解
  7. c语言递归求塔移动次数,c语言递归调用汉诺塔
  8. 给开源项目贡献代码_您可以为开源做出6种非代码贡献
  9. 深信服SCSA安全认证工程师
  10. mysql查看表空间占用情况
  11. VC2010 运行时闪退
  12. 利用极域电子教室控制别人电脑
  13. 第五章 整合视图层技术
  14. 《我的世界》JAVA版本需使用微软账号登录
  15. android 电池(一):锂电池基本原理篇 .
  16. 怎么打印加密的PDF文件?
  17. 矩阵合同,相似与等价 以及初等变换矩阵
  18. mysql+uuid的数据类型_mysql 数据类型
  19. 美国计算机工程专业,2018年美国大学本科计算机工程专业Top10
  20. Java智能合约工具包|Java调用智能合约|Java调用ERC20、ERC721、ERC1155合约

热门文章

  1. Mark几款优秀的基于MPC开源播放器的源码供参考.
  2. [51Nod 1816] 小C的二分图 口胡
  3. 菜鸟程序员的超神之路
  4. 条件概率公式, 贝叶斯公式
  5. 解决eclipse创建jsp文件后的报错
  6. 最逗人的歇后语~~~
  7. vivo 全球商城:亿级订单中心架构设计与实践
  8. linux 查看hbase是否启动命令,linux、hdfs、hive、hbase常用命令
  9. mysql判断当前时间是否在开始与结束时间之间且开始与结束时间允许为空
  10. 无线网络性能该如何检测?