jquery 滚轴滚动 导航定位和锚点定位
自己写的,只测试了ie9+, firefox,chrome
以下js更好
var fixbar={
init:function(){
"use strict";
// 滚轴 导航位置变化
var that=this;
this._navbar=$("#navbar");
this._navbody=$("#navbody");
this._navbodyTop=this._navbody.offset().top; //导航目标标签 距离页面顶部高度
console.log(this._navbodyTop+"====")
this._navbarH=this._navbar.outerHeight(); //导航高度
this._navbodyH=this._navbarH;// 给内容默认导航的高度
this._navbodyBottom=this._navbodyTop; //内容页的最底端距离页面顶部高度
this._navbodyBottomFix=this._navbodyTop; //内容页的最底端距离页面顶部高度 - 导航的高度
this._navbarTop=0; //导航 距离内容页顶部的高度
this._imgh=[]; //内容页 图片距离页面顶部的高度
// this._lastimg= this._navbody.find("img:last-child");
// if(this._lastimg[0].complete){console.log(1); //ie使用
// this.setH();
// }else{ console.log(0);
// this._lastimg.load(function(){ that.setH();});
$(window).load(function(){ that.setH();});
// this.scrollGoto();
// }
this.linkhref();
$(window).scroll(function() {
that.scrollGoto();
});
},
setH:function(){
//导航定位
this._navbodyH=this._navbody.outerHeight();
this._navbodyBottom=this._navbodyTop+this._navbodyH;
this._navbodyBottomFix=this._navbodyTop+this._navbodyH-this._navbarH;
this._navbarTop=this._navbodyH-this._navbarH-10;
// 导航锚点定位
var that=this;
this._navbody.find("img").each(function(){
that._imgh.push($(this).offset().top-100);
});
this.scrollGoto();
},
scrollGoto:function(){
this._scrollT=$(window).scrollTop();
if(this._scrollT>this._navbodyTop){
//修改导航位置
if(this._scrollT<this._navbodyBottomFix){
this._navbar.addClass("fixed").removeAttr("style");
}else{
this._navbar.removeClass("fixed").css({"margin-top":this._navbarTop+"px"});
}
//修改导航锚点样式
if(this._scrollT<this._navbodyBottom){
var lii=0;
for(var i=0;i<this._imgh.length;i++){
if(this._imgh[i]<this._scrollT){
lii=i;
}else{
break;
}
}
this._navbar.find("li").eq(lii).addClass("on").siblings("li").removeClass("on");
}
}else{
this._navbar.removeClass("fixed").removeAttr("style");
this._navbar.find("li").eq(0).addClass("on").siblings("li").removeClass("on");
}
},
linkhref:function(){
//点击跳转
var that=this;
this._navbar.find("li").click(function(){
// var thisli=$(this);
this._gotoTop=that._navbody.find("img[data-loc="+$(this).attr("data-href")+"]").offset().top;
if(undefined!=this._gotoTop){
// $(window).scrollTop(gotoTop,5000);
$(this).addClass("on").siblings("li").removeClass("on");
$('html,body').animate({scrollTop:this._gotoTop+"px"},500);
}
});
}
}
$(function(){
fixbar.init();
})
缺点:1.未封装的方法 2.点击最后一个li导航时,定位到倒数li导航会定位到倒数第二个去
$(function (){
"use strict";
//左侧导航 start
// 滚轴 导航位置变化
var $navbar=$("#navbar"), $navbody=$("#navbody");
var navbodyTop=$navbody.offset().top; //导航目标标签 距离页面顶部高度
var navbarH=$navbar.outerHeight(); //导航高度
var navbodyH=navbarH;// 给内容默认导航的高度
var navbodyBottom=0; //内容页的最底端距离页面顶部高度
var navbodyBottomFix=0; //内容页的最底端距离页面顶部高度 - 导航的高度
var navbarTop=0; //导航 距离内容页顶部的高度
var imgh=[]; //内容页 图片距离页面顶部的高度
var $lastimg= $navbody.find("img:last-child");
if($lastimg[0].complete){console.log(1); //ie使用
setH();
}else{ console.log(0);
$lastimg.load(function(){setH();});
}
function setH(){ console.log(2);
//导航定位
navbodyH=$navbody.outerHeight();
navbodyBottom=navbodyTop+navbodyH;
navbodyBottomFix=navbodyTop+navbodyH-navbarH;
navbarTop=navbodyH-navbarH-10;
// 导航锚点定位
$navbody.find("img").each(function(){
imgh.push($(this).offset().top-100);
});
scrollGoto();
}
$(window).scroll(function() {
scrollGoto();
});
//定义滚动操作
function scrollGoto(){
var scrollT=$(window).scrollTop(); //alert(scrollT);
// console.log(scrollT); //alert(scrollT);
if(scrollT>navbodyTop){ //console.log(navbodyBottomFix);
//修改导航位置
if(scrollT<navbodyBottomFix){
$navbar.addClass("fixed").removeAttr("style");
}else{
$navbar.removeClass("fixed").css({"margin-top":navbarTop+"px"});//.css({});
}
//修改导航锚点样式
if(scrollT<navbodyBottom){
for(var i=0;i<imgh.length;i++){
if(imgh[i]>scrollT){
$navbar.find("li").eq(i-1).addClass("on").siblings("li").removeClass("on");
break;
}
}
}
}else{ //console.log(1);
$navbar.removeClass("fixed").removeAttr("style");
$navbar.find("li").eq(0).addClass("on").siblings("li").removeClass("on");
}
}
//点击跳转
$navbar.find("li").click(function(){
var gotoTop=$navbody.find("img[data-loc="+$(this).attr("data-href")+"]").offset().top;
if(undefined!=gotoTop){
// $(window).scrollTop(gotoTop,5000);
$(this).addClass("on").siblings("li").removeClass("on");
$('html,body').animate({scrollTop:gotoTop+"px"},500);
}
});
//左侧导航 end
})
</script>

