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 XML实现两级级联下拉列表
Nov 10 Javascript
引用外部js乱码问题分析及解决方案
Apr 12 Javascript
js闭包的用途详解
Nov 09 Javascript
JSON格式化输出
Nov 10 Javascript
javascript实现类似java中getClass()得到对象类名的方法
Jul 27 Javascript
基于jQuery实现select下拉选择可输入附源码下载
Feb 03 Javascript
BootStrap中的table实现数据填充与分页应用小结
May 26 Javascript
JavaScript数组去重的几种方法效率测试
Oct 23 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
Jan 19 Javascript
关于javascript获取内联样式与嵌入式样式的实例
Jun 01 Javascript
JavaScript数据类型的存储方法详解
Aug 25 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
Nov 09 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
PHP中使用mktime获取时间戳的一个黑色幽默分析
2012/05/31 PHP
php简单实现快速排序的方法
2015/04/04 PHP
基于命令行执行带参数的php脚本并取得参数的方法
2016/01/25 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
JS 判断undefined的实现代码
2009/11/26 Javascript
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
jQuery中prevUntil()方法用法实例
2015/01/08 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
Angular2 组件通信的实例代码
2017/06/23 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
JavaScript中的函数式编程详解
2020/08/22 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
Python Tkinter基础控件用法
2014/09/03 Python
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
tensorflow 变长序列存储实例
2020/01/20 Python
在python里创建一个任务(Task)实例
2020/04/25 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
利用Python发送邮件或发带附件的邮件
2020/11/12 Python
python中delattr删除对象方法的代码分析
2020/12/15 Python
HTML5的表单(绝对特别强大的功能)使用示例
2013/06/20 HTML / CSS
美国狗旅行和户外用品领先供应商:kurgo
2020/08/18 全球购物
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
校长就职演讲稿
2014/01/06 职场文书
给医务人员表扬信
2014/01/12 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
干部对照检查材料范文
2014/08/26 职场文书
储备店长岗位职责
2015/04/14 职场文书
酒店前台岗位职责
2015/04/16 职场文书