基于Jquery实现仿百度百科右侧导航代码附源码下载


Posted in Javascript onNovember 27, 2015

先给大家展示下效果图,看看是不是亲想要实现的效果,如果还满意的话请查看本文详情,同时大家也可以下载源码哦。

效果图:

基于Jquery实现仿百度百科右侧导航代码附源码下载

效果展示    源码下载

代码说明:

仿百度百科右侧导航代码jquery插件,这个仿百科右侧导航js代码,在很久以前就像搞个用了,因为这个导航特别适合长篇文档使用,花了半天时间写了这个仿百科导航插件,不过和百度百科比起来还是有点弱,没有实现右侧导航区域滚动的功能,如果您的文档不是超级变态长,应该够用。

如果你的导航超级长,可能要用到侧边导航页可以滚动,一般情况下还是用不到,等过些时候有好的实现思路再搞吧,暂时没想到实现右侧导航区域和左侧内容的滚动并且联动的好办法。

注意:var directoryNav = new DirectoryNav($("h2,h3"),{}); 中的"h2,h3"就是生成两级导航的内容节点

/*
 *仿百度百科右侧导航代码 - 页面目录结构导航 v0.01
 * 只写了两级,无限级别也可以,是逻辑上的级别,html结构全是同一级别
 * 滑标动画用的css3过渡动画,不支持的浏览器就没动画效果了
 * 和百度百科比起来还是比较弱,没有实现右边也可以滚动的功能
 */
 function DirectoryNav($h,config){
  this.opts = $.extend(true,{
   scrollThreshold:0.5, //滚动检测阀值 0.5在浏览器窗口中间部位
   scrollSpeed:700,  //滚动到指定位置的动画时间
   scrollTopBorder:500, //滚动条距离顶部多少的时候显示导航
   easing: 'swing',  //不解释
   delayDetection:200,  //延时检测,避免滚动的时候检测过于频繁
   scrollChange:function(){}
  },config);
  this.$win = $(window);
  this.$h = $h;
  this.$pageNavList = "";
  this.$pageNavListLis ="";
  this.$curTag = "";
  this.$pageNavListLiH = "";
  this.offArr = [];
  this.curIndex = 0;
  this.scrollIng = false;
  this.init();
 }
 DirectoryNav.prototype = {
  init:function(){
   this.make();
   this.setArr();
   this.bindEvent();
  },
  make:function(){
   //生成导航目录结构,这是根据需求自己生成的。如果你直接在页面中输出一个结构那也挺好不用 搞js
   $("body").append('<div class="directory-nav" id="directoryNav"><ul></ul><span class="cur-tag"></span><span class="c-top"></span><span class="c-bottom"></span><span class="line"></span></div>>');
   var $hs = this.$h,
    $directoryNav = $("#directoryNav"),
    temp = [],
    index1 = 0,
    index2 = 0;
   $hs.each(function(index){
    var $this = $(this),
      text = $this.text();
    if(this.tagName.toLowerCase()=='h2'){
     index1++;
     if(index1%2==0) index2 = 0;
     temp.push('<li class="l1"><span class="c-dot"></span>'+index1+'. <a class="l1-text">'+text+'</a></li>');
    }else{
     index2++;
     temp.push('<li class="l2">'+index1+'.'+index2+' <a class="l2-text">'+text+'</a></li>');
    }
   });
   $directoryNav.find("ul").html(temp.join(""));
   //设置变量
   this.$pageNavList = $directoryNav;
   this.$pageNavListLis = this.$pageNavList.find("li");
   this.$curTag = this.$pageNavList.find(".cur-tag");
   this.$pageNavListLiH = this.$pageNavListLis.eq(0).height();
   if(!this.opts.scrollTopBorder){
    this.$pageNavList.show();
   }
  },
  setArr:function(){
   var This = this;
   this.$h.each(function(){
    var $this = $(this),
     offT = Math.round($this.offset().top);
    This.offArr.push(offT);
   });
  },
  posTag:function(top){
   this.$curTag.css({top:top+'px'});
  },
  ifPos:function(st){
   var offArr = this.offArr;
   //console.log(st);
   var windowHeight = Math.round(this.$win.height() * this.opts.scrollThreshold);
   for(var i=0;i<offArr.length;i++){
    if((offArr[i] - windowHeight) < st) {
     var $curLi = this.$pageNavListLis.eq(i),
      tagTop = $curLi.position().top;
     $curLi.addClass("cur").siblings("li").removeClass("cur");
     this.curIndex = i;
     this.posTag(tagTop+this.$pageNavListLiH*0.5);
     //this.curIndex = this.$pageNavListLis.filter(".cur").index();
     this.opts.scrollChange.call(this);
    }
   }
  },
  bindEvent:function(){
   var This = this,
    show = false,
    timer = 0;
   this.$win.on("scroll",function(){
    var $this = $(this);
    clearTimeout(timer);
    timer = setTimeout(function(){
     This.scrollIng = true;
     if($this.scrollTop()>This.opts.scrollTopBorder){
      if(!This.$pageNavListLiH) This.$pageNavListLiH = This.$pageNavListLis.eq(0).height();
      if(!show){
       This.$pageNavList.fadeIn();
       show = true;
      }
      This.ifPos( $(this).scrollTop() );
     }else{
      if(show){
       This.$pageNavList.fadeOut();
       show = false;
      }
     }
    },This.opts.delayDetection);
   });
   this.$pageNavList.on("click","li",function(){
    var $this = $(this),
     index = $this.index();
    This.scrollTo(This.offArr[index]);
   })
  },
  scrollTo: function(offset,callback) {
   var This = this;
   $('html,body').animate({
    scrollTop: offset
   }, this.opts.scrollSpeed, this.opts.easing, function(){
    This.scrollIng = false;
    //修正弹两次回调 蛋疼
    callback && this.tagName.toLowerCase()=='body' && callback();
   });
  }
 };
 //调用实例化
 var directoryNav = new DirectoryNav($("h2,h3"),{
  scrollTopBorder:0 //滚动条距离顶部多少的时候显示导航,如果为0,则一直显示
 });

