vue 列表自动滚动到制定位置
背景:业务开发中遇到一个需求,是要求跳转到新页面,并默认选中内容,如果内容在列表的位置靠后,就需要滚动到可见范围内。实现:1. 循环实现列表,为每个item添加id,**:id="'item' + index"**,方便后续查找对应项<div v-for="(item,index) in dataList" :id="'item' + index" :key="index" class="i
·
背景:业务开发中遇到一个需求,是要求跳转到新页面,并默认选中内容,如果内容在列表的位置靠后,就需要滚动到可见范围内。
实现:
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>
更多推荐
已为社区贡献8条内容
所有评论(0)