上拉加载 下拉刷新

栏目: JavaScript · 发布时间: 6年前

内容简介:作者:信心https://juejin.im/post/5b9091e7e51d450e704231611.界面上,只分成简单的两块,一块是上方的刷新文字,一块是下方的内容,然后将上方提示内容隐藏在屏幕之外,一般由两种方式,一种是上面遮一层,另一种是marginTop:负值将其弄出屏幕外,这里我采用的是第一种,代码也很简单,就随便贴一下。

作者:信心

https://juejin.im/post/5b9091e7e51d450e70423161

我们依旧从界面及逻辑两块进行分析

1.界面上,只分成简单的两块,一块是上方的刷新文字,一块是下方的内容,然后将上方提示内容隐藏在屏幕之外,一般由两种方式,一种是上面遮一层,另一种是marginTop:负值将其弄出屏幕外,这里我采用的是第一种,代码也很简单,就随便贴一下。

. header {

width 100 % ;

height 1rem ;这里的高度应该与刷新文字一样高

position fixed ;

z - index 100 ;

}

2. 功能实现的重头戏是在逻辑上,主要分成下面几个部分

  • 监听事件

  • 位置计算

  • 控制界面变化

  • 数据更新包

我一个一个进行分析,然后带你们入坑。

监听事件,这块简单,直接贴代码

//el为下拉的整个节点

// 这里为添加监听

this . el . addEventListener ( 'touchstart' ,   this . refreshTouchStart );

this . el . addEventListener ( 'touchmove' ,   this . refreshTouchMove );

this . el . addEventListener ( 'touchend' ,   this . refreshTouchEnd );

//记住在不用的时候要移除监听哦

this . el . removeEventListener ( 'touchstart' ,   this . refreshTouchStart );

this . el . removeEventListener ( 'touchmove' ,   this . refreshTouchMovee );

this . el . removeEventListener ( 'touchend' ,   this . refreshTouchEnd );

//具体的函数,我们直接在位置计算中看

位置计算 我们分下拉刷新,上拉加载两块计算,分析可得

下拉刷新的逻辑 = 当前页面的首项在屏幕中且容器向下滑动的距离大于一定值

上拉加载的逻辑 = 当前页面已滑动到底部

好,我们直接看具体的实现逻辑代码

//代码中包含界面变化和数据更新,仔细看哦

refreshTouchStart ( e )   {

let  touch  =  e . changedTouches [ 0 ];

this . tipText  =  '下拉刷新' ;

//下拉提示文字    

this . startY  =  touch . clientY ; //获得当前按下点的纵坐标

}

refreshTouchMove ( e )   {

this .$ store . commit ( 'bottomShowFalse' ); //与本逻辑无关,滑动时隐藏底部作用   

let  touch  =  e . changedTouches [ 0 ];

let  _move  =  touch . clientY  -  this . startY ; //获得滑动的距离   

this . bottomFlag  =  $( '.present-box' ). offset (). top  +  $( '.present-box' ). height ()  -  document . body . clientHeight <=  40 ; //滑动到底部标识 

if ($( '.present-box' ). offset (). top  >=  this . headerHeight )   {

//内容主体超出了一个头部的距离     

if ( _move  >  0  &&  _move  <  1000 )   {

//滑动距离>0代表下拉//<1000是为了防止神人无限拉阿拉    

this . el . style . marginTop  =  _move  +  'px' ; //根据拉的距离,实现界面上的变化(界面变化)  

this . moveDistance  =  touch . clientY  -  this . startY ; //记录滑动的距离,在松手后让他滑啊滑滑回去 

if ( _move  >  50 )   { //拉到一定程度再下拉刷新,防止误操作      

this . tipText  =  '松开即可刷新' //上面有了     

}

}

}

},

refreshTouchEnd ()   {

this .$ store . commit ( 'bottomShowTrue' ); //松开后底部就biu的出现啦   

if ( this . bottomFlag )   { //若符合上拉加载的条件,则直接进行数据更新   

this .$ emit ( 'loadBottom' );

}

let  that  =  this ;

if ( this . moveDistance  >  50 )   {

//拉了一定距离才触发加载动作  

this . tipText  =  '数据加载中...' ;

let  timer  =  setInterval ( function   ()   {

that . el . style . marginTop  =  that . el . style . marginTop . split ( 'px' )[ 0 ]  -  5  +  'px' ; //如果拉的很长,一次性弹回去影响用户体验,所以先让他弹到50的高度,然后再进行数据更新

if ( Number ( that . el . style . marginTop . split ( 'px' )[ 0 ])  <=  50 )   { //小于50后就不进行界面变化了,先进行数据更新再变化

clearInterval ( timer );

new Promise (( resolve ,   reject )  =>  {

that .$ emit ( 'loadTop' ,   resolve ,   reject ); //通知父控件,下拉刷新条件满足了,你更新吧

}). then (()  =>  {

that . resetBox ();

}). catch (()  =>  {

that . resetBox (); //界面恢复(也就是弹回去啦)

});

}

}, 1 ); //通过一个promise,让数据更新结束后再进行界面变化。也可以采用其他的方式,如async await方式

} else   {

this . resetBox ();

}

}

resetBox ()   {

let  that  =  this ;

//使用定时器的方式,biubiubiu的实现滑动界面刷新的效果。

if ( this . moveDistance  >  0 )   {

let  timer  =  setInterval ( function   ()   {

that . el . style . marginTop  =  that . el . style . marginTop . split ( 'px' )[ 0 ]  -  1  +  'px' ;

if ( Number ( that . el . style . marginTop . split ( 'px' )[ 0 ])  <=  0 )   clearInterval ( timer ); //这里很重要,不删除,可能看到奇奇怪怪的东西哦

}, 1 )

}

this . moveDistance  =  0 ;

}

核心代码就这些了,撒花完结,优化什么的,你们自己看着来咯,大佬别打我,效果图来了嘛

上拉加载 下拉刷新


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

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Kotlin实战

Kotlin实战

【美】Dmitry Jemerov(德米特里·詹莫瑞福)、【美】 Svetlana Isakova(斯维特拉娜·伊凡诺沃) / 覃宇、罗丽、李思阳、蒋扬海 / 电子工业出版社 / 2017-8 / 89.00

《Kotlin 实战》将从语言的基本特性开始,逐渐覆盖其更多的高级特性,尤其注重讲解如何将 Koltin 集成到已有 Java 工程实践及其背后的原理。本书分为两个部分。第一部分讲解如何开始使用 Kotlin 现有的库和API,包括基本语法、扩展函数和扩展属性、数据类和伴生对象、lambda 表达式,以及数据类型系统(着重讲解了可空性和集合的概念)。第二部分教你如何使用 Kotlin 构建自己的 ......一起来看看 《Kotlin实战》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具