html5 vuejs下拉加载,Vue实现下拉加载更多

熟悉Element-UI的开发者可能都会有这样的经历,它的无限滚动 InfiniteScroll 并不好用,下面介绍两种下拉加载的实现方法:

1. 使用el-table-infinite-scroll 插件

(1). 安装插件

npm install --save el-table-infinite-scroll

(2). 全局引入并注册

// main.js

import elTableInfiniteScroll from 'el-table-infinite-scroll';

Vue.use(elTableInfiniteScroll);

(3). 局部文件引入

// 引入

import elTableInfiniteScroll from 'el-table-infinite-scroll';

export default {

// 注册指令

directives: {

'el-table-infinite-scroll': elTableInfiniteScroll

}

}

(4). 使用指令

(5). 代码实例

// 引入插件

import elTableInfiniteScroll from "el-table-infinite-scroll";

export default {

name: "index",

data() {

return {

// 表格高度

tableHeight:"",

// 数据总数

tableCount:0,

// 表格数据列表

tableList:[],

// 是否加载中

tableLoading:false,

// 表格搜索条件

tableSearch:{

page:1

}

}

},

// 注册指令

directives: {

"el-table-infinite-scroll": elTableInfiniteScroll,

},

created() {

let windowHeight =document.documentElement.clientHeight || document.body.clientHeight;

// 动态计算表格的高度,200为屏幕内除了表格以外其他元素的高度,依实际情况而定

this.tableHeight = windowHeight - 200 + "px";

},

mounted(){

this.getTableData(this.tableSearch);

},

methods: {

// 请求表格数据

getTableData(search) {

let page = search.page;

let url = "index?page=" + page;

// 首次打开页面要加载一次数据,为了防止数据过多自动触发滚动,此处需要置为加载中

this.tableLoading = true;

this.$http.get(url).then((result) => {

if (res.code == 10000) {

// 拼接数据

this.tableList = this.tableList.concat(result.data.list);

this.tableCount = result.count;

this.tableSearch.page = result.current;

this.tableLoading = false;

}

});

},

// 加载更多

loadMore() {

if (!this.tableLoading) {

this.tableLoading = true;

if (this.tableList.length < this.tableCount) {

this.tableSearch.page++;

this.getTableData(this.tableSearch);

} else {

this.$message("已加载完所有的数据!");

this.tableLoading = false;

}

}

},

}

};

2. 自定义下拉加载方法

上面使用的插件需要依赖Element-UI,如果没有使用Element-UI,那就只能自己写一个下拉加载了,实现代码如下:

export default {

name: "index",

data() {

return {

// 表格高度

tableHeight:"",

// 数据总数

tableCount:0,

// 表格数据列表

tableList:[],

// 是否加载中

tableLoading:false,

// 表格搜索条件

tableSearch:{

page:1

}

};

},

created(){

let windowHeight = document.documentElement.clientHeight || document.body.clientHeight;

// 动态计算表格的高度,200为屏幕内除了表格以外其他元素的高度,依实际情况而定

this.tableHeight = windowHeight - 200 +'px';

},

mounted() {

this.getTableData(this.tableSearch);

document.getElementById("tableBox").addEventListener('scroll',this.onTableScroll);

},

beforeDestroy() {

// 移除监听事件

window.removeEventListener('scroll', this.onTableScroll)

},

methods: {

onTableScroll(){

var obj = document.getElementById("tableBox");

var scrollHeight = obj.scrollHeight;

var scrollTop = obj.scrollTop;

var objHeight = obj.offsetHeight;

// 100为阈值,可根据实际情况调整

if(scrollHeight <= (scrollTop + objHeight + 100) && !this.tableLoading && this.tableList.length

this.tableLoading = true;

this.tableSearch.page++;

setTimeout(()=>{

this.getTableData(this.tableSearch);

},300)

}

},

getTableData(search){

let page = search.page;

let url = "index?page=" + page;

// 首次打开页面要加载一次数据,为了防止数据过多自动触发滚动,此处需要置为加载中

this.tableLoading = true;

this.$http.get(url).then((result) => {

if (res.code == 10000) {

// 拼接数据

this.tableList = this.tableList.concat(result.data.list);

this.tableCount = result.count;

this.tableSearch.page = result.current;

this.tableLoading = false;

}

});

},

},

};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值