微信小程序触底加载scroll-view

2023-11-16

微信小程序触底加载 scroll-view

在这里插入图片描述

了解什么是触底加载?

需求:有个固定高度的容器,实现容器里面的内容触底加载
1、内容盒子的高度
2、盒子里内容的总高度
3、滚动条的scrollTop
触底加载的原理就是 当里面的容器触底的时候进行分页,请求接口合并数据

公式
盒子的高度+滚动条的scrollTop = 内容高度

使用原生的计算方法比较麻烦 因此市面上有很多关于触底加载的插件
我们这里使用的是 uni-app 里面的 scroll-view

scroll-view 属性

  • scroll-x:false - 允许横向滚动
  • scroll-y:false - 允许纵向滚动
  • show-scrollbar: 距顶部/左边多远时(单位px),触发 scrolltoupper 事件
  • scroll-top:false - 控制是否出现滚动条
  • @refresherrefresh: - 自定义下拉刷新被触发
  • @scroll: - 滚动时触发,event.detail = {scrollLeft, scrollTop, scrollHeight, scrollWidth, deltaX, deltaY}
  • @scrolltoupper:滚动到顶部/左边,会触发 scrolltoupper 事件
  • @scrolltolower:滚动到底部/右边,会触发 scrolltolower 事件
  • refresher-threshold:45 - 设置自定义下拉刷新阈值

实战上代码

亿点小知识:使用竖向滚动时,需要给 <scroll-view> 一个固定高度,通过 css 设置 height;使用横向滚动时,需要给<scroll-view>添加white-space: nowrap;样式。

页面 根据不同的需求开启不同的属性
<scroll-view
		 class="car-list"
		 refresher-enabled="true"
		:refresher-triggered="flag"
		@refresherrefresh="refresherrefresh"
		@scrolltolower="scrolltolower"
		scroll-y="true"
		>
		<view class="item-msg" v-for="(item, index) in list" :key="item.id" >
		{{item.name}}
		</view>
</scroll-view>
js 这里的逻辑大家可以根据自己的接口规则进行变动 主要的是看代码的逻辑

如有更好的代码逻辑 可以私信我 一起讨论

data() {
			return {
				list: [],
				flag:false,
				query: {
					per_page: 10,
					page: 1,
				},
				total:0,
			}
		},
methods: {
			refresherrefresh(){ // 下拉刷新
				this.flag = true // 开启下拉刷新
				this.query = {
					per_page: 10,
					page: 1,
				}
				this.list = []
				this.refreshFun()
				setTimeout(() => {
					this.flag = false; // 关闭下拉刷新
				}, 1000);
			},
			// 每次刷新需要用到的方法
			refreshFun(){
				if(this.index == 1 || this.index == 2){ // 判断是否需要传参 启用/禁用
						this.query.enabled = this.index == 1 ? 1 : 0
						this.init()
				}else{
						if(this.query.enabled == 1 || this.query.enabled == 0){
							delete this.query.enabled
						}
						this.init()
				}
			},
			// 触底加载
			scrolltolower () {
					const { list, total,query } = this
					if (list.length === total) return // 判断是否加载全部
					query.page++ // 触底加载 ++
					this.refreshFun()
			},
			async init () { // 数据渲染
				let { query } = this
				uni.showLoading() // 加载中
				let data = await 接口(query)
				uni.hideLoading() // 加载完成
				if ( data.code === SUCCESS ) {
					this.total = data.meta.total // 获取总数
					this.list = this.list.concat(data.data) // 合并数据
				}
			},
}

在这里插入图片描述

以上就是微信小程序触底加载感谢大家的阅读
如碰到其他的问题 可以私下我 一起探讨学习
如果对你有所帮助还请 点赞 收藏谢谢~!
关注收藏博客 作者会持续更新…

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序触底加载scroll-view 的相关文章

  • 宏函数、普通函数、内联函数的区别

    示例代码 宏函数 define SUM x x x 内联函数 inline int sum int x return x x 普通函数 int sum int x return x x 什么是内联函数 在普通函数定义时加上 inline 关
  • TCP/IP 协议——知识集锦

    精通 TCP IP 熟练使用 Socket 进行网路编程 这句话在招聘要求里经常见 但是平时压根用不到 虽然笔者用Unity3D 如果做联网需要用到Socket通信 奈何我还没做过网络游戏 这里补下相关知识 目录 1 什么是 TCP IP
  • Java——3.字符串的替换和去除空格操作_replace ()和 trim ()方法

    程序开发中 用户输入数据时经常会有一些错误和空格 这时可以使用 String 类的 replace 和 trim 方法 进行字符串的替换和去除空格操作 ExampleAPI04 public class ExampleAPI04 publi
  • tf卡低级格式化_tf卡写保护怎么去掉 磁盘被写保护解决方法

    今天智智教大家如何去除TF卡写的保护 MicroSD 卡是一种极细小的快闪存储器卡 原本这种记忆卡称为T Flash 有时候我们会遇到tf卡写保护的情况 要解除写保护 先确认一下是否真的被写保护 鼠标右键点击移动硬盘 属性 看看你的文件属性
  • R语言中使用dplyr包进行排序与添加序号的实战

    R语言中使用dplyr包进行排序与添加序号的实战 在R语言中 dplyr是一个非常强大的数据处理包 它提供了一套简洁而一致的函数 用于对数据进行筛选 排序 汇总和变形等操作 本文将介绍如何使用dplyr包进行排序 并为数据添加序号 首先 让
  • java的反射机制Class.forName()

    Class forName 方法的作用 就是初始化给定的类 1 Class 类概念 Class 也是一个 Java 类 保存的是与之对应 Java 类的 meta信息 元信息 用来描述这个类的结构 比如描述一个类有哪些成员 有哪些方法等 一
  • 【网易严选】iOS持续集成打包(Jenkins+fastlane+nginx)

    本文来自网易云社区 作者 孙娇 严选iOS客户端的现有打包方式是通过远程连接打包机执行脚本去打包 打完包会输出相应的ipa的二维码 扫一扫二维码可以安装 但是随着测试队伍的壮大 外包同学越来越多 在打包机输入命令的方式可用度越来越低 手动输

随机推荐