功能描述

想了半天 还是没有取好名字,这是一个蛮难形容的效果,不过现在的很多门户网站都会有这样的效果。

举个栗子:
页面分为四个区域:
当浏览到页面的相应区域时,这块指示牌上的对应版块高亮显示。并且点击指示牌上的对应版块,也可以将页面滑动到指定的区域。
知识点概要
 
1.$(window).scroll()
    当用户滚动指定的元素时,会发生 scroll 事件。scroll 事件适用于所有可滚动的元素和 window 对象(这里主要监听浏览器窗口)。

scroll() 方法触发 scroll 事件,或规定当发生 scroll 事件时运行的函数。

2.scrollTop()

    scrollTop() 方法返回或设置匹配元素的滚动条的垂直位置。scroll top offset 指的是滚动条相对于其顶部的偏移。

如果该方法未设置参数,则返回以像素计的相对滚动条顶部的偏移。

3.offset()

    offset() 方法返回或设置匹配元素相对于文档的偏移(位置)。返回第一个匹配元素的偏移坐标。

该方法返回的对象包含两个整型属性:top 和 left,以像素计。此方法只对可见元素有效。

 
功能实现
首先我们需要将页面上的区域对应的DOM块插入一个数组中,方便获取每块区域在页面中的位置。
1     var top_Arr =[];
2     varAbout_main= $(".About_main")
3     //将所需的区域对应的Class插入jq选择器队列中,并通过each遍历到数组中
4     $(".About_main,.About_main1").each(function(){
5     top_Arr.push($(this))
6     })

我的html代码 布局如下:
指示牌的html代码为:

 1     <divclass="About_nav">
 2     <divclass="tab1">
 3     <ul>
 4     <liclass="slt"><imgclass="sanjiao"style="bottom:0; left:78px;"src="data:images/sanjiao.png"/><astyle="background-position:18px-26px;">公司简介</a></li>
 5     <li><imgclass="sanjiao"style="bottom:0; left:261px;"src="data:images/sanjiao.png"/><astyle="background-position:-32px0;">发展历程</a></li>
 6     <li><imgclass="sanjiao"style="bottom:0; left:444px;"src="data:images/sanjiao.png"/><astyle="background-position:-136px0;">团队风采</a></li>
 7     <li><imgclass="sanjiao"style="bottom:0; left:627px;"src="data:images/sanjiao.png"/><astyle="background-position:-80px0;">领导关怀</a></li>
 8     </ul>
 9     </div>
10     </div>

scroll事件代码如下:

 1     $(window).scroll(function(){
 2     About_main.each(function(i){
 3     //将对应区域距离页面头部的距离 保存到一个变量中
 4     var sss =($(this).offset().top)-200,
 5     //滚动条已滚动的距离
 6     winST = $(window).scrollTop(),
 7     //判断当前页面是否处于某个区域中
 8     inArea = sss < winST && winST <(sss + $(this).height());
 9     if(inArea){
10     //移除所有高亮class
11     $(".tab1 li.slt").removeClass("slt")
12     //将所有指示牌图标改为为红色背景
13     $(".tab1 li a").position_y(0)
14     //将区域对应的指示牌图标变为白色背景 并且添加高亮class
15     $(".tab1 li").eq(i).addClass("slt").find("a").position_y(-26)
16     }
17     })
18     })

代码中的position_y为修改background-position的对应y轴的值:

 1     $.fn.extend({
 2     position_x:function(x){
 3     var _this = $(this)
 4     _this.each(function(){
 5     var y = $(this).css("background-position").split('px')[1]
 6     $(this).css("background-position", x +"px"+ y +"px")
 7     })
 8     return _this
 9     },
10     position_y:function(y){
11     var _this = $(this)
12     _this.each(function(){
13     var x = $(this).css("background-position").split('px')[0]
14     $(this).css("background-position", x +"px "+ y +"px")
15     })
16     return _this
17     }
18     })

然后是点击指示牌的某版块 可以将页面滑动到版块对应的区域:

1     $(".tab1 li").click(function(){
2     var index = $(this).index()
3     $('body,html').animate({ scrollTop: top_Arr[index].offset().top -100},800);
4     })

具体的功能代码已经全部贴上,基本上的问题 也在注释中已经注明,其中 需要特别提一下的是:
1.sss =($(this).offset().top)-200

这里为什么要-200?因为我这里的指示牌是fixed定位在页面的顶部,如果没有这200像素的偏移,将会导致指示牌遮挡住区域的内容。
2.inArea = sss < winST && winST <(sss + $(this).height());
  贴个图片更形象一点(画的有点难看,各位看官意思下看得懂就行。。),下图所示对应的 sss和winST都是指什么。
这块代码的意思就是 当页面处于区域范围之中时,返回true。sss是区域块到页面顶部的距离,假如sss < winST 说明当前看得见的页面处于这个区域的上边框的下方。winST <(sss + $(this).height())指的是看得见的部分处于对应区域的下边框的上方。然而满足这两个条件就可以说明,当前的可视区域处于对应的区域范围中。
 