在写百度百科右侧导航js代码的时候有个想法,就是让右侧导航区域的滚动条和左侧内容的滚动条用一个计算公式让他们关联起来,实现同步滚动。

Javascript 相关文章推荐
jQuery操作Select的Option上下移动及移除添加等等
Nov 18 Javascript
jQuery 事件的命名空间简单了解
Nov 22 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
Oct 08 Javascript
jQuery formValidator表单验证
Jan 07 Javascript
jQuery点击输入框显示验证码图片
May 19 Javascript
JavaScript闭包实例详解
Jun 03 Javascript
JavaScript数据存储 Cookie篇
Jul 02 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
Jan 05 Javascript
jquery.zclip轻量级复制失效问题
Jan 08 Javascript
vue2的todolist入门小项目的详细解析
May 11 Javascript
vue实现日历备忘录功能
Sep 24 Javascript
vue开发移动端底部导航条功能
Apr 08 Javascript
jquery实现两边飘浮可关闭的对联广告
Nov 27 #Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
Nov 27 #Javascript
JS实现的表格行鼠标点击高亮效果代码
Nov 27 #Javascript
基于jquery animate操作css样式属性小结
Nov 27 #Javascript
Javascript简单实现面向对象编程继承实例代码
Nov 27 #Javascript
分享一些常用的jQuery动画事件和动画函数
Nov 27 #Javascript
JS实现的仿淘宝交易倒计时效果
Nov 27 #Javascript
You might like
PHP脚本的10个技巧(7)
2006/10/09 PHP
PHP实现定时生成HTML网站首页实例代码
2008/11/20 PHP
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
php中AES加密解密的例子小结
2014/02/18 PHP
用PHP生成excel文件到指定目录
2015/06/22 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
window.onload 加载完毕的问题及解决方案(上)
2009/07/09 Javascript
理清apply(),call()的区别和关系
2011/08/14 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
2013/06/08 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
2013/08/05 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
原生JS实现的跳一跳小游戏完整实例
2019/01/27 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
2020/05/14 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
Python2.x利用commands模块执行Linux shell命令
2016/03/11 Python
python爬虫实例详解
2018/06/19 Python
python实现简单日期工具类
2019/04/24 Python
CSS3制作精致的照片墙特效
2016/06/07 HTML / CSS
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
火山动力Java笔试题
2014/06/26 面试题
销售自荐信
2013/10/22 职场文书
思想汇报范文
2013/11/04 职场文书
小溪流的歌教学反思
2014/02/13 职场文书
帮一个朋友写的求职信
2014/08/09 职场文书
大学生见习期满自我鉴定
2014/09/13 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
2015年清明节活动总结
2015/02/09 职场文书
2016年校长新年寄语
2015/08/17 职场文书