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 相关文章推荐
javascript实现二分查找法实现代码
Nov 12 Javascript
JavaScript几种形式的树结构菜单
May 10 Javascript
DWR实现模拟Google搜索效果实现原理及代码
Jan 30 Javascript
javascript不可用的问题探究
Oct 01 Javascript
javascipt匹配单行和多行注释的正则表达式
Nov 20 Javascript
js/jQuery简单实现选项卡功能
Jan 02 Javascript
javascript简单比较日期大小的方法
Jan 05 Javascript
AngularJS基础 ng-submit 指令简单示例
Aug 03 Javascript
JavaScript实现页面无操作倒计时退出
Oct 22 Javascript
浅述节点的创建及常见功能的实现
Dec 15 Javascript
js的函数的按值传递参数(实例讲解)
Nov 16 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
Nov 05 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类中Static方法效率测试代码
2010/10/17 PHP
PHP strncasecmp字符串比较的小技巧
2011/01/04 PHP
php json_encode值中大括号与花括号区别
2013/09/30 PHP
PHP函数strip_tags的一个bug浅析
2014/05/22 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
thinkPHP5.0框架环境变量配置方法
2017/03/17 PHP
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
2019/05/08 PHP
js输出列表实现代码
2010/09/12 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
jQuery中关于ScrollableGridPlugin.js(固定表头)插件的使用逐步解析
2014/07/17 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
基于jQuery实现响应式圆形图片轮播特效
2015/11/25 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
nodejs multer实现文件上传与下载
2017/05/10 NodeJs
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
详解vuex commit保存数据技巧
2018/12/25 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
详解ES6 扩展运算符的使用与注意事项
2020/11/12 Javascript
酷! 程序员用Python带你玩转冲顶大会
2018/01/17 Python
解决pycharm无法识别本地site-packages的问题
2018/10/13 Python
将pandas.dataframe的数据写入到文件中的方法
2018/12/07 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
python3.4 将16进制转成字符串的实例
2019/06/12 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
html5画布旋转效果示例
2014/01/27 HTML / CSS
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
技术总监岗位职责
2013/12/05 职场文书
调任通知
2015/04/21 职场文书
公司员工培训管理制度
2015/08/04 职场文书
行为习惯主题班会
2015/08/14 职场文书
企业愿景口号
2015/12/25 职场文书