vue-上拉加载、下拉刷新组件
vue在移动端开发过程中,上拉加载、下拉刷新是页面的基本需求,现在给大家介绍一种基于touch事件封装的刷新组件。
组件支持传参、传递事件、请求成功异步回调、上拉与触底触发加载或刷新。
父子组件间的通信
这里我们有两个页面,父组件note.vue与刷新组件baseScroll.vue。
通过Prop向子组件传递数据、通过事件向父组件发送消息、通过插槽slot分发内容。
note:
<base-scroll v-bind:url="url"
v-bind:param="param"
@send-data="sendData"
ref="baseScroll">
<div slot="content">
<!--内容区-->
</div>
</base-scroll>
这里我们note页面向子组件传递了请求地址、参数,sendData则用来接收子组件的事件回调。
baseScroll:
props:{
// 请求数据的地址
url:'',
// 请求参数
param:{
type: Object,
},
// 每页显示数据条数
pageSize: {
default:10
},
pageNoName: {
default: 'page_no'
},
pageSizeName: {
default: 'page_size'
},
}
下拉刷新、上拉加载触发条件
组件里面我们使用touch相关事件来达到刷新、加载的效果。
baseScroll:
<div class="vue-scroll"
@touchstart="touchStart($event)"
@touchmove="touchMove($event)"
@touchend="touchEnd($event)">
<slot name="content"></slot>
</div>
其实机制很简单,就是上滑到页面顶部触发刷新,滑动到页面触底触发数据加载 。关键我们要通过偏移量来判断什么时候刷新或加载。这里有篇详细介绍页面偏移量的文章,点我传送门!
baseScroll:
touchStart(e) {
// 屏幕高度
this.clientHeight=parseInt(`${document.documentElement.clientHeight}`)
//滚动开始页面距顶距离
this.scrollTopStart=window.scrollY
// 页面高度
this.pageHeight=e.currentTarget.clientHeight
// 触摸距离页面起点
this.startY = e.targetTouches[0].pageY
// 触摸距离屏幕起点
this.clientY = e.targetTouches[0].clientY
},
touchEnd(e) {
if(!this.hasMove)return
this.hasMove=false
// 滚动结束页面距顶距离
this.scrollTopEnd=window.scrollY
var sLength=this.scrollTopEnd-this.scrollTopStart
if(this.clientHeight+this.startY+sLength+15>=this.pageHeight+this.clientY){
this.nextPage() //页面加载
}else if(this.startY+sLength<=this.clientY){
this.refresh() //页面刷新
}
},
touchMove(e) {
this.hasMove=true
},
touchStart拿到滚动起点的位置及其他页面或屏幕高度;touchEnd中通过判断滚动的值来确定是加载或刷新;hasMove值用来区分用户的操作是点击还是滑动。
加载数据、执行回调
确认后是下拉刷新还是上拉加载后,我们执行相应的操作。
baseScroll:
refresh(){
this.currPageNo = 1
this.getData(data=>{
},0)
},
nextPage(){
this.getData(data => {
}, 1)
},
getData(callback, type){
var self=this
// 设置分页参数
if (typeof this.param === 'string') {
this.param = JSON.parse(this.param);
}
this.param[this.pageNoName]=this.currPageNo
this.param[this.pageSizeName]=this.pageSize
$.ajax({
type: "get",
url: this.url,
data: this.param,
dataType: 'json',
success: function (res) {
var data=res.data
callback(data)
self.currPageNo += 1;
self.$emit('send-data', data,type)
},
})
},
这里我是调用接口获取数据然后$emit('send-data',data,type)传递数据给父组件,当然页面数据上的操作显示就交给父组件进行模板渲染,子组件内部可以做些加载、刷新的动画显示。
并且只要涉及到页面分页、需要上拉下拉操作的页面都可以复用该组件,只是接口地址、参数不同!
vue-上拉加载、下拉刷新组件的更多相关文章
- Vue mint ui用在消息页面上拉加载下拉刷新loadmore 标记
之前总结过一个页面存在多个下拉加载的处理方式,今天再来说一下在消息页面的上拉加载和下拉刷新,基本上每个app都会有消息页面,会遇到这个需求 需求:每次加载十条数据,上拉加载下拉刷新,并且没有点击查看过 ...
- 上拉加载下拉刷新控件WaterRefreshLoadMoreView
上拉加载下拉刷新控件WaterRefreshLoadMoreView 效果: 源码: // // SRSlimeView // @author SR // Modified by JunHan on ...
- RecyclerView 上拉加载下拉刷新
RecyclerView 上拉加载下拉刷新 <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/teach_s ...
- APICloud上啦加载下拉刷新模块
apicloud有自带的上啦加载下拉刷新,当让也可以用第三方或者在模块库里面找一个使用 一.下拉刷新,一下代码写在 apiready = function (){} 里面 apiready = fun ...
- 微信小程序上拉加载下拉刷新
微信小程序实现上拉加载下拉刷新 使用小程序默认提供方法. (1). 在xxx.json 中开启下拉刷新,需要设置backgroundColor,或者是backgroundTextStyle ,因为加载 ...
- mui scroll和上拉加载/下拉刷新
mui中 scroll和上拉加载/下拉刷新同时存在会出现两个滚动条 把/* */ /* //mui页面鼠标拖动代码: mui('.mui-scroll-wrapper').scroll({ dec ...
- 基于better-scroll封装一个上拉加载下拉刷新组件
1.起因 上拉加载和下拉刷新在移动端项目中是很常见的需求,遂自己便基于better-scroll封装了一个下拉刷新上拉加载组件. 2.过程 better-scroll是目前比较好用的开源滚动库,提供很 ...
- SwipeRefreshLayout实现上拉加载下拉刷新
package com.example.swiperefreshlayoutdemo; import java.util.ArrayList;import java.util.HashMap; imp ...
- MJRefresh(上拉加载下拉刷新)
整理自:https://github.com/CoderMJLee/MJRefresh#%E6%94%AF%E6%8C%81%E5%93%AA%E4%BA%9B%E6%8E%A7%E4%BB%B6%E ...
- Flutter上拉加载下拉刷新---flutter_easyrefresh
前言 Flutter默认不支持上拉加载,下拉刷新也仅仅支持Material的一种样式.Android开发使用过SmartRefreshLayout的小伙伴都知道这是一个强大的刷新UI库,集成了很多出色 ...
随机推荐
- GRIT VIEW删除事件
1.点选表格后找到事件 RowCommand 2.輸入gvGroupUser_RowCommand后双击 ------注分 ...
- C# async 和 await 理解
C# async 和 await 理解 先假设如下场景: 主函数 Main,循环等待用户输入: 计算函数 Cal,耗时计算大量数据: class Test { static int Main(stri ...
- 解决 google 浏览器记住密码导致输入框样式改变(变成淡黄色背景)
直接在页面上使用css代码: input:-webkit-autofill , textarea:-webkit-autofill, select:-webkit-autofill { -webkit ...
- Linux提供哪些功能
不只是Linux,任何一个OS几乎都具有如下功能. 1.文件IO:读写文件 初级文件IO 2.文件属性:获取文件信息 3.标准IO:读取文件系统函数 4.获取IS系统信息 5.进程环境 6.进程控制 ...
- Linux网络编程综合运用之MiniFtp实现(三)
前面已经对FTP相关的一些概念有了基本的认识,接下来就要进入代码编写阶段了,也是非常兴奋的阶段,在开启这个它之前先对项目需求进行一个梳理,对其我们要实现的FTP服务器是一个什么样子. ftp命令列表 ...
- ngtos 天融信
NGFW系列产品基于天融信公司10年高品质安全产品开发经验结晶的NGTOS系统架构,采用了多项突破性技术.基于分层的设计思想,天融信公司通过长期的安全产品研发经验,分析多种安全硬件平台技术的差异,创造 ...
- 使用poi进行数据的导出Demo
这是本人在项目中遇到了一个导出数据时,如果该条数据中包含汉字,就会出现excel单元格的大小与期望的样式不一样,也是查找了半天,也没有发现哪里出的问题. 现将一个小Demo奉献在这里,可以在遇到使用p ...
- python模拟双色球大乐透生成算法
每天练习一段python代码,健康生活一辈子.晚上下班没事,打开电脑继续编写python代码!今天分享的一个是大家熟悉的双色球彩票的游戏,根据这个进行写的一个python算法,代码精简,肯定有bug, ...
- MySQL之两张表关系查找例子
teacher表 mysql> select * from teacher; +-----+--------+-----+---------+----------+ | tid | tname ...
- Base 编解码(转)
private static final char[] legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0 ...