vue-滚动加载组件
<template> <div id="infiniteScroll" class="infinite-scroll"> <slot></slot> </div> </template> <script> /** * 用法: * 将该组件放在列表最下方,其直接父级元素为滚动的包含块 * window.INFINITE_BUSY 用来控制是否监听无限加载 * dis为开始进行下次加载的检测距离 */ export default { data(){ return { } }, props:{ dis:{ type:Number, default:200 } }, mounted(){ let detectDom = document.getElementById('infiniteScroll'); let scrollDom = this.scrollDom = detectDom.parentElement; scrollDom.addEventListener('scroll',this.scrollMonitor); window.INFINITE_BUSY = false; }, methods:{ scrollMonitor(){ if(window.INFINITE_BUSY) return; requestAnimationFrame(this.loadMonitor); window.INFINITE_BUSY = true; }, loadMonitor(){ let scrollDom = this.scrollDom; let totalLength = scrollDom.scrollHeight; let viewLength = scrollDom.clientHeight; let scrollLength = scrollDom.scrollTop; if(totalLength > viewLength && viewLength + scrollLength > totalLength - this.dis){ this.$emit('loadmore') return } window.INFINITE_BUSY = false; } } } </script> <style lang="postcss"> </style>
getWindowHeight(){
let windowHeight = 0;
if(document.compatMode == "CSS1Compat"){
windowHeight = document.documentElement.clientHeight;
}else{
windowHeight = document.body.clientHeight;
}
return windowHeight;
},
videoScroll(e){
if(!this.shouldAj){
return
}
if(this.remian>0){
if((e.target.scrollTop + this.getWindowHeight()+100) >= document.getElementsByClassName('page')[0].scrollHeight){
this.start+=19
this.getRecommendList()
}
}
},
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述