jquery 滚轴滚动 导航定位和锚点定位的更多相关文章
- jquery页面滚动显示浮动菜单栏锚点定位效果
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 当锚点定位遇上position: fixed
<!DOCTYPE html><html> <head> <title>当锚点定位遇上position: fixed</title> < ...
- 使用 jQuery.Pin 垂直滚动时固定导航
ZKEACMS的导航默认是不能固定的,随着页面的滚动而滚动,为了有更好的用户体验,当页面往下滚动时,可以将导航固定在顶端,这样方便用户点击. jQuery Pin 借助jQuery的一个插件 jQue ...
- 锚点定位,jquery定位到页面指定位置
jquery锚点定位 $('body,html').animate({scrollTop: $('#ter1').offset().top}, 500);#ter1是你要定位的id对象,500是0.5 ...
- 基于jquery的水平滚轴组件,多参数可设置。
闲来无事,继续封装.此次封装的为水平滚轴组件,可选择滚动的距离大小.闲话不多说,直接上图. 参数说明: vis:4 中间区域可显示的 li 个数 scroll:4 ...
- jQuery全屏滚动插件fullPage.js中文帮助文档API
jQuery全屏滚动插件fullPage.js中文帮助文档API 发现了一个fullPage.js插件,于是百度了一下,还就是这个插件的作用,其实有很多网站都做了全屏滚动的特效,效果也很好看,今天 ...
- html锚点定位不准确问题
问题描述 当顶部固定时,点击锚点,会跳转到锚点以下. <style> #one,#two,#three{ height: 500px; } #top{ position: fixed; h ...
- 微信小程序基于scroll-view实现锚点定位
代码地址如下:http://www.demodashi.com/demo/14009.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- jQuery图片无缝滚动JS代码ul/li结构
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- [Qt] 通过socket将另一个程序的某个窗口调到最前端
@ // THIS IS A HACK: // from QT documentation: // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...
- 消息中间件metaq
消息中间件metaq安装并注册到zookper集群 项目地址 https://github.com/killme2008/Metamorphosis Memorphosis是一个消息中间件,它是lin ...
- 增量学习不只有finetune,三星AI提出增量式少样本目标检测算法ONCE | CVPR 2020
论文提出增量式少样本目标检测算法ONCE,与主流的少样本目标检测算法不太一样,目前很多性能高的方法大都基于比对的方式进行有目标的检测,并且需要大量的数据进行模型训练再应用到新类中,要检测所有的类别则需 ...
- Unity 游戏框架搭建 2019 (三十九、四十一) 第四章 简介&方法的结构重复问题&泛型:结构复用利器
第四章 简介 方法的结构重复问题 我们在上一篇正式整理完毕,从这一篇开始,我们要再次进入学习收集示例阶段了. 那么我们学什么呢?当然是学习设计工具,也就是在上篇中提到的关键知识点.这些关键知识点,大部 ...
- [20170616]recover copy of datafile 6.txt
[20170616]no copy of datafile 6 found to recover.txt --//最近几天一直被这个问题纠缠,我虽然不知道问题在哪来,还是找到简单的解决方法,做1个记录 ...
- cookie ,session 和localStorage的区别详解
2019独角兽企业重金招聘Python工程师标准>>> cookie ,session 和localStorage的区别详解 博客分类: js 当你在浏览网站的时候,WEB 服务器会 ...
- 轻量化模型:MobileNet v2
MobileNet v2 论文链接:https://arxiv.org/abs/1801.04381 MobileNet v2是对MobileNet v1的改进,也是一个轻量化模型. 关于Mobile ...
- 安装KubeSphere
1. KubeSphere 是什么 1.1. 官方解释 KubeSphere是一个分布式操作系统,提供以Kubernetes为核心的云原生堆栈,旨在成为第三方应用程序的即插即用架构,以促进其生态系统的 ...
- 2018 USP-ICMC
简单题 B D F L 中等难度题 E I 更难一点得题 A C G 难题 H K J B. Ugly Number 这个题目很简单,不过我的方法有点点小问题,不过可以改进一下就应该没什么问题了. 这 ...
- SQLserver分库分表
https://blog.csdn.net/ExceptionalBoy/article/details/78851327