锚点链接是我们在开发中经常会用到的一个技术点,常见的常见有,页面内容过多,而我们不希望拿鼠标一直来回滚动,就需要用到锚点链接,以 " 目录 " 的方式来进行对应的跳转。

而在常见的项目中,锚点链接的使用方法是通过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中锚点链接的问题。

如有问题,请指出,接受批评。

个人微信公众号:

Logo

前往低代码交流专区

更多推荐