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下IE与FF兼容函数收集
Sep 17 Javascript
Javascript实现页面跳转的几种方式分享
Oct 26 Javascript
原生javascript模仿win8等待提示圆圈进度条
Apr 24 Javascript
JavaScript中实现map功能代码分享
Jun 11 Javascript
javascript设计模式Constructor(构造器)模式
Aug 19 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
Jun 11 Javascript
详解Angular 开发环境搭建
Jun 22 Javascript
小程序实现自定义导航栏适配完美版
Apr 02 Javascript
node中IO以及定时器优先级详解
May 10 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
Oct 11 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
Jan 20 Javascript
使用typescript改造koa开发框架的实现
Feb 04 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
IStream与TStream之间的相互转换
2008/08/01 PHP
PHP设置图片文件上传大小的具体实现方法
2013/10/11 PHP
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
2014/08/21 PHP
浅谈PHP中的
2016/04/23 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
js和php如何获取当前url的内容
2013/09/22 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
js window对象属性和方法相关资料整理
2015/11/11 Javascript
Laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的解决方法
2016/08/18 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
JavaScript html5 canvas实现图片上画超链接
2017/10/20 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
2018/09/03 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
详解JWT token心得与使用实例
2019/08/02 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
JavaScript实现鼠标经过表格某行时此行变色
2020/11/20 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
Python实现在线程里运行scrapy的方法
2015/04/07 Python
Python的Flask框架与数据库连接的教程
2015/04/20 Python
解读Django框架中的低层次缓存API
2015/07/24 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
护理自荐信范文
2013/10/05 职场文书
创建省级文明单位实施方案
2014/02/27 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
幼儿园开学温馨提示
2015/07/15 职场文书
升学宴学生致辞
2015/07/27 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书
elasticSearch-api的具体操作步骤讲解
2021/06/28 Java/Android