项目中经常会出现点击跳转锚点的方法,比如给一个a标签一个href=“#锚点”,然后要跳的锚点给个id=“锚点”,这样就实现简单的跳转,但是这样在url地址栏后面都会出现一个诸如www.geekjc.com/#锚点,然后你点击给一次后退都是退回上一个选择的锚点url,这里总结4个跳转锚点的方法。
第一种方法
- 也是最简单的方法是锚点用标签,在href属性中写入div的id。如下:
1<style>
2 div {
3 height: 800px;
4 width: 400px;
5 border: 2px solid black;
6 }
7 h2 {
8 position: fixed;
9 margin:50px 500px;
10 }
11</style>
12<h2>
13 <a href="#div1">to div1</a>
14 <a href="#div2">to div2</a>
15 <a href="#div3">to div3</a>
16</h2>
17<div id="div1">div1</div>
18<div id="div2">div2</div>
19<div id="div3">div3</div>`
这种方法的缺点是点击锚点之后,浏览器的URL会发生变化,如果刷新可能会出现问题。
第二种方法
- 是在js事件中通过
1window.location.hash="divId"
- 跳转,但地址也会发生变化,感觉跟第一种方法没区别,甚至更麻烦。
第三种方法
- 是用animate属性,当点击锚点后,页面滚动到相应的DIV。接着上面的代码,具体添加如下代码:
1$(document).ready(function( ) {
2 $("#div1Link").click(function( ) {
3 $("html, body").animate({
4 scrollTop: $("#div1").offset().top
5 }, {duration: 500,easing: "swing"} );
6 return false;
7 });
8 $("#div2Link").click(function( ) {
9 $("html, body").animate({
10 scrollTop: $("#div2").offset().top }, {duration: 500,easing: "swing"});
11 return false;
12 });
13 $("#div3Link").click(function( ) {
14 $("html, body").animate({
15 scrollTop: $("#div3").offset().top }, {duration: 500,easing: "swing"});
16 return false;
17 });
18});
注意:运行上面的脚本的之前,先将为锚点增加相应的id,同时去掉href属性。 $(“html, body”)可以替换为响应的div,如果不起作用,试着给该div增加overflow:scroll属性。 另外,脚本可以进一步优化,自己来试试 这样做的好处是:URL地址不会变,同时点击锚点时会自动响应scroll事件,不需要重新绑定。 缺点是:如果页面复杂的话,偏移值可能会发生变化需要算法辅助。
第四种方法
- 是用js的srollIntoView方法,直接用:
1document.getElementById("divId").scrollIntoView(); // 比如:
2document.querySelector("#roll1").onclick = function( ){
3 document.querySelector("#roll1_top").scrollIntoView(true);
4}
- 这里就是点击id是#roll1的元素可以滚动到id是#roll1_top的地方,这里的#roll1和#roll1_top最好是一一对应的, 这种方法的好处,是URL不会变,同时能够响应相应的scroll事件,不需要算法什么的。代码如下:
1<html>
2 <head>
3 <title>HTML5_ScrollInToView方法</title>
4 <meta charset="utf-8">
5 <style type="text/css">
6 #myDiv{
7 height:900px;
8 background-color:gray;
9 }
10 #roll_top{
11 height:900px;
12 background-color:green;
13 color:#FFF;
14 font-size:50px;
15 position:relative;
16 }
17 #bottom{
18 position:absolute;
19 display:block;
20 left;0;bottom:0;
21 }
22 </style>
23 </head>
24 <body>
25 <button id="roll1">scrollIntoView(false)</button>
26 <button id="roll2">scrollIntoView(true)</button>
27 <div id="myDiv"></div>
28 <div id="roll_top">
29 scrollIntoView(ture)元素上边框与视窗顶部齐平
30 <span id="bottom">scrollIntoView(false)元素下边框与视窗底部齐平</span>
31 </div>
32 </body>
33</html>
- javascript部分
1window.onload = function( ){
2 /* 如果滚动页面也是DOM没有解决的一个问题。为了解决这个问题,浏览器实现了一下方法, 以方便开发人员如何更好的控制页面的滚动。在各种专有方法中,HTML5选择了scrollIntoView() 作为标准方法。 scrollIntoView()可以在所有的HTML元素上调用,通过滚动浏览器窗口或某个容器元素, 调用元素就可以出现在视窗中。如果给该方法传入true作为参数,或者不传入任何参数,那么 窗口滚动之后会让调动元素顶部和视窗顶部尽可能齐平。如果传入false作为参数,调用元素 会尽可能全部出现在视口中(可能的话,调用元素的底部会与视口的顶部齐平。)不过顶部 不一定齐平,例如: //让元素可见 document.forms[0].scrollIntoView(); 当页面发生变化时,一般会用这个方法来吸引用户注意力。实际上,为某个元素设置焦点也 会导致浏览器滚动显示获得焦点的元素。 支持该方法的浏览器有 IE、Firefox、Safari和Opera。 */
3 document.querySelector("#roll1").onclick = function(){
4 document.querySelector("#roll_top").scrollIntoView(false);
5 }
6 document.querySelector("#roll2").onclick = function(){
7 document.querySelector("#roll_top").scrollIntoView(true);
8 }
9}
个人笔记记录 2021 ~ 2025