HTML & JS 锚点定位的几种方式及优缺陷

一、HTML 锚点定位

优点:
1、页面刷新依然锚点到对应位置
缺陷:
1、地址栏上会出现 #
2、没有丝滑滚动效果

第一种:绑定 id

<!DOCTYPE html>
<html>
<head>
	<title>Test</title>
</head>
<body>
<a href="#sixteen">点击</a>
<h1>1</h1>
<h1>2</h1>
<h1>3</h1>
<h1>4</h1>
<h1>5</h1>
<h1>6</h1>
<h1>7</h1>
<h1>8</h1>
<h1>9</h1>
<h1>10</h1>
<h1>11</h1>
<h1>12</h1>
<h1>13</h1>
<h1>14</h1>
<h1>15</h1>
<h1 id="sixteen">16</h1>
<h1>17</h1>
<h1>18</h1>
<h1>19</h1>
<h1>20</h1>
</body>
</html>

第二种:绑定 name

<!DOCTYPE html>
<html>
<head>
	<title>Test</title>
</head>
<body>
<a href="#sixteen">点击</a>
<h1>1</h1>
<h1>2</h1>
<h1>3</h1>
<h1>4</h1>
<h1>5</h1>
<h1>6</h1>
<h1>7</h1>
<h1>8</h1>
<h1>9</h1>
<h1>10</h1>
<h1>11</h1>
<h1>12</h1>
<h1>13</h1>
<h1>14</h1>
<h1>15</h1>
<a name="sixteen">16</a>
<h1>17</h1>
<h1>18</h1>
<h1>19</h1>
<h1>20</h1>
</body>
</html>

以上两种锚点方式效果图
在这里插入图片描述

二、JavaScript 锚点定位

优点:
1、可以结合提供 API 属性进行丝滑滚动
2、可以更细腻的控制滚动位置
缺陷:
1、页面刷新后无法保留原先滚动位置,需要增加额外代码。

第一种:借助 scrollTop & offsetTop

<!DOCTYPE html>
<html>
<head>
	<title>Test</title>
</head>
<body>
<button onclick="onTouch()">点击</button>
<h1>1</h1>
<h1>2</h1>
<h1>3</h1>
<h1>4</h1>
<h1>5</h1>
<h1>6</h1>
<h1>7</h1>
<h1>8</h1>
<h1>9</h1>
<h1>10</h1>
<h1>11</h1>
<h1>12</h1>
<h1>13</h1>
<h1>14</h1>
<h1>15</h1>
<h1 id="sixteen">16</h1>
<h1>17</h1>
<h1>18</h1>
<h1>19</h1>
<h1>20</h1>
</body>
<script type="text/javascript">
	function onTouch() {
		const sixteen = document.getElementById('sixteen')
		// 本案例默认滚动元素是 html ,你可以根据你需要的滚动元素进行设置。
		document.documentElement.scrollTop = sixteen.offsetTop
	}
</script>
</html>

效果图
在这里插入图片描述

第二种:借助 scrollTo & offsetTop

<!DOCTYPE html>
<html>
<head>
	<title>Test</title>
</head>
<body>
<button onclick="onTouch()">点击</button>
<h1>1</h1>
<h1>2</h1>
<h1>3</h1>
<h1>4</h1>
<h1>5</h1>
<h1>6</h1>
<h1>7</h1>
<h1>8</h1>
<h1>9</h1>
<h1>10</h1>
<h1>11</h1>
<h1>12</h1>
<h1>13</h1>
<h1>14</h1>
<h1>15</h1>
<h1 id="sixteen">16</h1>
<h1>17</h1>
<h1>18</h1>
<h1>19</h1>
<h1>20</h1>
</body>
<script type="text/javascript">
	function onTouch() {
		const sixteen = document.getElementById('sixteen')
		// 本案例默认滚动元素是 html ,你可以根据你需要的滚动元素进行设置。
		document.documentElement.scrollTo({
			top: sixteen.offsetTop,
			behavior: 'smooth' // 让滚动更丝滑
		})
	}
</script>
</html>

丝滑滚动效果图
在这里插入图片描述

第三种:借助 scrollIntoView

<!DOCTYPE html>
<html>
<head>
	<title>Test</title>
</head>
<body>
<button onclick="onTouch()">点击</button>
<h1>1</h1>
<h1>2</h1>
<h1>3</h1>
<h1>4</h1>
<h1>5</h1>
<h1>6</h1>
<h1>7</h1>
<h1>8</h1>
<h1>9</h1>
<h1>10</h1>
<h1>11</h1>
<h1>12</h1>
<h1>13</h1>
<h1>14</h1>
<h1>15</h1>
<h1 id="sixteen">16</h1>
<h1>17</h1>
<h1>18</h1>
<h1>19</h1>
<h1>20</h1>
</body>
<script type="text/javascript">
	function onTouch() {
		const sixteen = document.getElementById('sixteen')
		sixteen.scrollIntoView({}) // 你也可以设置丝滑滚动
	}
</script>
</html>
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cookcyq

请作者喝杯暖暖的奶茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值