锚点链接是我们在开发中经常会用到的一个技术点,常见的常见有,页面内容过多,而我们不希望拿鼠标一直来回滚动,就需要用到锚点链接,以 " 目录 " 的方式来进行对应的跳转。
而在常见的项目中,锚点链接的使用方法是通过a标签的href属性跳转到某一个元素的id,来找到对应元素的位置,实现效果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
html,body{
width: 100%;
height: 100%;
}
.left{
width: 200px;
height: 100%;
float: left;
border-right: 1px solid black;
}
a{
display: block;
color: #f60;
text-decoration: none;
font-size: 20px;
text-align: center;
margin-bottom: 10px;
}
.right{
width: calc(100% - 201px);
height: 100%;
float: left;
overflow-x: hidden;
overflow-y: auto;
}
</style>
</head>
<body>
<div class="left">
<!-- 锚点的名称 -->
<a href="#box1" >位置一</a>
<a href="#box2" >位置二</a>
</div>
<div class="right">
<div style="height:1000px;" id="box1">
<h1>位置一</h1>
</div>
<div style="height:1000px;" id="box2">
<h1>位置二</h1>
</div>
</div>
</body>
</html>
效果图:大家可能注意到url地址栏的变化,每次点击锚点会在地址栏后面加对应的地址。
但是vue是基于路由的,通过切换地址,这样就会影响vue的路由跳转。
我之前是弹框里有锚点链接,然后关闭弹窗,地址栏变化后,其他页面就是空的,除非切换成history模式。
但是history模式,打包部署又会出现一些其他问题。
也可能是我理解的不对( -.- 笑哭)
那么尝试其他方法时,找到了另一个接口
scrollIntoView()
这里通过获取dom元素,然后通过 scrollIntoView()让当前元素滚动到浏览器窗口的可视区域内。
document.getElementById('box1').scrollIntoView();
这样只要通过vue的点击事件,点击后匹配到对应元素进行滚动即可。
这里附上官方介绍:
Element.scrollIntoView() - Web API 接口参考
好了,以上就解决了vue中锚点链接的问题。
如有问题,请指出,接受批评。