jQuery仿写百度百科的目录树


Posted in Javascript onJanuary 03, 2017

一、首先来看一下需求(截图为百度百科“医保”词条):

1、点击右侧的目录树,左侧跳转到指定的锚点位置;

2、滚动鼠标,游标跟随一起滚动至响应链接位置

jQuery仿写百度百科的目录树

二、实现思路

1、针对第一个需求,只需要设置游标所在div和右侧列表div的position为fixed,根据浏览器窗口定位,然后给左侧文章各区块增加id,为右侧列表每一项增加对应的href属性指向响应的锚点即可;

2、针对第二个需求,定义鼠标的滚动事件mousewheel(在ff下事件为DOMMouseScroll),当时自己琢磨了半天用各种方法计算,但效果始终无法达到要求,后来分析了百度的实现源码恍然大悟,具体实现参考下图和代码部分。

jQuery仿写百度百科的目录树

三、代码实现

/**定于延时执行函数**/
 var timeFun = null;
 /**找到当前页面滚动到的锚点位置**/
 var findHref = function(){
  var $links = $('.link');
  var windowScrollTop = $(window).scrollTop();
  var maxDistance = 10000;
  var result = $links.eq(0);
  $.each($links,function(i,link){
   var curDistanceToTop = Math.abs($links.eq(i).offset().top - windowScrollTop);
   /**if(maxDistance > curDistanceToTop && ($links.eq(i).offset().top < (windowScrollTop + $(window).height()))){
    maxDistance = curDistanceToTop;
    result = $links.eq(i);
   } 这段代码相当于下面这一句代码,优秀的代码就应该拿来多学习!**/
   maxDistance > curDistanceToTop && $links.eq(i).offset().top < windowScrollTop + $(window).height() && (maxDistance = curDistanceToTop,result = $links.eq(i))
  });
  return result;
 };
 /***使用jQuery创建移动动画*/
 var move = function (dis) {
  var $arrow = $('.arrow');
  $arrow.animate({top:dis},'normal');
 }
 /**滚轮事件Handler**/
 var wheelHandler = function(e){
  clearTimeout(timeFun);
  timeFun = setTimeout(function(){
   var href = findHref();
   var index = href[0].id.substring(1);
   var dis = 30*(index-1)+10;
   move(dis);
  },600);
 };
 /***注册滚轮事件*/
 $('body').on('mousewheel',wheelHandler);

四、Tips

1、$('.link')[0]返回的是普通的Dom对象,而代码中使用$('.link').eq(0)返回的是jQuery对象,jQuery对象才有.offset()方法。

补充说明:eq返回的是jquery对象,而get(n)和索引返回的是dom元素对象。

2、为什么要使用延时执行函数,并且在wheelHandler中clearTimeout(timeFun)?

因为我们正常滚动鼠标会触发多次的mousewheel事件,为了防止jQuery动画出现卡顿的现象,将代码设计成只在鼠标滚轮停下来的时候去触发,clearTimeout做的事情就是只要鼠标滚轮还在滚动,进入wheelHandler方法,就把前面已加入到延时执行队列中的方法清除,这样就可以做到只对最后一个滚动触发动画事件,看上去就好像鼠标滚轮停止滚动了才去触发一样。

以上所述是小编给大家介绍的jQuery仿写百度百科的目录树,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(5)
Dec 23 Javascript
JavaScript入门教程(8) Location地址对象
Jan 31 Javascript
Javascript学习笔记6 prototype的提出
Jan 11 Javascript
基于jquery实现点击左右按钮图片横向滚动
Apr 11 Javascript
js获取新浪天气接口的实现代码
Jun 06 Javascript
基于zepto.js简单实现上传图片
Jun 21 Javascript
JavaScript中绑定事件的三种方式及去除绑定
Nov 05 Javascript
vue router路由嵌套不显示问题的解决方法
Jun 17 Javascript
jQuery dateRangePicker插件使用方法详解
Jul 28 jQuery
jQuery实现table表格信息的展开和缩小功能示例
Jul 21 jQuery
Vuex的基本概念、项目搭建以及入坑点
Nov 04 Javascript
JavaScript this绑定过程深入详解
Dec 07 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
Jan 03 #Javascript
Vue.js系列之vue-router(上)(3)
Jan 03 #Javascript
JavaScript实现自定义媒体播放器方法介绍
Jan 03 #Javascript
JS求解三元一次方程组值的方法
Jan 03 #Javascript
Vue.js系列之项目结构说明(2)
Jan 03 #Javascript
Vue.js系列之项目搭建(1)
Jan 03 #Javascript
jquery实现下拉框多选方法介绍
Jan 03 #Javascript
You might like
人大复印资料处理程序_查询篇
2006/10/09 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
2015/07/08 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
jQuery Ajax之load()方法
2009/10/12 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
jquery实现两边飘浮可关闭的对联广告
2015/11/27 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
2016/11/25 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
angularjs实现上拉加载和下拉刷新数据功能
2017/06/12 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
2017/08/18 Javascript
JS返回顶部实例代码
2020/08/09 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
node 文件上传接口的转发的实现
2019/09/23 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
Python利用Beautiful Soup模块创建对象详解
2017/03/27 Python
Python3.x对JSON的一些操作示例
2017/09/01 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
python实现PCA降维的示例详解
2020/02/24 Python
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
Fanatics官网:运动服装、球衣、运动装备
2020/10/12 全球购物
shell的种类有哪些
2015/04/15 面试题
大二学生学习个人自我评价
2014/01/19 职场文书
五年级科学教学反思
2014/02/05 职场文书
主题班会演讲稿
2014/05/22 职场文书
会展策划与管理专业求职信
2014/06/09 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
检讨书范文2000字
2015/01/28 职场文书
2016大学生党校学习心得体会
2016/01/06 职场文书
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android