当前位置: 首页 > 编程笔记 >

jQuery仿写百度百科的目录树

虞正业
2023-03-14
本文向大家介绍jQuery仿写百度百科的目录树,包括了jQuery仿写百度百科的目录树的使用技巧和注意事项,需要的朋友参考一下

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

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

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

二、实现思路

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

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

三、代码实现

/**定于延时执行函数**/
 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仿写百度百科的目录树,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!

 类似资料:
  • 本文向大家介绍详解百度百科目录导航树小插件,包括了详解百度百科目录导航树小插件的使用技巧和注意事项,需要的朋友参考一下 说起来比较惭愧,在园子里混了4年,注册账号也有3年多了,一篇博客都没有写过,之前不写博客的原因是:1,觉得自己的水平弱爆了,不敢出来误人子弟,也怕大牛们笑话 2,太懒了,有时候自己搞一点小东西,搞的过程中兴趣盎然,等搞出来以后就觉得索然无味了,懒得花时间再去整理。新的一年不想再抱

  • 本文向大家介绍基于Jquery实现仿百度百科右侧导航代码附源码下载,包括了基于Jquery实现仿百度百科右侧导航代码附源码下载的使用技巧和注意事项,需要的朋友参考一下 先给大家展示下效果图,看看是不是亲想要实现的效果,如果还满意的话请查看本文详情,同时大家也可以下载源码哦。 效果图: 效果展示    源码下载 代码说明: 仿百度百科右侧导航代码jquery插件,这个仿百科右侧导航js代码,在很久以

  • 更多面经在同名xhs  百度产品经理面经 百度百科产品经理面经 一面 35分钟,面试官是PMO 自我介绍 未来想在北京还是上海 为什么想做产品经理 讲一讲在美团的实习经历,介绍一下具体的项目和成果 介绍一下在小红书的实习,做了什么事情,有什么收获 有没有用过百科这个产品? 你对百科最直观的使用感受是什么?你觉得这个产品它现在的呈现方式有什么样的问题? 有没有了解过其他的百科产品?比如维基、头条百科

  • 1. 申请应用 1.1 登录百度开发者中心 注册百度开发者账号:百度Passport (opens new window)。如果已有则忽略该步骤,直接进入第二步。 登录百度开发者中心:百度开发者中心 (opens new window) 1.2 创建第三方授权应用 进入百度开发者控制台应用管理页面:应用管理 (opens new window) 单击“创建工程”,开始创建应用。 记录以下三个信息:

  • 上海 机器视觉数据挖掘自然语言处理 总时长1h15分 项目中fasterrnn介绍 问细节 与yolo对比思考 项目中yolo数据增强方式 问图像类其他高级数据增强方式 nlp中数据增强方式 unet结构介绍 问细节 大模型实习内容细问 预训练 微调方式 prompt的本质作用 情感分析相关 loss函数 评价指标等等 介绍transformer 与rnn对比 自注意力机制本质 位置编码原因 还有

  • 本文向大家介绍jQuery 仿百度输入标签插件附效果图,包括了jQuery 仿百度输入标签插件附效果图的使用技巧和注意事项,需要的朋友参考一下 1、先上效果图 2、调用方式 html页面调用 3、tagsinput.css样式 4、jquery.tagsinput.js