Vue锚点链接

2020-09-11  本文已影响0人  坏丶毛病

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

而在常见的项目中,锚点链接的使用方法是通过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>
效果图: image

大家可能注意到url地址栏的变化,每次点击锚点会在地址栏后面加对应的地址。

但是vue是基于路由的,通过切换地址,这样就会影响vue的路由跳转。

我之前是弹框里有锚点链接,然后关闭弹窗,地址栏变化后,其他页面就是空的,除非切换成history模式。

但是history模式,打包部署又会出现一些其他问题。

也可能是我理解的不对( -.- 笑哭)

那么尝试其他方法时,找到了另一个接口

scrollIntoView()

这里通过获取dom元素,然后通过 scrollIntoView()让当前元素滚动到浏览器窗口的可视区域内。

document.getElementById('box1').scrollIntoView();

这样只要通过vue的点击事件,点击后匹配到对应元素进行滚动即可。

这里附上官方介绍:

Element.scrollIntoView() - Web API 接口参考

好了,以上就解决了vue中锚点链接的问题。

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

上一篇 下一篇

猜你喜欢

热点阅读