vue实现下拉加载其实没那么复杂
作者:pppercyWang 发布时间:2024-05-29 22:29:53
标签:vue,下拉加载
前言
之前缺乏移动端的经验。一直不知道上拉加载,下拉刷新是怎么实现的。现在正好有个产品有这样一个需求。想了一会没有思路。就去找插件。啥vue-infinite-scroll,vue-virtual-scroll-list。啊呀,牛!无限滚动,十万条数据渲染。
经过我一大圈的折腾。还是默默的卸载了插件。我只是需要实现一个下拉加载,不需要其他这么多的功能。看了看其他人的源码,直接撸了起来,实现一个List组件。
效果展示
MList.vue
<template>
<div class="list-wrap">
<div class="content" ref="list" @scroll="onScroll">
<slot></slot>
</div>
<div class="loading" v-show="loading">正在加载数据......</div>
</div>
</template>
<script lang='ts'>
import { Component, Vue, Watch, Prop } from "vue-property-decorator";
@Component({
components: {}
})
export default class extends Vue {
@Prop()
private loading!: boolean;
private onScroll() {
const obj: any = this.$refs.list;
// clientHeight 视口高度 scrollTop 滚动条离顶部的高度 scrollHeight 列表内容的高度
if (obj.clientHeight + obj.scrollTop === obj.scrollHeight) {
this.$emit("toBottom");
}
}
}
</script>
<style scoped lang="scss">
.list-wrap {
width: 100%;
height: 100%;
position: relative;
.content {
width: 100%;
height: 100%;
overflow-y: scroll;
}
.loading {
position: absolute;
bottom: -20px;
width: 100%;
height: 20px;
color: #ffffff;
}
}
::-webkit-scrollbar { // 去除滚动条边框
width: 0 !important;
}
::-webkit-scrollbar {
width: 0 !important;
height: 0;
}
</style>
使用组件
<div class="body">
<m-list @toBottom="fetchNewData()" :loading="loading">
<code-info class="item" v-for="(item,index) in dataList" :key="index"></code-info>
</m-list>
</div>
private dataList: any[] = [1, 2, 3, 4, 5, 6, 7, 8];
private loading: boolean = false;
private fetchNewData() {
this.loading = true;
setTimeout(() => {
this.dataList.push(1, 2, 3);
const ref: any = this.$refs.vueLoad;
this.loading = false;
}, 1000);
}
这里需要注意的是m-list的父容器一定要固定高度,本例为body。
来源:https://segmentfault.com/a/1190000020053388


猜你喜欢
- 原理:建立一个任务队列,然多个线程都从这个任务队列中取出任务然后执行,当然任务队列要加锁,详细请看代码import threadingimp
- 前言根据《2021年Stackoverflow开发者调查》,SQL是最常用的五种编程语言之一。所以,我们应该多投入时间来学习SQL。由Sto
- 本文实例讲述了Python实现队列的方法。分享给大家供大家参考,具体如下:Python实现队列队列(FIFO),添加元素在队列尾,删除元素在
- 掩码数组数据很大形况下是凌乱的,并且含有空白的或者无法处理的字符,掩码式数组可以很好的忽略残缺的或者是无效的数据点。掩码式数组由一个正常数组
- 本文实例讲述了Python requests库用法。分享给大家供大家参考,具体如下:requests是Python中一个第三方库,基于 ur
- 1. 引言星号* 往往被称为乘法运算符,是所有程序中最为常用的运算符号之一,在Python 中,星号还有很多隐藏的强大功能。本文将用最容易理
- 使用SQL对数据进行提取和分析时,我们经常会遇到数据重复的场景,需要我们对数据进行去重后分析。以某电商公司的销售报表为例,常见的去重方法我们
- 1:把数字转换为字符串的方法 var string_value = String(numbe
- 并行查询其优势就是可以通过多个线程来处理查询作业,从而提高查询的效率。SQL Server数据库为具有多个CPU的数据库服务器提供并行查询的
- 之前,我介绍了学习安装并配置前端自动化工具Gulp,觉得gulp确实比grunt的配置简单很多,于是我决定再深入学习一下gulp,就去网上查
- 场景产品中有一张图片表,数据量将近100万条,有一条相关的查询语句,由于执行频次较高,想针对此语句进行优化表结构很简单,主要字段:user_
- 1. glob文件名模式匹配尽管glob API很小,但这个模块的功能却很强大。只要程序需要查找文件系统中名字与某个模式匹配的一组文件,就可
- 先来看看基本的定义:channel是Go语言中的一个核心类型,可以把它看成管道。并发核心单元通过它就可以发送或者接收数据进行通讯,这在一定程
- setup语法糖 最大好处就是所有声明部分皆可直接使用,无需return出去注意:部分功能还不完善,如:name、render还需
- 如IP为192.168.1.111现要截取第二个.之前的值,得到结果192.168,很多网站都只显示前面2个值 &nb
- pytorch查看模型model参数parameters示例1:pytorch自带的faster r-cnn模型import torchim
- 1. 二维(多维)数组降为一维数组方法1: reshape()+concatenate 函数,这个方法是间接法,利用 reshape() 函
- Microsoft SQL Server 7.0安全问题Microsoft Corporation【「Microsoft SQL Serve
- 图中图准备数据import matplotlib.pyplot as pltfig = plt.figure()x = [1, 2, 3,
- 前言在对DataFrame数据进行处理时,存在需要对数据内容进行遍历的场景。因此记录一下按照行,列遍历的几种方式。一、按行遍历1. 使用lo