微信小程序 触控事件详细介绍


Posted in Javascript onOctober 17, 2016

微信小程序 触控事件:

            微信小程序的"事件"挺有意思。看了说明文档后发现它的功能很全,事件可以向父节点传递,而且打印这个事件的信息很透明,调试起来应该非常方便。
接下来把文档copy过来

原文地址:https://mp.weixin.qq.com/debug/wxadoc/dev/framework/view/wxml/event.html

》》》什么是事件

  1. 事件是视图层到逻辑层的通讯方式。
  2. 事件可以将用户的行为反馈到逻辑层进行处理。
  3. 事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。
  4. 事件对象可以携带额外信息,如id, dataset, touches。

事件的使用方式

在组件中绑定一个事件处理函数。

如bindtap,当用户点击该组件的时候会在该页面对应的Page中找到相应的事件处理函数。

<view id="tapTest" data-hi="MINA" bindtap="tapName"> Click me! </view> 

在相应的Page定义中写上相应的事件处理函数,参数是event。

Page({ 
 tapName: function(event) { 
 console.log(event) 
 } 
})

可以看到log出来的信息大致如下:

{ 
"type": "tap", 
"timeStamp": 1252, 
"target": { 
 "id": "tapTest", 
 "offsetLeft": 0, 
 "offsetTop": 0, 
 "dataset": { 
 "hi": "MINA" 
 } 
}, 
"currentTarget": { 
 "id": "tapTest", 
 "offsetLeft": 0, 
 "offsetTop": 0, 
 "dataset": { 
 "hi": "MINA" 
 } 
}, 
"touches": [{ 
 "pageX": 30, 
 "pageY": 12, 
 "clientX": 30, 
 "clientY": 12, 
 "screenX": 112, 
 "screenY": 151 
}], 
"detail": { 
 "x": 30, 
 "y": 12 
} 
}

事件详解

事件分类

事件分为冒泡事件和非冒泡事件:

冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。

非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。

》》》事件分类

  1. touchstart 手指触摸
  2. touchmove 手指触摸后移动
  3. touchcancel 手指触摸动作被打断,如弹窗和来电提醒
  4. touchend 手指触摸动作结束
  5. tap 手指触摸后离开
  6. longtap 手指触摸后后,超过350ms离开

》》》事件绑定

事件绑定的写法同组件的属性,以 key、value 的形式。

  1. key 以bind或catch开头,然后跟上事件的类型,如bindtap, catchtouchstart
  2. value 是一个字符串,需要在对应的 Page 中定义同名的函数。不然当触发事件的时候会报错。 bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。

上面简单介绍了小程序事件基础,是时候彰显"事件"的威力:

  1. 单击(tap)
  2. 双击(dbtap)
  3. 长按(longtap)
  4. 滑动
  5. 多点触控

1.单击

单击事件由touchstart、touchend组成,touchend后触发tap事件。

 微信小程序 触控事件详细介绍

<view>
 <button type="primary" bindtouchstart="mytouchstart" bindtouchend="mytouchend" bindtap="mytap">点我吧</button>
</view>
mytouchstart: function(e){ console.log(e.timeStamp + '- touch start')
},mytouchend: function(e){ console.log(e.timeStamp + '- touch end')
},mytap: function(e){ console.log(e.timeStamp + '- tap')
}

2.双击

双击事件由两个单击事件组成,两次间隔时间小于300ms认为是双击;微信官方文档没有双击事件,需要开发者自己定义处理。

 微信小程序 触控事件详细介绍

<view>
 <button type="primary" bindtap="mytap">点我吧</button>
</view>

 微信小程序 触控事件详细介绍

 3.长按

长按事件手指触摸后,超过350ms再离开。

 微信小程序 触控事件详细介绍

<view>
 <button type="primary" bindtouchstart="mytouchstart" bindlongtap="mylongtap" 
 bindtouchend="mytouchend" bindtap="mytap">点我吧</button>
</view>
mytouchstart: function(e){ console.log(e.timeStamp + '- touch start')
},//长按事件mylongtap: function(e){ console.log(e.timeStamp + '- long tap')
 },mytouchend: function(e){ console.log(e.timeStamp + '- touch end')
},mytap: function(e){ console.log(e.timeStamp + '- tap')
}

单击、双击、长按属于点触事件,会触发touchstart、touchend、tap事件,touchcancel事件只能在真机模拟,不多说了。

