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 相关文章推荐
js加减乘除丢失精度问题解决方法
May 16 Javascript
深入分析jQuery的ready函数是如何工作的(工作原理)
Dec 17 Javascript
原生JS实现层叠轮播图
May 17 Javascript
vue.js国际化 vue-i18n插件的使用详解
Jul 07 Javascript
利用express启动一个server服务的方法
Sep 17 Javascript
基于vue2.0实现简单轮播图
Nov 27 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
Mar 14 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
Apr 18 Javascript
vue实现一个炫酷的日历组件
Oct 08 Javascript
Javascript中绑定click事件的四种方式介绍
Oct 26 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
Apr 17 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
Aug 20 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延迟静态绑定实例分析
2015/02/08 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
jQuery的一些特性和用法整理小结
2010/01/13 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
文字垂直滚动之javascript代码
2015/07/29 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
2016/12/07 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
[00:12]DAC2018 no[o]ne亮相SOLO赛 他是否如他的id一样无人可挡?
2018/04/06 DOTA
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
Python脚本去除文件的只读性操作
2020/03/05 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
Django实现微信小程序支付的示例代码
2020/09/03 Python
如何基于pandas读取csv后合并两个股票
2020/09/25 Python
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
extern是什么意思
2016/03/10 面试题
商务英语求职自荐信范文
2013/12/24 职场文书
大学生实习思想汇报
2014/01/12 职场文书
小学生元旦广播稿
2014/02/21 职场文书
爱情保证书
2015/01/17 职场文书
听证通知书
2015/04/24 职场文书
退货证明模板
2015/06/23 职场文书