一、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>