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中的面向对象介绍
Jun 30 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
Apr 11 Javascript
深入探讨javascript中的数据类型
Mar 04 Javascript
举例讲解jQuery中可见性过滤选择器的使用
Apr 18 Javascript
Bootstrap每天必学之附加导航(Affix)插件
Apr 25 Javascript
jQuery的框架介绍
May 11 Javascript
jQuery UI插件实现百度提词器效果
Nov 21 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
Aug 25 Javascript
Vue中使用sass实现换肤功能
Sep 07 Javascript
JavaScript监听一个DOM元素大小变化
Apr 26 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
Jul 21 Javascript
谈谈JavaScript中的函数
Sep 08 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设置允许大文件上传示例代码
2014/03/10 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
php显示指定目录下子目录的方法
2015/03/20 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
2017/12/13 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
javascript IFrame 强制刷新代码
2009/07/23 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
2016/11/25 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
nodejs开发——express路由与中间件
2017/03/24 NodeJs
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
vue router使用query和params传参的使用和区别
2017/11/13 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
解决Layui中layer报错的问题
2019/09/03 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
[02:32]DOTA2完美大师赛场馆静安体育中心观赛全攻略
2017/11/08 DOTA
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
Python版的文曲星猜数字游戏代码
2013/09/02 Python
python版简单工厂模式
2017/10/16 Python
Python单元测试简单示例
2018/07/03 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
python通用读取vcf文件的类(复制粘贴即可用)
2020/02/29 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
PHP引擎php.ini参数优化深入讲解
2021/03/24 PHP
卫校护理专业毕业生求职信
2013/11/26 职场文书
电视购物广告词
2014/03/19 职场文书
军训拉歌口号
2014/06/13 职场文书
公司收款委托书范本
2014/09/20 职场文书
值班管理制度范本
2015/08/06 职场文书
小学生反邪教心得体会
2016/01/15 职场文书