【转载】Vue自定义指令实现pc端加载更多
转载来源:https://www.86886.wang/detail/5a6f19e644f9da55274c3bbd,谢谢作者分享!
原理
document.documentElement.scrollTop + document.documentElement.clientHeight >= document.documentElement.scrollHeight
只要知道什么时候滚动条到底部了,就知道了什么时间应该触发加载更多,当然有一些判断是不可少的,比如已经没有数据了,已经在加载中了就不要再次触发加载更多。
示例
<template>
<div v-scroll="loadMore">
<!-- 呈现你的列表数据,lists为数据,loading可以实现加载动画,noMore表示没数据了 -->
<my-item :lists="lists" :loading="loading" :noMore="noMore" />
</div>
</template>
<script>
import MyItem from '../components/Item.vue'
export default {
data () {
return {
lists: this.$store.state.lists,
page: 1,
// 是否在加载中
loading: false,
// 请求到多少条数据
count: '',
// 每页多少条数据
limit: 30,
// 是否有更多数据
noMore: false
}
},
directives: {
scroll: {
bind (el, binding) {
window.addEventListener('scroll', function () {
let scrollTop = document.documentElement.scrollTop || document.body.scrollTop
if (scrollTop + document.documentElement.clientHeight >= document.documentElement.scrollHeight) {
let loadData = binding.value
loadData()
}
})
}
}
},
methods: {
async loadMore () {
// 没有正在加载中才会请求数据
if (!this.loading) {
if (this.noMore) {
this.loading = false
return
}
this.loading = true
this.page = this.page + 1
// 请求下一页数据
await this.$store.dispatch('GET_LISTS', {
page: this.page
})
let newData = this.$store.state.lists
this.count = newData.length
// 数据不够30且大于0肯定没更多数据了
if (this.count < this.limit && this.count > 0) {
this.noMore = true
this.lists = this.lists.concat(newData)
this.loading = false
} else {
// 数据刚好为30默认有更多数据
this.noMore = false
this.lists = this.lists.concat(newData)
this.loading = false
}
}
}
},
components: {
MyItem
}
}
</script>
【转载】Vue自定义指令实现pc端加载更多的更多相关文章
- Vue自定义指令实现下拉加载:v-loadmore
和methods平级: directives: { loadmore: {//自定义指令: 下拉加载 bind(el, binding) { var p = 0; var t = 0; ...
- Android中自定义ListView实现上拉加载更多和下拉刷新
ListView是Android中一个功能强大而且很常用的控件,在很多App中都有ListView的下拉刷新数据和上拉加载更多这个功能.这里我就简单记录一下实现过程. 实现这个功能的方法不止一个,Gi ...
- Jqeury Mobile实战之切屏效果以及屏幕滚动到底端加载更多和点击切换更多
http://blog.csdn.net/q718330882/article/details/46120691 //页面滚动到底部加载更多事件 $( window ).scroll(function ...
- vue之vant组件下拉加载更多
vant地址:https://youzan.github.io/vant/#/zh-CN/intro 基础用法 List 组件通过loading和finished两个变量控制加载状态,当组件滚动到底部 ...
- js手机端和pc端加载不同的样式
function loadCSS() { if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android| ...
- vue2.0 自定义 下拉刷新和上拉加载更多(Scroller) 组件
1.下拉刷新和上拉加载更多组件 Scroller.vue <!-- 下拉刷新 上拉加载更多 组件 --> <template> <div :style="mar ...
- vue自定义指令,比onerror更优雅的方式实现当图片加载失败时使用默认图,提供三种方法
首先,来看下效果图(演示一下图片正常加载与加载失败时的效果) 在线体验地址:https://hxkj.vip/demo/vueImgOnerror/ 一.常规方法解决 我们都知道,img标签支持one ...
- Vue自定义指令使用场景
当你第一次接触vue的时候,一定会使用到其中的几个指令,比如:v-if.v-for.v-bind...这些都是vue为我们写好的,用起来相当的爽.如果有些场景不满足,需要我们自己去自定义,那要怎么办呢 ...
- vue自定义指令实例使用(实例说明自定义指令的作用)
在写vue项目的时候,我们经常需要对后台返回的数据进行大量的渲染操作,其中就包含了大量的对特殊数据的进一步处理,比如说时间戳.图片地址.特殊数据显示等等特殊数据处理改进. 其实遇到这种情况,通过Vue ...
随机推荐
- 网站添加icon
设置网站的icon<link rel="shortcut icon" href="./static/img/favicon.ico" >
- RPC----Hadoop核心协议
什么是RPC RPC设计的目的 RPC的作用 远程过程调用(RPC)是一个协议,程序可以使用这个协议请求网络中另一台计算机上某程序的服务而不需要知道网络细节. 必备知识: 网络七层模型 网络四层模型 ...
- hMailServer安装汉化方法
https://www.hmailserver.org/viewtopic.php?f=5&t=13
- mybatis源码分析(五)------------SQL的执行过程
在对SQL的执行过程进行分析前,先看下测试demo: /** * @author chenyk * @date 2018年8月20日 */ public class GoodsDaoTest { pr ...
- Linux(Ubuntu)使用日记(三)------git安装使用
1. 安装 首先,确认你的系统是否已安装git,可以通过git指令进行查看,如果没有,在命令行模式下输入sudo apt-get install git命令进行安装. 2. 配置 git confi ...
- 【C/C++】Dijkstra算法的简洁实现
Dijkstra的实现有很多种,下面给出一种较为简洁和高效的实现,可以作为模板快速使用. 1. 使用邻接表存储图: 2. 使用标准STL的vector存储每个点的所有邻接边: 3. 使用pair记录当 ...
- HashMap初认识
什么是HashSet? 它实现了Set接口,HashSet是Set集合的子类 有哈希表支持的,元素不可重复的哈希码值(实际上是一个HashMap的实例). 它不保证set的迭代顺序(遍历元素的顺序), ...
- 20190211 模拟训练 A. 大猫咪
好题 2.11考试
- 使用Webstorm建立vue.js工程并添加vuetify组件
.. .. .. ..等待安装完 ..生成的目录结构 ..打开Webstorm的终端 ..最后出现 ..回到工程目录,右键 ..显示npm面板,点击serve运行 .. ..打开[貌似跟以前不一样了. ...
- Go-常用库的介绍
一.Go常用包介绍 fmt.它实现了格式化的输入输出操作,其中的fmt.Printf()和fmt.Println()是开 发者使用最为频繁的函数. io.它实现了一系列非平台相关的IO相关接口 ...