重点实现:

点击锚点,页面滑动到对应的位置,且锚点高亮
页面滑动时,滑动到指定位置时,对应的锚点高亮显示
锚点对应的内容块高度任意指定
特殊处理页面滑动到底部,确保最后一个锚点高亮显示
特殊需求,当某内容块为空,该内容块及对应的锚点均隐藏显示
复制代码

效果图

页面结构

<div id="rollWrap"><div class="content"><h1><a href="#section1" class="cur-anchor">内容1</a>&nbsp;&nbsp;<a href="#section2">内容2</a>&nbsp;&nbsp;<a href="#no">内容空</a><a href="#section3">内容3</a>&nbsp;&nbsp;</h1><div class="other"></div><div id="section1" class="section">内容1</div><div id="section2" class="section">内容2</div><div id="no">空</div><div id="section3" class="section">内容3</div><footer>底部</footer></div></div>
复制代码

js源码

    var clickflag = false; //标识是否点击锚点触发页面滚动var offsetHs = [0]; //页面滚动,对应锚点高亮范围值var navs = '';init();/*事件绑定*/$('#rollWrap a').click(function(){clickflag = true;$(this).addClass('cur-anchor').siblings().removeClass('cur-anchor');$('#rollWrap').animate({scrollTop: $($(this).attr('href')).offset().top + $('#rollWrap').scrollTop()},function(){clickflag = false;});return false; //地址栏不显示标识符 #xx});$('#rollWrap').on('scroll',function(){isLightAnchor($('#rollWrap').scrollTop())})/*初始化,当内容块的内容为空,隐藏对应的内容块及锚点*/function init(){//一系列操作,得知空内容块为 #no$('#no').remove();$('a[href=#no]').remove();navs = $('#rollWrap a');handleOffsetValue();}/*页面滚动,对应的锚点(动态锚点)高亮,偏移值计算*/function handleOffsetValue(){for(var i = 0;i < navs.length;i++){var divID = $(navs[i]).attr('href');//计算偏移量,必须一进入页面调用,否则$(divID).offset().top 为偏移之后的动态变化值offsetHs.push($(divID).offset().top+$(divID).get(0).offsetHeight*0.8);}}/*页面scroll,计算是否需要高亮锚点*/function isLightAnchor(scrollTop){for(var i = 0;i < navs.length; i ++){if(scrollTop>=offsetHs[i]&&scrollTop<offsetHs[i+1]){if (!clickflag) {$($('#rollWrap a')[i]).addClass('cur-anchor').siblings().removeClass('cur-anchor');}}}//设置滚动到底部,确保最后一个锚点高亮if(scrollTop==$('.content').get(0).offsetHeight-$('#rollWrap').height()){$($('#rollWrap a')[navs.length-1]).addClass('cur-anchor').siblings().removeClass('cur-anchor');}}
复制代码

说明:

  • 滚动容器里的元素,其offset().top是相对于容器顶部而言的,当页面发生滚动,该元素对应的offset().top值是动态改变的,可正可负;
  • 设置某元素置于容器顶部,可设置容器的scrollTop = 当前的scrollTop+该元素的offset().top

css代码

html,body{height:100%;margin:0;padding:0;
}
div{margin: 0;padding: 0;
}
#rollWrap{height:100%;overflow-y: scroll;
}
.other{height:200px;background-image: url(./bg.jpg);
}
.section{color:black;font-size: 2em;text-align: center;background-size: 100% 100%;background-repeat: no-repeat;
}
#section1{height:500px;line-height: 500px;background-image: url(./bg1.jpg);
}
#section2{height:700px;line-height: 700px;background-image: url(./bg2.jpg);
}
#section3{height:200px;line-height: 200px;background-image: url(./bg3.jpg);
}
h1{right: 20px;top:0;position: fixed;
}
h1 a{color:#333;font-size: 16px;display: inline-block;padding: 5px;border: 1px solid #ccc;
}
.cur-anchor{background-color: #ccc;
}
footer{height:100px;
}
复制代码

