• 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>

  • 相关阅读:
    [图论分块] HDU 4858 项目管理
    pytorch 自定义权重变量初始化
    Linux系统下命令静默安装weblogic12c
    第六章 类文件结构(2)
    第六章 类文件结构(1)
    第三章 垃圾收集器与内存分配策略
    第二章(3)实战: OutOfMemoryError异常
    第二章(2)HotSpot虚拟机对象探秘
    第二章(1) Java内存区域与内存溢出异常
    第一章 走进java
  • 原文地址:https://www.cnblogs.com/jcz1206/p/6617816.html
Copyright © 2020-2023  润新知