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 相关文章推荐
JavaScript 判断浏览器类型及版本
Feb 21 Javascript
Javascript Math对象
Aug 13 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
Apr 16 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
Oct 16 Javascript
jQuery过滤选择器详解
Jan 13 Javascript
vue-resource 拦截器使用详解
Feb 21 Javascript
Node.js 使用jade模板引擎的示例
May 11 Javascript
微信小程序-form表单提交代码实例
Apr 29 Javascript
一些可能会用到的Node.js面试题
Jun 15 Javascript
Node配合WebSocket做多文件下载以及进度回传
Nov 07 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
Jan 19 Javascript
JavaScript多种图形实现代码实例
Jun 28 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
将数字格式的计算结果转为汉字格式
2006/10/09 PHP
linux下使用ThinkPHP需要注意大小写导致的问题
2011/08/02 PHP
PHP中的正则表达式函数介绍
2012/02/27 PHP
php 批量替换html标签的实例代码
2013/11/26 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
Javascript中正则表达式的全局匹配模式分析
2011/04/26 Javascript
Javascript中的String对象详谈
2014/03/03 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
jquery插件bxslider用法实例分析
2015/04/16 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
2016/01/26 Javascript
input框中的name和id的区别
2016/11/16 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
JavaScript面试中常考的字符串操作方法大全(包含ES6)
2020/05/10 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
[01:04:09]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第二场 2月2日
2021/03/11 DOTA
Python中的变量和作用域详解
2016/07/13 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
Python编程图形库之Pillow使用方法讲解
2018/12/28 Python
Python图片的横坐标汉字实例
2019/12/04 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
Django框架配置mysql数据库实现过程
2020/04/22 Python
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
美国汽车零部件和配件网站:CarParts
2019/03/13 全球购物
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
Bugatchi官方网站:男士服装在线
2019/04/10 全球购物
兰蔻英国官网:Lancome英国
2019/04/30 全球购物
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
秘书专业自荐信范文
2013/12/26 职场文书
优秀企业获奖感言
2014/02/01 职场文书
十岁生日答谢词
2015/01/05 职场文书
2015年人力资源部工作总结
2015/04/30 职场文书
ORACLE数据库对long类型字段进行模糊匹配的解决思路
2021/04/07 Oracle
Redis高并发缓存架构性能优化
2022/05/15 Redis