总结
这段功能的实现 并不是有多么高的技术含量,是很基本的方法的运用。贴出来也是为一些想实现该效果,但是心中没有头绪,只能找另外的插件来实现的前端道友看看的,请大神看到这段代码,留下宝贵的意见 因为代码还是存在很多问题或者需要优化。
 
 
 
 
 
 
来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/cydiacen/p/5458857.html

用jq实现简单的锚点切换相关推荐

  1. php js多语言切换,php简单实现多语言切换的方法_php技巧

    本文实例讲述了php简单实现多语言切换的方法.分享给大家供大家参考,具体如下: 1.主程序代码: $value){ if($_SESSION["language"] == $val ...

  2. dw在php图片滑动切换效果,超简单的图片左右切换滑动

    网上看过很多图片左右切换滑动的效果,不过大都是使用插件实现.插件虽方便,但是对于新手的学习并不是最好的.本文使用jquery这个由原生的JavaScript封装的库,用最简短的代码实现此功能 效果预览 ...

  3. 网课脚本教程 【基础】(3) 使用 jq 制作简单脚本

    欢迎来到系列教程 :网课脚本编写教程 目录 为什么使用jq? 制作简单脚本 找到任意一个登陆界面 使用 键盘的 F12 审查元素 点击审查箭头 鼠标移动到 手机号和密码的输入框 编写自动化脚本 为什么 ...

  4. Unity Shader 之 实现简单的动态过场切换图片的效果

    Unity Shader 之 实现简单的动态过场切换图片的效果 目录 Unity Shader 之 实现简单的动态过场切换图片的效果 一.简单介绍

  5. 使用jq简单实现导航栏切换对应展现内容

    js代码部分$('.nav_menu_ul>li').click(function () { //点击导航栏var index = $(this).index() //获取导航栏的下标 $(&q ...

  6. 编程练习--简单实用的选项卡切换效果

    有网友私信我,说我前几篇写编程练习的例子让他们感觉我写代码的方式和他们不一样,让他们很受启发,希望我多写一些这样的例子.他们帮我总结了一下,主要表现在以下三个方面: 1. 代码外观整洁清爽. 2.喜欢 ...

  7. 《Python+Kivy(App开发)从入门到实践》自学笔记:简单UX部件——ToggleButton切换按钮

    章节知识点总揽 4.8 ToggleButton切换按钮 ToggleButton的作用与复选框类似,当我们接触或点击它时,他会在'normal'或'down'两种状态之间来回切换.ToggleBut ...

  8. scrollIntoView()实现简单的锚点定位

    综述 锚点定位是一个再熟悉不过的操作了,通常会用a标签href=#XX去实现,不过这样做,有一个问题,就是页面会有刷新感,而且地址栏会有变化,F5刷新,则#XXX还是显示在地址栏里,这样如果要进一步进 ...

  9. uniapp实现简单的锚点定位

    直接使用scroll-view的scroll-into-view属性就可以实现锚点效果,比较方便简单.那么需要用到scroll-view那些参数呢,下面具体讲讲: scroll-x | scroll- ...

最新文章

  1. 三万字,Spark学习笔记
  2. 基于PSR-0编码规范开发一套PHP-MVC框架(一)
  3. SpringMVC的Controller方法返回值
  4. 并发的发展历史-线程的出现
  5. HttpClientFactory 使用说明 及 对 HttpClient 的回顾和对比
  6. 4月5G手机出货量出炉:5G未成主流,你换机了吗?
  7. 计算机科学技术基础c,计算机科学技术基础.ppt
  8. Linux shell 中的那些你值得一试的小把戏
  9. PCB特征阻抗计算工具——Polar SI9000软件下载与安装教程
  10. 互联网推广有几种途径呢?
  11. Alfred效率神器
  12. python计算相关性显著性p值_基于python如何实现计算两组数据P值
  13. python一键合并excel表格
  14. macbook pro 2017版电池问题,八九十的电,用着忽然关机,再开机提示充电才行。
  15. Unity线程与协程
  16. 美团后台开发一面算法题
  17. 候鸟防关联浏览器原理
  18. 计算机操作系统观后感,试用Deepin深度操作系统有感
  19. 如何检测磁石玩具的磁通量指数
  20. 2023年 PCB产业危机,全面价格战恐将开启

热门文章

  1. 厉害了!麟哥新书登顶京东销量排行榜!
  2. 计算思维导论-为什么要学习计算思维
  3. linux与hadoop常用命令梳理
  4. pytorch处理CK+数据集
  5. 排队论在食堂排队中的运用
  6. 明明有网 但是下边显示小地球怎么办 一招解决
  7. 如何在给虚拟机设置静态IP
  8. 微型计算机硬件系统主要包括储存器,计算机的硬件系统主要包括运算器、控制器、存储器、输出设备和( )。...
  9. Linux学习从入门到精通推荐书籍
  10. Adobe LiveCycle Designer