全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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


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


相关文章: 油猴 教程,油猴搜脚本为什么会网页无法显示?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  名字制作网站免费,所有小说网站的名字?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  建站之星后台管理:高效配置与模板优化提升用户体验  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  建站主机系统SEO优化与智能配置核心关键词操作指南  如何选择适配移动端的WAP自助建站平台?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  教学网站制作软件,学习*后期制作的网站有哪些?  如何构建满足综合性能需求的优质建站方案?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  南京网站制作费用,南京远驱官方网站?  如何在橙子建站中快速调整背景颜色?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  如何通过VPS建站无需域名直接访问?  5种Android数据存储方式汇总  郑州企业网站制作公司,郑州招聘网站有哪些?  c++ stringstream用法详解_c++字符串与数字转换利器  如何通过虚拟机搭建网站?详细步骤解析  ,购物网站怎么盈利呢?  网站制作公司,橙子建站是合法的吗?  建站之星价格显示格式升级,你的预算足够吗?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何在IIS中配置站点IP、端口及主机头?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  如何自定义建站之星模板颜色并下载新样式?  如何快速搭建自助建站会员专属系统?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  建站之星微信建站一键生成小程序+多端营销系统  宝塔面板如何快速创建新站点?  建站之星展会模版如何一键下载生成?  建站之星如何实现PC+手机+微信网站五合一建站?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  Python路径拼接规范_跨平台处理说明【指导】  网站网页制作专业公司,怎样制作自己的网页?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  建站之星安装路径如何正确选择及配置?  如何确认建站备案号应放置的具体位置? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。