JS如何实现在页面上快速定位(锚点跳转问题)


Posted in Javascript onAugust 14, 2017

本文介绍了JS如何实现在页面上快速定位(锚点跳转问题),分享给大家,具体如下:

1. 锚点跳转简介

锚点其实就是可以让页面定位到某个位置上的点。在高度较高的页面中经常见到。

锚点跳转有两种形式:

  • a标签 + name / href 属性
  • 使用标签的id属性

在html 4.0以前,只有使用 <a> 标签的 name 属性才能创建片段标识符。id 属性的出现,使所有 HTML 或 XHTML 元素都可以是片段标识符。这是因为 id 标识符几乎可以用在所有的标签中。<a> 标签为了能够和以前的版本相兼容而保留了 name 属性,同时也可以使用 id 属性。这些属性可以相互交换使用,可以把 id 属性看作是 name 属性的升级版本。name 和 id 属性都可以与 href 属性结合起来使用,这样一个 <a> 标签就可以同时作为超链接和片段标识符使用。

<a href="#he" rel="external nofollow" rel="external nofollow" >波轮洗衣机介绍</a>
<a href="#f" rel="external nofollow" ></a>

但是这种方法使用了一个空标签,而且有时候会出现锚点失效。所以建议采用id来绑定锚点,代码如下:

<a href="#he" rel="external nofollow" rel="external nofollow" >波轮洗衣机介绍</a><h2 id="#de">波轮洗衣机介绍</h2>

2. 含锚点跳转的URL地址

window.location.hash

【1】关于#

在页面的制作中,“#”的符号很常见,并且具有通用性。基本上,其表示的含义是id选择符。同样的,在页面的URL中,#也可以理解为id选择符之意,也就是页面跳转到含URL指向的id标签处。
例如输入一个地址https://3water.com/view/121414.htm?pf=1#3

这个地址中末尾有个'#',这个就相当于告诉浏览器要跳转了,#后面跟着的3表示会在https://3water.com/view/121416.htm?pf=1的页面中寻找符合#3特点的标签并且执行跳转。

【2】关于空锚点指向

如果URL中的#后面跟随的字符id在文中找不到,就会有两种情况:如果是在当前页面,除了URL地址变化了,其他的不会改变,页面不会有跳转;如果是从其他页面跳转过来,则页面会在顶部显示,'#'基本就是摆设。

【3】window.location.hash

用来获取或设置页面的标签值。https://3water.com/article/22656.htm?dasdsa

3. Jquery下锚点的平滑跳转。

如果让页面平滑滚动到一个id为box的元素处,则JQuery代码只要一句话,关键位置如下:

$('html, body').animate({scrollTop: $('#box').offset().top}, 1000)

JS原生实现。

scrollTo() 方法可把内容滚动到指定的坐标。

scrollTo(xpos,ypos);

4. IE下锚点刷新失效及JQuery下的解决

【1】关于锚点刷新失效

锚点刷新失效就是指当按下刷新键F5时,即使此时URL的后面就随锚点,此锚点也是不起作用的。

【2】在Jquery中,不难实现。可以根据URL获取锚点,从而进一步获得对应锚点对象,然后再让页面的滚动高度为其距离页面

顶部的偏移值就可以了。使得页面无论是重新载入还是其刷新,其后面的锚点都起作用。

$(function() {
  var url = window.location.toString();
  var id = url.split('#')[1];
  if (id) {
    var t = $('#' + id).offset().top;
    $(window).scrollTop(t);
  }
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery.jstree 增加节点的双击事件代码
Jul 27 Javascript
JQuery拖拽元素改变大小尺寸实现代码
Dec 10 Javascript
跟我学习javascript的闭包
Nov 16 Javascript
详解JavaScript基于面向对象之创建对象(1)
Dec 10 Javascript
jQuery实现简单的DIV拖动效果
Feb 19 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
Jan 10 Javascript
原生JS上传大文件显示进度条 php上传文件代码
Mar 27 Javascript
React中常见的动画实现的几种方式
Jan 10 Javascript
使用Angular CLI从蓝本生成代码详解
Mar 24 Javascript
150行代码带你实现微信小程序中的数据侦听
May 17 Javascript
django中使用vue.js的要点总结
Jul 07 Javascript
微信小程序实现禁止分享代码实例
Oct 19 Javascript
JavaScript实现动态添加Form表单元素的方法示例
Aug 14 #Javascript
JavaScript实现的搜索及高亮显示功能示例
Aug 14 #Javascript
带你了解session和cookie作用原理区别和用法
Aug 14 #Javascript
react.js使用webpack搭配环境的入门教程
Aug 14 #Javascript
JS原生数据双向绑定实现代码
Aug 14 #Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
Aug 14 #jQuery
关于在mongoose中填充外键的方法详解
Aug 14 #Javascript
You might like
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
设置php页面编码的两种方法示例介绍
2014/03/03 PHP
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
php计算函数执行时间的方法
2015/03/20 PHP
php分页查询的简单实现代码
2017/03/14 PHP
共享自己写一个框架DreamScript
2007/01/20 Javascript
你必须知道的Javascript知识点之&quot;单线程事件驱动&quot;的使用
2013/04/23 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
Knockoutjs 学习系列(二)花式捆绑
2016/06/07 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
js 输入框 正则表达式(菜鸟必看教程)
2017/02/19 Javascript
JS正则表达式验证密码格式的集中情况总结
2017/02/23 Javascript
Node.js实现发送邮件功能
2017/11/06 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
微信小程序日期选择器实例代码
2018/07/18 Javascript
微信小程序实现星星评价效果
2018/11/02 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
vue实现浏览器全屏展示功能
2019/11/27 Javascript
python批量修改文件名的实现代码
2014/09/01 Python
django model去掉unique_together报错的解决方案
2016/10/18 Python
python3中os.path模块下常用的用法总结【推荐】
2018/09/16 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
Python devel安装失败问题解决方案
2020/06/09 Python
Python如何执行精确的浮点数运算
2020/07/31 Python
详解移动端h5页面根据屏幕适配的四种方案
2020/04/15 HTML / CSS
享誉全球的多元化时尚精品购物平台:Farfetch发发奇(支持中文)
2017/08/08 全球购物
.net面试题
2015/12/22 面试题
岗位廉洁从业承诺书
2014/03/28 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书
导游词之山西关帝庙
2019/11/01 职场文书
用Python简陋模拟n阶魔方
2021/04/17 Python
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
2022/04/13 Java/Android