事件 触发顺序
单击 touchstart → touchend → tap
双击 touchstart → touchend → tap → touchstart → touchend → tap
长按 touchstart → longtap → touchend → tap

4.滑动

手指触摸屏幕并移动,为了简化起见,下面以水平滑动和垂直滑动为例。 滑动事件由touchstart、touchmove、touchend组成

 微信小程序 触控事件详细介绍

坐标图:

 微信小程序 触控事件详细介绍

  1. 以屏幕左上角为原点建立直角坐标系。第四象限为手机屏幕,Y轴越往下坐标值越大(注意跟数学象限的区别)。
  2. 假设A点为touchstart事件触摸点,坐标为A(ax,ay),然后手指向上滑动到点B(bx,by),就满足条件by < ay;
  3. 同理,向右滑动到C(cx,cy),满足cx > ax;向下滑动到D(dx,dy),满足dy > ay;向左移动到E(ex,ey)满足ex < ax.
  4. 计算线段AB在Y轴上投影长度为m,在X轴上的投影长度为n
  5. 计算r = m/n,如果r > 1,视为向上滑动。
  6. 同理计算线段AC,AD,AE在Y轴投影长度与X轴的投影长度之比,得出向右向下向左的滑动。

以上没考虑r为1的情况。

<view>
 <button type="primary" bindtouchstart="mytouchstart" bindtouchmove="mytouchmove">点我吧</button>
</view>

微信小程序 触控事件详细介绍

5.多点触控

由于模拟器尚不支持多点触控,内测开放后,继续补充。

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
Javascript 判断 object 的特定类转载
Feb 01 Javascript
Javascript之文件操作
Mar 07 Javascript
javascript-TreeView父子联动效果保持节点状态一致
Aug 12 Javascript
js 判断checkbox是否选中的操作方法
Nov 09 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
Mar 11 Javascript
jQuery添加和删除指定标签的方法
Dec 16 Javascript
Kindeditor在线文本编辑器如何过滤HTML
Apr 14 Javascript
微信小程序 http请求详细介绍
Oct 09 Javascript
一篇文章搞定JavaScript类型转换(面试常见)
Jan 21 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
Apr 08 jQuery
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
Dec 29 Javascript
Javascript实现打鼓效果
Jan 29 Javascript
Angular2从搭建环境到开发步骤详解
Oct 17 #Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
Oct 17 #Javascript
学习Node.js模块机制
Oct 17 #Javascript
微信小程序 火车票查询实例讲解
Oct 17 #Javascript
让编辑器支持word复制黏贴、截屏的js代码
Oct 17 #Javascript
Node.js下自定义错误类型详解
Oct 17 #Javascript
js HTML5多媒体影音播放
Oct 17 #Javascript
You might like
无数据库的详细域名查询程序PHP版(3)
2006/10/09 PHP
php二分法在IP地址查询中的应用
2008/08/12 PHP
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
PHP不用第三变量交换2个变量的值的解决方法
2013/06/02 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
懒就要懒到底——鼠标自动点击(含时间判断)
2007/02/20 Javascript
出现“不能执行已释放的Script代码”错误的原因及解决办法
2007/08/29 Javascript
JavaScript 继承详解(三)
2009/07/13 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
jQuery实现的可编辑表格完整实例
2016/06/20 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
2020/04/30 jQuery
JavaScript实现轮播图效果
2020/10/30 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
[02:18]《我与DAC》之工作人员:为了热爱DOTA2的玩家们
2018/03/28 DOTA
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
2014/07/09 Python
跟老齐学Python之编写类之二方法
2014/10/11 Python
python实现简单中文词频统计示例
2017/11/08 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
Python列表推导式实现代码实例
2020/09/09 Python
python用Configobj模块读取配置文件
2020/09/26 Python
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
JoJo Maman Bébé爱尔兰官网:英国最受欢迎的精品母婴品牌
2020/12/20 全球购物
高中物理教学反思
2014/02/08 职场文书
乡镇网格化管理实施方案
2014/03/23 职场文书
创先争优活动党员公开承诺书
2014/08/29 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
银行员工考核评语
2014/12/31 职场文书
罚站检讨书
2015/01/29 职场文书
未婚证明范本
2015/06/15 职场文书
Python编程源码报错解决方法总结经验分享
2021/10/05 Python