其实这种效果网上好多的插件,但是我想自己实现看看,其实把思路理清实现起来就非常简单了,让我们看看:

分析:

从图中我们可以看出:右边的top=100px,那么它应该在第一个框的top+height=150px区域内,

当鼠标滚动到第2个区域时,同理,右边的top,应该在第2个框的top+height内 ,这样思路理清了,那么接下来我们来实现吧。
<nav class="sidebar"><ul><li>F1-植物王国</li><li>F2-动物世界</li><li>F3-科学探秘</li><li>F4-文化节日</li><li>F5-成长健康</li><li>F6-生活百科</li><li>F7-艺术欣赏</li><li>F8-语言乐园</li><li>F9-数学小天地</li></ul></nav>

/*侧边栏开始*/
.sidebar {border: 1px solid #E5E9EF;position: fixed;width: 100px;right: 12%;top: 45%;border-radius: 4px;
}.sidebar>ul {}.sidebar>ul>li {padding: 10px;width: 100px;cursor: pointer;
}.sidebar .active {background-color: #06A3D7;color: #fff;
}
/*侧边栏结束*/

$(window).scroll(function() {//这里是要显示的div的id,一定要按照从上到下的顺序排列,如果有新的可以往后加var tops = [ 'f1', 'f2', 'f3', 'f4' ];for (var i = 0; i < tops.length; i++) {var top = $('.sidebar ul li').eq(i).offset().top;var t = $('#' + tops[i]).offset().top;var h = $('#' + tops[i]).height();if (top > t && top < t + h) {$('.sidebar ul li').removeClass('active');$('.sidebar ul li').eq(i).addClass('active');}if (top < t && i == 0) {$('.sidebar ul li').removeClass('active');}}});

效果图:

总结:

1、刚开始做的时候没有思绪,然后一个朋友给了一段自己写的代码,我就参考一下然后自己优化了一下它的代码

2、默认在页面最上面应该不显示active状态,所以第2个if判断至关重要!!!

参考:

http://www.bootcss.com/p/stickup/

===========================================分割线=========================================================

上面是依据sidebar来判断div的,也就是说当div和sidebar同处同一水平线,那么导航就高亮,现在我参照bilibili的网站,它的是当div在屏幕可见区域1/4位置时导航就高亮,所以代码改成:

$(document).on('scroll', function() {var height = $(window).height();var tops = [ 'f1', 'f2', 'f3', 'f4' ];for (var i = 0; i < tops.length; i++) {var rectop = $('#' + tops[i])[0].getBoundingClientRect().top;console.log('rectop=' + rectop)if (rectop < height /4) {$('.sidebar ul li').removeClass('active');$('.sidebar ul li').eq(i).addClass('active');} else if (i == 0) {$('.sidebar ul li').removeClass('active');}}});$(".sidebar ul li").click(function(e) {var index = $(this).index();var height = $(window).height();$("html,body").animate({scrollTop : $('#f' + (parseInt(index) + 1)).offset().top}, 500);});$(".sidebar a").click(function(e) {$("html,body").animate({scrollTop : $('body').offset().top}, 500);});

总结:这样虽然完成了,但是最后一个div如果没有达到屏幕可见区域的1/4位置,那么导航就不高亮,bilibili的做法是,直接去掉最后一个导航,而我的做法是最后div的margin-bottom设置成200px,那就会“撑”到1/4位置了。

参考:http://www.bilibili.com/

转载于:https://www.cnblogs.com/zhangwei595806165/p/5845962.html

制作stick侧边栏导航效果相关推荐

  1. php侧边栏导航效果,原生js实现电商侧边导航效果

    知识要点 实现原理: 1.点击楼层跳相应楼层,用的是锚点定位 电梯:2F 个护家清 列表title: 这个没什么好说的 2.当点击楼层跳到相应楼层时,该楼层高亮显示 我们的脚本主要就是实现这个功能. ...

  2. 【web前端特效源码】使用HTML5+CSS3+JavaScript制作一个果冻导航标签栏图标按钮效果~~适合初学者~超简单~ |前端开发|IT软件

    b站视频演示效果: [web前端特效源码]使用HTML5+CSS3+JavaScript制作一个果冻导航标签栏图标按钮效果~~适合初学者~超简单~ |前端开发|IT软件 效果图: 完整代码: < ...

  3. 侧边栏导航(移动端商品--评论--详情)随楼层滑动高亮显示

    demo下载地址 接触前端一年时间,开始还能感觉到自己的进步,随着时间的推移,开始不知道方向.因为各种前端的框架和插件在网上都能够找到现成的,直接下载下来用就好了. 从来不考虑其中的实现原理什么的,即 ...

  4. css制作漂亮彩带导航条菜单

    点击这里查看效果: http://keleyi.com/keleyi/phtml/divcss/17.htm 效果图: 以下是源代码: 1 <!DOCTYPE html PUBLIC " ...

  5. WFP实现侧边栏导航菜单

    菜单导航功能实现,常规的管理系统应该常用,左侧显示菜单条目,点击菜单,右侧切换不同的业务用户控件. 常用菜单可以采用TreeView树形控件+特定样式实现 ,本文介绍的是使用Expander+List ...

  6. 利用CSS浮动制作一个简易导航栏

    初学CSS,利用CSS浮动和无序列表制作一个简易导航栏: <!DOCTYPE html> <html lang="en"> <head>< ...

  7. 微信小程序:scroll-view制作横向滚动导航条特效

    微信小程序:scroll-view制作横向滚动导航条特效 一.scroll-view介绍 微信小程序官方释义为:可滚动视图区域,目前一共有10几个属性,包括:scroll-x.scroll-y.scr ...

  8. 使用Axure RP 8制作两种导航菜单-悬浮菜单

    上一篇文章介绍了下拉导航的设置方法,详见 使用Axure RP 8制作两种导航菜单-下拉导航 本文介绍第二种导航方式悬浮菜单,如图 同样我们先分析一下该种方式中包含的交互: 鼠标移入一级菜单图标,出现 ...

  9. win10隐藏3D对象、视屏、文档(隐藏侧边栏/导航图标)

    左侧边侧栏(导航窗口)中的文件夹有:"3D对象,视频,图片,文档,下载,音乐,桌面",另外还有一个OneDrive的文件夹.由于比较占据边侧栏空间,所以很有必要将其隐藏起来.那么我 ...

  10. html如何做滑动门效果,div+css制作简单滑动门效果

    现在流行的网站设计中,水平导航菜单占据了大壁江山.的确,无论是门户网站还是企事业单位网站,都大量的采用水平的导航菜单设计.而水平导航菜单中,又有绝大多数网站采用"滑动门"设计. 首 ...

最新文章

  1. 使用soapUI代替WSDL2JAVA生成cxf HTTPS 客户端调用代码
  2. 成功解决TypeError: take() got an unexpected keyword argument ‘fill_value‘
  3. 不同于NLP,数据驱动、机器学习无法攻克NLU,原因有三
  4. 99岁田家炳博士辞世!捐助300多所学校…
  5. jmeter进程和线程的区别_一文搞懂进程和线程的区别
  6. java中calendarr_Java端获取当前时间的前12个小时
  7. [20150123]热链竞争.txt
  8. 前端笔记—第4篇CSS基础知识2
  9. 重新审视Faster RCNN:优缺点与改进
  10. 怎样区别7290喷壳机与原壳黑莓手机,里面有详图
  11. 2018年全国大学生电子设计竞赛
  12. vscode 报Open a folder or workspace... (File -> Open Folder)解决办法
  13. 微信摇一摇服务器实现,微信摇一摇事件通知
  14. SGSN - GPRS服务支持节点
  15. WDK学习笔记_基于区块链溯源系统的后端接口开发
  16. 灵活使用 console 让 js 调试更简单
  17. 笔记:OpenCV之眨眼检测
  18. 如何成为一名很酷的机器人工程师?
  19. 基姆拉尔森计算公式 推导
  20. Lock Convoys Explained

热门文章

  1. JFinal 源码导读第四天(3) initRender
  2. 一个类似京东商城那种多条件筛选效果
  3. ios学习:UIToolBar的单独使用
  4. Ubuntu 下J2EE开发环境搭建
  5. aggs 聚合 取结果
  6. 又一个国内知名论坛,突然被全面叫停!
  7. 涨姿势了!delete后加 limit是个好习惯么?
  8. IntelliJ IDEA 2019.3 首个最新访问版本发布,新特性抢先看
  9. 可供创业团队技术开发参考的10条经验
  10. 仅限今天,《Linux就该这么学》半价优惠仅需39.5元。