stickUp.js学习
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学习相关推荐
- ArcGIS JS 学习笔记4 实现地图联动
原文:ArcGIS JS 学习笔记4 实现地图联动 1.开篇 守望屁股实在太好玩了,所以最近有点懒,这次就先写个简单的来凑一下数.这次我的模仿目标是天地图的地图联动. 天地的地图联动不仅地图有联动,而 ...
- backbone.js学习笔记
backbone.js学习笔记 之前只接触过jQuery,看来Backbone是除了jQuery的第二大JS框架... backbone到底是个啥? 其实刚开始我也不知道=_=,我是这周二才听说居然还 ...
- 程序员的高速学习法——以JS学习为例,进行图解
近期一直在忙着学习,感觉做总结的时间太少了,听起来挺好玩儿的,就像<倾城之恋>里面.范柳原说:那时候都忙着谈恋爱了哪里有时间恋爱. 学习和总结也是一样.不能一直忙着学习而导致自己没有时间 ...
- node.js学习笔记
# node.js学习笔记标签(空格分隔): node.js---## 一 内置模块学习 ### 1. http 模块 ``` //1 导入http模块 const http =require('ht ...
- node.js学习笔记14—微型社交网站
node.js学习笔记14-微型社交网站 1.功能分析 微博是以用户为中心,因此需要有注册和登录功能. 微博最核心的功能是信息的发表,这个功能包括许多方面,包括:数据库访问,前端显示等. 一个完整的微 ...
- WebGL three.js学习笔记 6种类型的纹理介绍及应用
WebGL three.js学习笔记 6种类型的纹理介绍及应用 本文所使用到的demo演示: 高光贴图Demo演示 反光效果Demo演示(因为是加载的模型,所以速度会慢) (一)普通纹理 计算机图形学 ...
- js 学习笔记(一)
前言 网上其实已经有非常多的js学习资料了,但是每个人都有自己的基础,所以往往是有的人讲的深一点,有的人说的浅一点. 就我自身而言,想要匹配自己水平的找些资料,往往是十分的零碎,所以可能今天看到的文章 ...
- html 流程控制,HTML5独家分享:原生JS学习笔记2——程序流程控制
当当当当 .....楼主又来了!新一期的js学习笔记2--程序流程控制更新了! 想一键获取全部js学习笔记的可以给楼主留言哦! js中的程序控制语句 常见的程序有三种执行结构: 1.顺序结构 2.分支 ...
- 基于jquery的插件turn.js学习笔记
基于jquery的插件turn.js学习笔记 简介 turn.js是一个可以实现3d书籍展示效果的jq插件,使用html5和css3来执行效果.可以很好的适应于ios和安卓等触摸设备. How it ...
最新文章
- C和C++安全编码笔记:指针诡计
- BZOJ 1799 [Ahoi2009] self 同类分布(数位DP)【BZOJ千题计划(quexin】
- 利用WCF的callback机制开发一个简单的多人游戏模型
- 电气论文:梯级水电站调度优化建模(文末有程序下载链接)
- Hadoop:你不得不了解的大数据工具
- Mybase到期 破解
- c语言递归求塔移动次数,c语言递归调用汉诺塔
- 给开源项目贡献代码_您可以为开源做出6种非代码贡献
- 深信服SCSA安全认证工程师
- mysql查看表空间占用情况
- VC2010 运行时闪退
- 利用极域电子教室控制别人电脑
- 第五章 整合视图层技术
- 《我的世界》JAVA版本需使用微软账号登录
- android 电池(一):锂电池基本原理篇 .
- 怎么打印加密的PDF文件?
- 矩阵合同,相似与等价 以及初等变换矩阵
- mysql+uuid的数据类型_mysql 数据类型
- 美国计算机工程专业,2018年美国大学本科计算机工程专业Top10
- Java智能合约工具包|Java调用智能合约|Java调用ERC20、ERC721、ERC1155合约