点击标题滚动到指定位置

当我们想要点击页面某个元素让其滚动到指定位置时,我们可以时用的方法有很多;比较直接一点的是使用a标签自带的锚点,如下所示,但是这样进行跳转页面显示的效果会比较生硬;

a标签示例:

<template>
  <div>
    <a href="#test">显示文本</a>
    <div style="height:2000px"> </div>

    <div>
      <h2 id="test">这是一个标题</h2>
      <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur officia         sapiente delectus libero odio, dicta ipsum sunt eveniet molestias dolore sint, modi suscipit, dignissimos consequuntur autem repudiandae illum quidem sequi?</p>
    </div>

    <div style="height:2000px"> </div>
  </div>
</template>

所以我们可以使用scrollIntoView() 方法,该方法会滚动元素的父容器,使被调用 scrollIntoView() 的元素对用户可见。

scrollIntoView() 方法示例:

<template>
  <div>
    <div @click="showNode">显示文本</div>
    <div style="height:2000px"> </div>
    <div id="text_node">
      <h2 id="test">这是一个标题</h2>
      <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur officia sapiente delectus libero odio, dicta ipsum sunt eveniet molestias dolore sint, modi suscipit, dignissimos consequuntur autem repudiandae illum quidem sequi?</p>
    </div>
    <div style="height:2000px"> </div>
  </div>
</template>

<script>
export default {
  methods: {
    showNode() {
      document.getElementById('text_node').scrollIntoView() // 默认滚动至节点置顶
      document.getElementById('text_node').scrollIntoView(false) // 默认滚动至节点显示
      document.getElementById('text_node').scrollIntoView({ behavior: "smooth", block: "end", inline: "nearest" }); // 见下文
    }
  }
}
</script>

scrollIntoView() 方法的使用

scrollIntoView([alignToTop,scrollIntoViewOptions ]) 方法可以携带最多两个参数;

 alignToTop 可选

      如果为 true,元素的顶端将和其所在滚动区的可视区域的顶端对齐。这是这个参数的默认值。

      如果为 false,元素的底端将和其所在滚动区的可视区域的底端对齐。

 scrollIntoViewOptions 可选

      behavior 可选

            定义动画过渡效果,auto 或 smooth 之一。默认为 auto。

      block 可选

            定义垂直方向的对齐,start、center、end 或 nearest 之一。默认为 start。

      inline 可选

            定义水平方向的对齐,start、center、end 或 nearest 之一。默认为 nearest。

总结:

        scrollIntoView() 方法不仅可以控制显示位置,还能设置滚动过度时的动画效果,会有比较好的用户体验。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例代码,实现了一个顶部导航栏,点击右边的标题会跑到中间: ``` <template> <div class="nav"> <div class="nav-left"> <span class="nav-title">左侧标题</span> </div> <div class="nav-center"> <span class="nav-title">{{ currentTitle }}</span> </div> <div class="nav-right"> <span class="nav-title" @click="scrollToCenter">右侧标题</span> </div> </div> </template> <script> export default { data() { return { currentTitle: '中间标题' } }, methods: { scrollToCenter() { // 获取中间标题位置 const centerTitle = document.querySelector('.nav-center .nav-title') const centerTitleRect = centerTitle.getBoundingClientRect() const centerTitleOffset = centerTitleRect.left + centerTitleRect.width / 2 // 滚动到中间标题位置 window.scrollTo({ left: centerTitleOffset - window.innerWidth / 2, behavior: 'smooth' }) } } } </script> <style scoped> .nav { display: flex; align-items: center; justify-content: space-between; height: 50px; background-color: #eee; font-size: 18px; font-weight: bold; padding: 0 20px; } .nav-title { cursor: pointer; } .nav-center { flex-grow: 1; text-align: center; } </style> ``` 在这个示例中,顶部导航栏被划分为三个部分:左侧、中间和右侧。中间部分显示当前的标题,右侧部分的标题点击时,页面会滚动到中间标题位置。 为了实现滚动效果,我们使用了 `window.scrollTo()` 方法,将页面滚动指定位置。在这个方法中,我们需要传入一个对象,包含两个属性:`left`(水平滚动距离)和 `behavior`(滚动行为,可以是 "auto"、"smooth" 或 "instant")。 注意,在 `scrollTo()` 方法中计算滚动距离时,我们使用了 `window.innerWidth` 属性,这是窗口的内部宽度,也就是视口的宽度,不包括滚动条的宽度。我们可以用这个属性计算出中间标题位置和窗口的滚动距离。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值