页面内锚点定位及跳转方法总结(推荐)


Posted in Javascript onApril 24, 2019

接着上一篇,其实是一个功能,本来感觉挺简单的一个问题,没想到遇到两个坎儿,无语。。。

上一篇是关于scroll事件绑定的问题,这一篇的问题是:点击锚点跳转到相应DIV的问题。

最简单的方法是锚点用<a>标签,在href属性中写入DIV的id。如下:

<!DOCTYPE html>
<html>
<head>
  <style>
    div {
      height: 800px;
      width: 400px;
      border: 2px solid black;
    }
    h2 {
      position: fixed;
      margin:50px 500px;
    }
  </style>
</head>
<body>
  <h2>
    <a href="#div1" rel="external nofollow" >to div1</a>
    <a href="#div2" rel="external nofollow" >to div2</a>
    <a href="#div3" rel="external nofollow" >to div3</a>
  </h2>
  <div id="div1">div1</div>
  <div id="div2">div2</div>
  <div id="div3">div3</div>
</body>
</html>

这种方法的缺点是点击锚点之后,浏览器的URL会发生变化,如果刷新可能会出现问题。 

第二种方式是在js事件中通过window.location.hash="divId"跳转,但地址也会发生变化,感觉跟第一种方法没区别,甚至更麻烦。

第三种方法是用animate属性,当点击锚点后,页面滚动到相应的DIV。接着上面的代码,具体添加如下代码:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
<script type="text/javascript"><br>$(document).ready(function() {
  $("#div1Link").click(function() {
    $("html, body").animate({
      scrollTop: $("#div1").offset().top }, {duration: 500,easing: "swing"});
    return false;
  });
  $("#div2Link").click(function() {
    $("html, body").animate({
      scrollTop: $("#div2").offset().top }, {duration: 500,easing: "swing"});
    return false;
  });
  $("#div3Link").click(function() {
    $("html, body").animate({
      scrollTop: $("#div3").offset().top }, {duration: 500,easing: "swing"});
    return false;
  });
});
1
</script>

注意:运行上面的脚本的之前,先将为锚点增加相应的id,同时去掉href属性。

 

$("html, body")可以替换为响应的div,如果不起作用,试着给该div增加overflow:scroll属性。

另外,脚本可以进一步优化,自己来试试

这样做的好处是:URL地址不会变,同时点击锚点时会自动响应scroll事件,不需要重新绑定。

缺点是:如果页面复杂的话,偏移值可能会发生变化需要算法辅助。

第四种方法是用js的srollIntoView方法,直接用:

document.getElementById("divId").scrollIntoView();

这种方法的好处,是URL不会变,同时能够响应相应的scroll事件,不需要算法什么的。

推介大家用第四种,我依次试了前三种,都有各种问题(可能是页面较复杂的缘故吧,当然,技术不咋也是。。。)  

以上所述是小编给大家介绍的页面内锚点定位及跳转方法总结详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript实现上传图片前的预览(TX的面试题)
Aug 20 Javascript
W3C Group的JavaScript1.8 新特性介绍
May 19 Javascript
javascript+html5实现仿flash滚动播放图片的方法
Apr 27 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
Jul 27 Javascript
vue-star评星组件开发实例
Mar 01 Javascript
vue.js使用v-if实现显示与隐藏功能示例
Jul 06 Javascript
vue form check 表单验证的实现代码
Dec 09 Javascript
vue 项目build错误异常的解决方法
Apr 22 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
Nov 10 Javascript
小程序api实现promise封装过程解析
Nov 21 Javascript
0基础学习前端开发的一些建议
Jul 14 Javascript
antd日期选择器禁止选择当天之前的时间操作
Oct 29 Javascript
详解Vue项目中实现锚点定位
Apr 24 #Javascript
微信小程序中使用echarts的实现方法
Apr 24 #Javascript
基于mpvue小程序使用echarts画折线图的方法示例
Apr 24 #Javascript
详解微信小程序开发用户授权登陆
Apr 24 #Javascript
微信小程序实现的一键拨号功能示例
Apr 24 #Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
Apr 24 #Javascript
微信小程序实现的图片保存功能示例
Apr 24 #Javascript
You might like
解析PHP处理换行符的问题 \r\n
2013/06/13 PHP
完美的php分页类
2017/10/24 PHP
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
Extjs中ComboBox加载并赋初值的实现方法
2012/03/22 Javascript
得到jQuery detach()后节点中的某个值实现代码
2013/02/05 Javascript
javascript:void(0)使用探讨
2013/08/27 Javascript
深入理解JavaScript中的箭头函数
2015/07/28 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
JS之相等操作符详解
2016/09/13 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
使用mock.js随机数据和使用express输出json接口的实现方法
2018/01/07 Javascript
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
Pandas读写CSV文件的方法示例
2019/03/27 Python
python找出一个列表中相同元素的多个索引实例
2019/06/11 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
python实现机器人卡牌
2019/10/06 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
2020/02/26 Python
python为QT程序添加图标的方法详解
2020/03/09 Python
python super()函数的基本使用
2020/09/10 Python
详解Scrapy Redis入门实战
2020/11/18 Python
Python 图片处理库exifread详解
2021/02/25 Python
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
WSDL的操作类型主要有几种
2013/07/19 面试题
财务管理职业生涯规划范文
2013/12/27 职场文书
缓刑人员的思想汇报
2014/01/11 职场文书
金融行业职业生涯规划范文
2014/01/17 职场文书
2014年公司庆元旦活动方案
2014/03/05 职场文书
二年级评语大全
2014/04/23 职场文书
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python