vue中list列表在滚动和窗口缩小自动加载数据

vue中list列表在滚动和窗口缩小自动加载数据

需求

一个list列表能够滚动加载数据,并且能在窗口缩小的时候也能自动加载更多数据;

框架

vue3+ts+ant

实现

滚动加载的时候只有滚动条的时候才有效果,但是窗口放小的时候没有滚动条了,因此开始上代码:

以下为布局

样式自己写吧,你的注定和我的不一样

		<div>
			<a-list
				ref="myList"
				class=“...”
				:data-source="datas"
				@scroll="handleScroll"
			>
				<template #renderItem="{ item }">
					<a-list-item
						class="..."
						@click="..."
					>
					</a-list-item>
				</template>
			<a-list>
		</div>

开始实现

handleScroll:是监听滚动的
myList:监听窗口大小的变量,也认为是ID、也可以认为是绑定的唯一数据,随便认为
定义变量:

const myList = ref(null);
const myDomHeight= ref(0);//变动中的高度,很重要
const myCurrent= ref(0);//当前请求的页码,很重要
const datas = ref([] as any);
const hasMore = ref(true);//控制是否再继续

//**请求列表数据的接口方法**
function getDatas() {
myCurrent.value++;
//当获取到全部数据时再不请求
hasMore.value = false;
//data获取到的数据,塞到全局绑定数据
datas.push(...data)
//判断是否继续去请求
useResizeContinue(myDomHeight.value);
}

//**列表滚动到最底自动加载**//
function handleScroll (event: Event) {
	const target = event.target as HTMLElement;
	if (target.scrollHeight - target.scrollTop <= target.clientHeight + 2) {//要加一点,不能太小了
		if (hasMore.value) {
			getData();
		}
	}
};
//**列表滚动到最底自动加载,使用@vueuse/core里面的监听控件的变化**//
useResizeObserver(myList, entries => {
	const entry = entries[0];
	const { width, height } = entry.contentRect;
	console.log(`${width}px`);
	myDomHeight.value = height;
	useResizeContinue(height);
});
//**封装了一个方法,全局用**//
function useResizeContinue(domHeight: number) {
//X代表你的item的高度*一次请求能占总的行数示例X=3,请看下面巨丑的图
	if ( X* myCurrent < domHeight) {
		getDatas();
	}
};

随便画的示例,巨丑将就着看,看完你就随便骂吧

总结

根据useInfiniteScroll、useScroll其实是直接可以获取到对应的方法,只是我这项目不能升级到最新版本,自己写了这么一个,应该有 更好的方法,盼留言评论,一起学习!

我是小白,下次再扯

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vue 3项目大屏实现列表自动滚动,可以使用以下步骤: 1. 在Vue 3项目,安装vue-scrollactive插件。可以使用以下命令进行安装: ``` npm install vue-scrollactive --save ``` 2. 在主要Vue组件的script标签,引入vue-scrollactive插件。例如: ``` import Scrollactive from 'vue-scrollactive'; ``` 3. 在Vue组件的template标签,使用vue-scrollactive的v-scrollactive指令,将列表元素包装在div。例如: ``` <div v-scrollactive="{offset: -200, duration: 500}"> <ul> <li>列表项1</li> <li>列表项2</li> <li>列表项3</li> <li>列表项4</li> </ul> </div> ``` 4. 在包装列表的div元素上,使用v-if指令,根据需要来控制列表的显示和隐藏。例如: ``` <div v-if="showList" v-scrollactive="{offset: -200, duration: 500}"> <ul> <li>列表项1</li> <li>列表项2</li> <li>列表项3</li> <li>列表项4</li> </ul> </div> ``` 5. 在Vue组件的methods,编写一个方法来控制列表的显示和隐藏,以及自动滚动。例如: ``` methods: { toggleList() { this.showList = !this.showList; if (this.showList) { setTimeout(() => { this.$refs.list.scrollIntoView({behavior: "smooth", block: "start", inline: "nearest"}); }, 500); } } } ``` 6. 在Vue组件的template标签,使用按钮或其他元素来调用方法。例如: ``` <button @click="toggleList()">显示/隐藏列表</button> ``` 通过以上步骤,就可以在Vue 3项目大屏实现列表自动滚动了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值