vue移动端实现下拉刷新


Posted in Javascript onApril 22, 2018

看完这篇文章,相信大伙也一样可以,做出一个自己的刷新,加载的组件

说这个功能之前,大家要先了解一下,要怎么触发滚动条事件。

vue移动端实现下拉刷新

一定要注意,所有滚动事件都必须要满足这个条件,横向滚动条也一样,

只要满足子元素宽度大于父元素宽度就可以了。(下篇文章会讲怎么实现一个横向滚动条)

接入正题!!!

先来看看怎么剖析这个下拉刷新。

要用到的移动端的三个事件: touchstart(手指按下),touchmove(手指移动),touchend(手指离开)

下拉刷新也就是(touchstart => touchmove(下移动) =>touchend)的一个过程

大体思路:

下拉主要与手指触摸y轴点有关

1.记录下手指按下y轴的坐标点

2.记录手指移动时,移动的距离(注意:要判断手指是向上移还是向下移,向上移就是滚动)

3.启动下拉刷新事件

看代码:

vue中要在methods里面注册事件,在绑定到父元素上,这里大家应该都是用vue-cli搭建的项目了吧!

没有的话,我回头给个链接给大家,里面有已经搭建好的项目结构。包含这个插件的源码,demo都在里面1

<template>
<div class="parent">


<div class="child"></div>

</div>
</template>
<script>
export default {

data(){


return {



top: 0,



startY: 0,     // 保存 y轴点的位置



touching: false,  // 代表当前是否处于 下拉刷新行为的开关,也就是当属于滚动行为时,就要退出该事件机制


}


},

methods: {


touchStart(e) {



// e代表该事件对象,e.targetTouches[0].pageY可以拿到手指按下的 y轴点



this.startY = e.targetTouches[0].pageY



// 开启下拉刷新状态



this.touching = true






},


touchMove(e) {
 

 //这个 touchMove,只要页面在动都会发生的,所以 touching就起作用了



// 如果 touching为false,说明这个正在移动的页面不是我们想要的下拉刷新,有可能是用户随意拉了一下页面而已,或者其他



if(!this.touching) return



// 获取移动的距离



let diff = e.targetToc=uches[0].pageY - this.startY 



//判断是向上拉还是向下拉 



if(diff >0) { 




e.preventDefault()



} else {




return 




}



//这个this.top要对应绑定到该元素的transform: translateY(+top+ 'px')上,不然是无法拉动的



// 因此这里还要对偏移高度做一下处理,直接设置diff +(this.state === 2 ? 40 : 0) 太快了,因为拉取幅度太大



// 让diff*0.25这样子就差不多了



 this.top = Math.floor(diff*0.25) + (this.state === 2 ? 40 : 0)



if(this.top >= 40){




this.state = 1  //代表正在拉取



} else {




this.state = 0 // 代表初始转态



}
 


},


touchEnd(e) {



this.touching = false



if(this.state === 2) {




this.top = 40




return 



}



// 判断抬起时的高度,是大于40 就开启刷新



if(this.top >= 40) {




this.refresh()



} else {




this.state = 0




this.top = 0



}


},


refresh() {



this.state = 2



this.top = 40



const self = this



// 这里可以调用父组件的方法去请求刷新接口



this.$emit('getRefresh', function(self){




//传个回调过去,请求完数据就复原




self.state = 0




self.top = 0



})


}

}

}
</script>

vue移动端实现下拉刷新

到这里就完结了,当然现在肯定不能直接用的,要结合你的实际业务逻辑来用的,

我把demo放到github上了 :

https://github.com/13725102796/css3-demo/blob/master/src/plugins/scroll/scroll.vue

看不懂的,建议整个项目拉下拉,跑一下,里面还有检验的插件,弹窗的等等,都是我在项目中用到,再抽出来的。

方法: git clone https://github.com/13725102796/css3-demo.git

Javascript 相关文章推荐
Jquery 基础学习笔记之文档处理
May 29 Javascript
js location.replace与location.reload的区别
Sep 08 Javascript
js数组循环遍历数组内所有元素的方法
Jan 18 Javascript
利用jQuery实现可以编辑的表格
May 26 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
Oct 29 Javascript
js实现iframe跨页面调用函数的方法
Dec 13 Javascript
node.js中的fs.realpath方法使用说明
Dec 16 Javascript
实例讲解jquery与json的结合
Jan 07 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
May 03 Javascript
Bootstrap Table快速完美搭建后台管理系统
Sep 20 Javascript
vue-better-scroll 的使用实例代码详解
Dec 03 Javascript
一篇文章介绍redux、react-redux、redux-saga总结
May 23 Javascript
实例讲解Vue.js中router传参
Apr 22 #Javascript
用Vue写一个分页器的示例代码
Apr 22 #Javascript
vue-cli3.0 特性解读
Apr 22 #Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
Apr 22 #Javascript
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
Apr 22 #Javascript
Vue下滚动到页面底部无限加载数据的示例代码
Apr 22 #Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
Apr 22 #Javascript
You might like
防止用户利用PHP代码DOS造成用光网络带宽
2011/03/01 PHP
打造超酷的PHP数据饼图效果实现代码
2011/11/23 PHP
一个基于phpQuery的php通用采集类分享
2014/04/09 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
PHP-FPM 的管理和配置详解
2019/02/17 PHP
javascript调试说明
2010/06/07 Javascript
浅析JavaScript 调试方法和技巧
2015/10/22 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
2015/11/26 Javascript
基于javascript编写简单日历
2016/05/02 Javascript
jQuery图片渐变特效的简单实现
2016/06/25 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
2017/10/24 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
2019/12/12 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
Python程序设计入门(5)类的使用简介
2014/06/16 Python
Python 如何访问外围作用域中的变量
2016/09/11 Python
详解Python开发中如何使用Hook技巧
2017/11/01 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
python将秒数转化为时间格式的实例
2018/09/16 Python
详解python中init方法和随机数方法
2019/03/13 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
python实现五子棋程序
2020/04/24 Python
html5理解head_动力节点Java学院整理
2017/07/13 HTML / CSS
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
办理房产证委托书
2014/09/18 职场文书
四风查摆剖析材料
2014/10/10 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
情况说明书格式及范文
2019/06/24 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript
Python使用Kubernetes API访问集群
2021/05/30 Python
python中pycryto实现数据加密
2022/04/29 Python
python中validators库的使用方法详解
2022/09/23 Python