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/ ...
随机推荐
- 【Python】在Pycharm中安装爬虫库requests , BeautifulSoup , lxml 的解决方法
BeautifulSoup在学习Python过程中可能需要用到一些爬虫库 例如:requests BeautifulSoup和lxml库 前面的两个库,用Pychram都可以通过 File--> ...
- Python语言类型
Python是一门动态解释型的强类型语言. 对这句话进行解析,语言分为动态的和静态的,编译型和解释型的,强类型的和弱类型的语言之分. 下面对三种不同维度的类型的语言进行解释: 1.编译型和解释型 差别 ...
- pynlpir.License过期问题解决方案
报错信息:pynlpir.LicenseError: Your license appears to have expired. Try running "pynlpir update&qu ...
- Mockjs+Ajax实践
需要完成的工作:利用mock js随机生成数据,通过ajax请求,获取这些数据并展示在网页中. 一 mock js随机生成数据 官方文档中,Mock.mock( ),可以说是mock的精髓所在. Mo ...
- 怎么查看当前的git分支是基于哪个分支创建的?
2019独角兽企业重金招聘Python工程师标准>>> Question: 比如从 branch A 切出一个 branch B 然后对branch B做了一系列的操作 然后忘记了b ...
- iOS自定义tabBar
在我们的项目中经常会自己自定义tabBar因为苹果自带的真的太丑了!也不满足我们的项目需求. 好 开始行动吧! 先上图看下我们最终实现的效果: 继承UItabBar自定义一个自己的tabBar .h# ...
- Windows+Ubuntu双系统 ,Ubuntu安装
这篇只是简单记录自己在Win10下另安装Ubuntu系统. 不是教程,因为不会. 推荐一个教程:https://blog.csdn.net/weixin_37029453/article/detail ...
- 积性函数初步(欧拉$\varphi$函数)
updata on 2020.4.3 添加了欧拉\(\varphi\)函数为积性函数的证明和它的计算方式 1.积性函数 设\(f(n)\)为定义在正整数上的函数,若\(f(1)=1\),且对于任意正整 ...
- python(MD5 单向加密)
import hashlib m3 = hashlib.md5() #定义加密方式 src = bytes(", encoding="utf-8") #定义一个需要加密的 ...
- shell之路 Linux核心命令【第一篇】管道符与重定向
输出重定向 命令输出重定向的语法为: command > file 或 command >> file 这样,输出到显示器的内容就可以被重定向到文件.果不希望文件内容被覆盖,可以使用 ...