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/ ...
随机推荐
- Inno Setup 大师 Tlama
https://stackoverflow.com/users/960757/tlama
- Golang Context 的原理与实战
本文让我们一起来学习 golang Context 的使用和标准库中的Context的实现. golang context 包 一开始只是 Google 内部使用的一个 Golang 包,在 Gola ...
- #Week3 Linear Regression with Multiple Variables
一.Multiple Features 这节课主要引入了一些记号,假设现在有n个特征,那么: 为了便于用矩阵处理,令\(x_0=1\): 参数\(\theta\)是一个(n+1)*1维的向量,任一个训 ...
- HR问了我朋友什么是简单工厂模式,竟被质疑是否学过设计模式,是否是计算机专业?
越是简单的东西,越是容易被忽略,我来带你们好复习一下! 简单工厂模式 简单工厂模式也被称为静态工厂模式;使用简单工厂模式可以将产品的"消费"和生产完全分开,客户端只需要知道自己需要 ...
- muduo网络库源码学习————线程本地单例类封装
muduo库中线程本地单例类封装代码是ThreadLocalSingleton.h 如下所示: //线程本地单例类封装 // Use of this source code is governed b ...
- 僵尸进程(zombie process)
首先了解一下linux中进程的5大状态: R Running or runnable (on run queue)S Interruptible sleep (waiting for an event ...
- 15分钟从零开始搭建支持10w+用户的生产环境(四)
上一篇文章,介绍了这个架构中,WebServer的选择,以及整个架构中扩展时的思路. 原文地址:15分钟从零开始搭建支持10w+用户的生产环境(三) 五.架构实践 前边用了三篇文章,详细介绍了这个 ...
- CGI (通用网关接口)
CGI cgi即 Common Gateway Interface 译作 通用网关接口 是应用程序与应用程序之间的输入输出协议.比如我们写信,规定了开头一句写称呼,中间写内容,最后署名和日期.看到这种 ...
- 第一个Vue-cli
第一步下载node.js https://nodejs.org/zh-cn/ 安装成功后 在cmd 输入 node -v 看看能不能打印出来 在cmd 输入 nmp-v 看看能不能打印出来 全局安装 ...
- GoF23:工厂模式(Factory)
目录 GoF23:工厂模式(Factory) 工厂模式三种模式 简单工厂模式(静态工厂模式) 工厂方法模式 抽象工厂模式 举例说明 代码实现 GoF23:工厂模式(Factory) 核心本质: 实例化 ...