vue列表如何自动滚动到制定位置

 更新时间:2023年10月09日 08:58:30   作者:王博wangbo  
这篇文章主要介绍了vue列表如何自动滚动到制定位置问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

背景

业务开发中遇到一个需求,是要求跳转到新页面,并默认选中内容,如果内容在列表的位置靠后,就需要滚动到可见范围内。

实现

1. 循环实现列表,为每个item添加id,**:id="'item' + index"**,方便后续查找对应项 

<div v-for="(item,index) in dataList" :id="'item' + index" :key="index" class="item">
   <span>item: {{ item.name }}</span>
</div>

2. 待列表加载完后,执行滚动事件

// count 默认选中内容的序号
document.getElementById('item' + count).scrollIntoView()

知识点

1. scrollIntoView:Element.scrollIntoView() 方法让当前的元素滚动到浏览器窗口的可视区域内。

2. 未避免事件执行失败,一定要在页面加载完成才能触发事件,

推荐2种方式

  • 2.1 在mounted事件中触发   
  • 2.2 在执行事件时,用this.$nextTick保证页面加载完成
 this.$nextTick(() => {
    document.getElementById('item' + count).scrollIntoView()
 })

代码

以下是一个小demo,可直接执行

<template>
  <div class="white-body-view">
    <div class="content-view">
      <div v-for="(item,index) in dataList" :id="'item' + index" :key="index" class="item">
        <span>item: {{ item.name }}</span>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      dataList: [
        {
          name: '1'
        },
        {
          name: '2'
        },
        {
          name: '3'
        },
        {
          name: '4'
        },
        {
          name: '5'
        },
        {
          name: '6'
        },
        {
          name: '7'
        },
        {
          name: '8'
        },
        {
          name: '9'
        },
        {
          name: '10'
        },
        {
          name: '11'
        },
        {
          name: '12'
        }
      ]
    }
  },
  mounted() {
    document.getElementById('item5').scrollIntoView()
  }
}
</script>
<style lang="scss">
.content-view {
  height: 200px;
  width: 200px;
  overflow: auto;
}
.item {
  line-height: 40px;
}
</style>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

最新评论