微信小程序手势操作之单触摸点与多触摸点


Posted in Javascript onMarch 10, 2017

前言

手势对于一些效果是比较重要的,在canvas、交互等中应用非常广,看一下微信小程序手势是如何的。

Demo

为了研究小程序是否支持多手指,需要使用touchstart,touchmove,touchend

// index.wxml
<view id="gestureView" bindtouchstart="touchstartFn" bindtouchmove="touchmoveFn" bindtouchend="touchendFn" >
</view>
//index.js
touchstartFn: function(event){
  console.log(event);
 },
 touchmoveFn: function(event){
  console.log(event);
  // console.log("move: PageX:"+ event.changedTouches[0].pageX);
 },
 touchendFn: function(event){
  console.log(event);
  // console.log("move: PageX:"+ event.changedTouches[0].pageX);
 }

单触摸点,多触摸点

官方文档:changedTouches

changedTouches 数据格式同 touches。 表示有变化的触摸点,如从无变有(touchstart),位置变化(touchmove),从有变无(touchend、touchcancel)。

"changedTouches":[{ 
"identifier":0, "pageX":53, "pageY":14, "clientX":53, "clientY":14
}]

真机效果

实现以上Demo后模拟器是无法看到多触摸点的数据的,所以你需要真机来测试。

看下真机的log信息

微信小程序手势操作之单触摸点与多触摸点

在changedTouches中按顺序保存触摸点的数据,所以小程序本身支持多触摸点的手势

结论

设想: 既然小程序的手势是支持多触摸,而且可以获取到相关的路径,那么相关路径计算也是可行的。

场景: 多触摸交互效果,手指绘制等

触摸点数据保存

为了能够来分析触摸点的路径,最起码是简单的手势,如左滑、右滑、上滑、下滑,我们需要保存起路径的所有数据。

触摸事件

触摸触发事件分为"touchstart", "touchmove", "touchend","touchcancel"四个

详见:https://mp.weixin.qq.com/debug/wxadoc/dev/framework/view/wxml/event.html20

存储数据

var _wxChanges = [];
var _wxGestureDone = false;
const _wxGestureStatus = ["touchstart", "touchmove", "touchend","touchcancel"];
// 收集路径
function g(e){
  if(e.type === "touchstart"){
    _wxChanges = [];
    _wxGestureDone = false;
  }
  if(!_wxGestureDone){
    _wxChanges.push(e);
    if(e.type === "touchend"){
      _wxGestureDone = true; 
    }else if(e.type === "touchcancel"){
      _wxChanges = [];
      _wxGestureDone = true; 
    }
  }
}

结尾

这篇文章,主要探索一下,希望你也可以提前看一下手势的解析。

Javascript 相关文章推荐
jquery创建div 实现代码
Apr 27 Javascript
Jquery 基础学习笔记之文档处理
May 29 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
Apr 26 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
Nov 07 Javascript
JS获取IP、MAC和主机名的五种方法
Nov 14 Javascript
javascript中html字符串转化为jquery dom对象的方法
Aug 27 Javascript
详解js中构造流程图的核心技术JsPlumb
Dec 08 Javascript
angularJS Provider、factory、service详解及实例代码
Sep 21 Javascript
详解开源的JavaScript插件化框架MinimaJS
Oct 26 Javascript
react-redux中connect的装饰器用法@connect详解
Jan 13 Javascript
Vue实现点击按钮复制文本内容的例子
Nov 09 Javascript
OpenLayers3实现地图显示功能
Sep 25 Javascript
Web纯前端“旭日图”实现元素周期表
Mar 10 #Javascript
微信小程序 MD5的方法详解及实例代码
Mar 10 #Javascript
jQuery实现扑克正反面翻牌效果
Mar 10 #Javascript
AngularJS之页面跳转Route实例代码
Mar 10 #Javascript
Angular多选、全选、批量选择操作实例代码
Mar 10 #Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
Mar 10 #Javascript
Vue.js之slot深度复制详解
Mar 10 #Javascript
You might like
一个简单的PHP投票程序源码
2007/03/11 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
PHP动态输出JavaScript代码实例
2015/02/12 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
2015/08/10 Javascript
jQuery ztree实现动态树形多选菜单
2016/08/12 Javascript
BootStrap Table对前台页面表格的支持实例讲解
2016/12/22 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
angular4自定义组件详解
2017/09/28 Javascript
Vue中控制v-for循环次数的实现方法
2018/09/26 Javascript
layui点击数据表格添加或删除一行的例子
2019/09/12 Javascript
JavaScript中reduce()的5个基本用法示例
2020/07/19 Javascript
Vue中 axios delete请求参数操作
2020/08/25 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
2020/08/31 Javascript
vue中使用vue-pdf的方法详解
2020/09/05 Javascript
Python处理字符串之isspace()方法的使用
2015/05/19 Python
python如何获取服务器硬件信息
2017/05/11 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
Python实现实时数据采集新型冠状病毒数据实例
2020/02/04 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
《王二小》教学反思
2014/02/27 职场文书
婚礼司仪主持词
2014/03/14 职场文书
大学生求职信范文
2014/05/24 职场文书
关于运动会的广播稿(10篇)
2014/09/12 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
食品安全主题班会
2015/08/13 职场文书
创业计划书之宠物店
2019/09/19 职场文书
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript