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 相关文章推荐
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
Dec 29 Javascript
JQuery中的$.getJSON 使用说明
Mar 10 Javascript
JQuery实现绚丽的横向下拉菜单
Dec 19 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
Jan 10 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
Feb 26 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
Jun 09 Javascript
jquery的attr方法禁用表单元素禁用输入内容
Jun 23 Javascript
纯js实现无限空间大小的本地存储
Jun 18 Javascript
JavaScript的代码编写格式规范指南
Dec 07 Javascript
JavaScript的removeChild()函数用法详解
Dec 27 Javascript
使用FileReader API创建Vue文件阅读器组件
Apr 03 Javascript
Vue前端项目部署IIS的实现
Jan 06 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手机号码归属地查询代码(API接口/mysql)
2012/09/04 PHP
如何使用php绘制在图片上的正余弦曲线
2013/06/08 PHP
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
JS 遮照层实现代码
2010/03/31 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
使用js画图之画切线
2015/01/12 Javascript
JS仿淘宝实现的简单滑动门效果代码
2015/10/14 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
JavaScript必知必会(五) eval 的使用
2016/06/08 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
Canvas实现微信红包照片效果
2018/08/21 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
vue项目中常见问题及解决方案(推荐)
2019/10/21 Javascript
python3.5仿微软计算器程序
2020/03/30 Python
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
Python有序字典简单实现方法示例
2017/09/28 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
python从zip中删除指定后缀文件(推荐)
2019/12/05 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
传统HTML页面实现模块化加载的方法
2018/10/15 HTML / CSS
幼儿园招生广告
2014/03/19 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书
驻村工作简报
2015/07/20 职场文书
党员学习中国梦心得体会
2016/01/05 职场文书
高中政治教师教学反思
2016/02/23 职场文书
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL