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 相关文章推荐
Highslide.js是一款基于js实现的网页中图片展示插件
Mar 30 Javascript
jquery 插件开发备注
Aug 27 Javascript
理解Javascript_14_函数形式参数与arguments
Oct 20 Javascript
EasyUI 中 MenuButton 的使用方法
Jul 14 Javascript
seaJs的模块定义和模块加载浅析
Jun 06 Javascript
jquery中push()的用法(数组添加元素)
Nov 25 Javascript
纯javascript代码实现计算器功能(三种方法)
Sep 07 Javascript
AngularJS全局警告框实现方法示例
May 18 Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
Sep 14 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
Mar 24 Javascript
JavaScript 下载svg图片为png格式
Jun 21 Javascript
JavaScript跳出循环的三种方法(break, return, continue)
Jul 30 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的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
javascript学习笔记(八) js内置对象
2012/06/19 Javascript
jQuery 关于伪类选择符的使用说明
2013/04/24 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
javascript新闻跑马灯实例代码
2020/07/29 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
原生js实现新闻列表展开/收起全文功能
2017/01/20 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
vue-cli2.0转3.0之项目搭建的详细步骤
2018/12/11 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
Python中的自定义函数学习笔记
2014/09/23 Python
python获取Linux下文件版本信息、公司名和产品名的方法
2014/10/05 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
Python 字符串池化的前提
2020/07/03 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
Html5剪切板功能的实现代码
2018/06/29 HTML / CSS
Daisy London官网:英国最大的首饰集团IBB旗下
2019/02/28 全球购物
推普周国旗下讲话稿
2014/09/21 职场文书
承德避暑山庄导游词
2015/02/03 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书
工作简报范文
2015/07/21 职场文书
七年级作文之环保作文
2019/10/17 职场文书
用Python selenium实现淘宝抢单机器人
2021/06/18 Python
MySQL索引是啥?不懂就问
2021/07/21 MySQL