页面滑动与锚点的“完美交互”相关推荐

  1. html列表滑动字母索引,js实现做通讯录的索引滑动显示效果和滑动显示锚点效果...

    只做实现..完全没考虑性能优化.所以我实现了以后特别卡. 第一个是在通讯录右边的索引条上进行滑动,滑动到相应字母就跳转到相应字母的锚点上. 思路:监听touchmove事件,获取clientX和cli ...

  2. html5锚点平滑,使用锚点定位不改变url同时平滑的滑动到锚点位置,不会生硬的直接到锚点位置...

    使用锚点定位不改变url同时平滑的滑动到锚点位置,不会生硬的直接到锚点位置 对前端来说锚点是一个很好用的技术,它能快速定位到预先埋好的位置. 但是美中不足的是它会改变请求地址url,当用户使用了锚点的 ...

  3. Android解决ViewPager页面滑动空白bug和图片点击bug

    本demo 实现以下功能 1.页面数=1时,页面静止; 2.页面数=>2时,页面滑动不会产生空白 基本思路 当图片数量为1的时候,不让滑动, 当图片数量为2的时候,按原图片顺序再依次添加,图片数 ...

  4. 微信小程序仿支付宝年账单页面滑动的效果展示

    要有遥不可及的梦想,也要有脚踏实地的本事.----------- Grapefruit.Banuit Gang(香柚帮) 近来要做一个年账单页面,类似于支付宝年账单,就是对一年下单的总结,但是支付宝页 ...

  5. ios 横向滚轮效果_ios横向菜单+页面滑动

    ios横向菜单+页面滑动 查看次数:9122 下载次数:992 上传时间:2016-06-28 大小:11 B Demo: https://github.com/Super-lying/LyScrol ...

  6. Android之实现夸克浏览器书签和历史页面滑动时候右上角图标切换效果

    1 需求 实现夸克浏览器书签和历史页面滑动时候右上角图标切换效果,页面滑动的时候,图标也左右滑动,但是只是显示其中的一个 https://www.captainai.net/st/ 2 代码实现 xm ...

  7. Android之解决NestedScrollView嵌套ViewPager导致出现左右页面滑动冲突

    1 问题 NestedScrollView里面嵌勒ViewPager+TabLayout,导致在这个页面监听不到左右页面滑动,需要解决这个监听滑动问题. 2 解决办法 val nestedScroll ...

  8. android页面设置背景图片大小,android页面设置background为图片后,页面滑动掉帧问题...

    最近接手的一个android项目里面,有个viewpager+3个fragment的页面,就是很常见的可以左右滑动切换页面的那种布局.接手的时候告诉我,这个页面有卡顿现象,性能需要优化.一开始觉得是f ...

  9. css3层级穿透,css页面滑动穿透的两种解决办法

    这篇文章主要介绍了css如何防止页面滑动穿透,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 问题描述: 移动端当有 fixed 遮罩背景和弹出层时,在屏幕上滑动能够滑动背 ...

最新文章

  1. Redis的7000字笔记总结,超详细!
  2. ABAP动态创建数据DATA或对象Object
  3. matlab播放视频语句,matlab语句
  4. Linux在超级计算机领域一统天下
  5. RSA公钥体系 与在 ssh中免密的登陆的应用
  6. 【LeetCode】剑指 Offer 44. 数字序列中某一位的数字
  7. SpringCloud高频重点面试题,看这一篇就够了。
  8. 小程序入门学习19--springboot之HelloWorld
  9. 【loj3120】【CTS2019】珍珠
  10. 谈中国企业管理、中国企业管理软件为啥走错了道
  11. BI在企业数字化转型中的价值
  12. 德·摩根定律的验证(De Morgan’s Laws)
  13. 2018,我的这一年
  14. latex插图编号_LaTex技巧[26]:Latex重新为图片编号
  15. PostgreSQL数据库部署之 :PostgreSQL pgadmin4 the application server could not be contacted
  16. 计算机启动过程:MBR和BIOS
  17. 格拉姆角场(GAF)学习记录
  18. 查看计算机.net环境版本,电脑怎么查看.NET Framework版本号?
  19. 【解决方案】如何搭建运动场体育赛事直播方案:EasyCVR综合智能化体育赛事直播
  20. 文字图片行内垂直居中对齐方法

热门文章

  1. this与super
  2. SSRF(10)302跳转 Bypass
  3. 【web】React-hooks
  4. 《The Art Of Effective Rigging In Blender》笔记:手臂部分的IK/FK切换
  5. Java8常用循环遍历操作方式的效率对比
  6. trac 经验谈之(3)工作流篇
  7. 图像Lanczos3滤波——C实现
  8. golang结构体指针
  9. html 创建一个正方形,css 如何设置带有正方形项目的列表
  10. JSP爱心宠物诊所系统设计与实现