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清除IE浏览器缓存的方法
Jul 26 Javascript
js+css实现的简单易用兼容好的分页
Dec 30 Javascript
基于jQuery实现响应式圆形图片轮播特效
Nov 25 Javascript
干货分享:让你分分钟学会javascript闭包
Dec 25 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
Aug 02 Javascript
JavaScript省市级联下拉菜单实例
Feb 14 Javascript
Vue 过滤器filters及基本用法
Dec 26 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
Mar 05 Javascript
jquery简单实现纵向的无缝滚动代码实例
Apr 01 jQuery
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
Feb 06 Javascript
基于ant design日期控件使用_仅月份的操作
Oct 27 Javascript
HTML元素拖拽功能实现的完整实例
Dec 04 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 Xdebug的安装与使用详解
2013/06/20 PHP
PHP中is_file()函数使用指南
2015/05/08 PHP
用PHP代码给图片加水印
2015/07/01 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
smarty自定义函数用法示例
2016/05/20 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
IE浏览器打印的页眉页脚设置解决方法
2009/12/08 Javascript
js时间日期和毫秒的相互转换
2013/02/22 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
2015/08/22 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
Js中async/await的执行顺序详解
2017/09/22 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
解决layer弹出层msg的文字不显示的问题
2019/09/11 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
2020/07/31 Javascript
Python获取脚本所在目录的正确方法
2014/04/15 Python
对python中的pop函数和append函数详解
2018/05/04 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
OpenCV搞定腾讯滑块验证码的实现代码
2019/05/18 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
django执行原始查询sql,并返回Dict字典例子
2020/04/01 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
简单了解Django项目应用创建过程
2020/07/06 Python
传统HTML页面实现模块化加载的方法
2018/10/15 HTML / CSS
英国的潮牌鞋履服饰商店:size?
2019/03/26 全球购物
企业治理工作自我评价
2013/09/26 职场文书
毕业生自荐书模版
2014/01/04 职场文书
元旦活动感言
2014/03/08 职场文书
计算机毕业生自荐信范文
2014/03/23 职场文书
售后服务承诺书范文
2014/03/26 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
办公室文员岗位职责
2015/02/04 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL