jQuery仿写百度百科的目录树

发布时间 - 2026-01-10 22:15:51    点击率:

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

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


# jquery  # 目录树  # jquery实现的树形目录实例  # jQuery遍历节点树方法分析  # jQuery树形控件zTree使用小结  # 多功能jQuery树插件zTree实现权限列表简单实例  # jquery树形菜单效果的简单实例  # jQuery zTree加载树形菜单功能  # jquery实现树形菜单完整代码  # 轻松学习jQuery插件EasyUI EasyUI创建树形菜单  # jQuery实现文档树效果  # jquery插件treegrid树状表格的使用方法详解(.Net平台)  # 鼠标  # 的是  # 小编  # 这一  # 还在  # 第一个  # 在此  # 这段  # 半天  # 就把  # 第二个  # 才有  # 给大家  # 只需要  # 只在  # 动了  # 停下来  # 只对  # 所述  # 恍然大悟 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何挑选优质建站一级代理提升网站排名?  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  香港服务器选型指南:免备案配置与高效建站方案解析  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  如何快速建站并高效导出源代码?  nodejs redis 发布订阅机制封装实现方法及实例代码  英语简历制作免费网站推荐,如何将简历翻译成英文?  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  如何在橙子建站中快速调整背景颜色?  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  微信公众帐号开发教程之图文消息全攻略  如何在IIS中新建站点并配置端口与物理路径?  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  如何实现建站之星域名转发设置?  Python自动化办公教程_ExcelWordPDF批量处理案例  如何在阿里云香港服务器快速搭建网站?  如何在建站宝盒中设置产品搜索功能?  微信小程序 闭包写法详细介绍  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  如何在建站主机中优化服务器配置?  如何快速辨别茅台真假?关键步骤解析  Laravel安装步骤详细教程_Laravel环境搭建指南  Python文件流缓冲机制_IO性能解析【教程】  微信小程序 input输入框控件详解及实例(多种示例)  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  高端建站如何打造兼具美学与转化的品牌官网?  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  七夕网站制作视频,七夕大促活动怎么报名?  EditPlus中的正则表达式实战(6)  专业商城网站制作公司有哪些,pi商城官网是哪个?  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  如何用免费手机建站系统零基础打造专业网站?  动图在线制作网站有哪些,滑动动图图集怎么做?  Laravel怎么清理缓存_Laravel optimize clear命令详解  Laravel如何实现用户密码重置功能?(完整流程代码)  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  在线制作视频的网站有哪些,电脑如何制作视频短片?  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  JavaScript如何实现路由_前端路由原理是什么  JS实现鼠标移上去显示图片或微信二维码