vue列表如何自动滚动到制定位置
作者:王博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>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。