Vue2 锚点定位,滚动效果回到顶部

锚点定位及跳转(url不发生变化)

HTML5选择了scrollIntoView() 作为标准方法,scrollIntoView()可以在所有的HTML元素上调用。

通过滚动浏览器窗口或某个容器元素,调用元素就可以出现在视窗中。

如果给该方法传入true作为参数,或者不传入任何参数,那么 窗口滚动之后会让调动元素顶部和视窗顶部尽可能齐平。

如果给该方法传入false作为参数,调用元素会尽可能全部出现在视口中(可能的话,调用元素的底部会与视口的顶部齐平)不过顶部不一定齐平。

<template>
    <div>
        <div id='header'></div>
        <div class='footer' @click='returnTop'></div>
    </div>
</template>
methods:{
  returnTop(){
   document.querySelector("#header").scrollIntoView(true);
  }
 }
//document.querySelector(“要返回地方的id”).scrollIntoView(true);

点击回到顶部(滚动效果)

<template>
    <div>
        <div id='header'></div>
        <div class='footer' @click='toTop'></div>
    </div>
</template>
methods:{
  toTop(){
      let top = document.documentElement.scrollTop || document.body.scrollTop;
      // 实现滚动效果 
      const timeTop = setInterval(() => {
        document.body.scrollTop = document.documentElement.scrollTop = top -= 50;
        if (top <= 0) {
          clearInterval(timeTop);
        }
      }, 10);
 }

### 如何在 Vue 中实现菜单点定位 为了实现在 Vue 项目中的菜单点定位功能,需考虑 DOM 元素的位置计算以及视图更新机制。下面提供一种方法来解决这个问题。 #### 计算元素位置并平滑滚动到目标位置 通过 JavaScript 的 `element.getBoundingClientRect()` 方法获取相对于视口的坐标信息,这有助于更精确地控制滚动行为[^1]: ```javascript methods: { selectMenu(index) { let targetElement = document.getElementById(`rightLi${index}`); if (!targetElement) return; // 获取相对视窗顶部的距离 let rect = targetElement.getBoundingClientRect(); // 考虑导航栏高度等因素调整偏移量 const offset = 20; // 假设导航栏高为20px window.scrollTo({ top: rect.top + window.scrollY - offset, behavior: 'smooth' }); } } ``` 这种方法能够确保每次点击不同索引时都能正确无误地跳转至相应部分,并且支持浏览器内置的平滑滚动效果。 #### 处理页面加载后的初始状态设置 如果希望页面初次加载就能自动滚定位于某个特定节,则可以在组件挂载完成后执行上述逻辑: ```javascript mounted() { this.selectMenu(this.defaultIndex || 0); }, ``` 其中 `defaultIndex` 是默认选中的菜单项下标,默认情况下指向第一个选项。 #### 组件模板结构示意 对于 HTML 部分,保持原有布局不变即可,在适当的地方添加 ID 属性以便于 JS 定位操作: ```html <ul> <li v-for="(item, index) in items" :key="index"> <a href="#" @click.prevent="selectMenu(index)"> {{ item.name }} </a> </li> </ul> <div ref="contentWrapper"> <!-- 各个章节的内容 --> <section id="rightLi0">...</section> <section id="rightLi1">...</section> ... </div> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值