ReactNative 触摸事件处理

ReactNative触摸事件处理

对RN触摸事件的捕获与冒泡机制的理解

组件A、B、C结构

组件A组件B组件C

捕获、冒泡机制

sequenceDiagram
A->>A: 是否捕获?若是则停止向下一级传递
A->>B: 
B->>B: 是否捕获?若是则停止向下一级传递
B->>C: 
C->>C: 是否捕获?若是则停止向下一级传递
C->>C: 是否声明成为响应者?无论是否,都冒泡。
C->>B: 
B->>B: 是否声明成为响应者?无论是否,都冒泡。
B->>A: 
A->>A: 是否声明成为响应者?

捕获期可通过onStartShouldSetResponderCapture 或 onMoveShouldSetResponderCapture回调决定是否阻止事件往下级组件传递。

冒泡期可通过onStartShouldSetResponder或onMoveShouldSetPanResponder回调决定是否成为响应者。若上级组件与下级组件都返回true,则下级组件成为当前触摸事件的响应者。(层级越深的组件优先级越高)

补充:

react-native Touch事件的拦截与分发

来自CSDN博文

RN如何处理触摸事件

View组件的pointerEvents属性

用于控制当前视图是否可以作为触控事件的目标。

  • auto:视图可以作为触控事件的目标。
  • none:视图不能作为触控事件的目标。
  • box-none:视图自身不能作为触控事件的目标,但其子视图可以。

View组件可用的手势

onTouchStart={()=>console.log('start')}
onTouchMove={()=>console.log('move')}
onTouchEnd={()=>console.log('end')}

PanResponder 手势监视器

// 创建监视器
this.panResponder = PanResponder.create({onStartShouldSetPanResponder: ()=>{},...
})// 在View中使用
<View{...this.panResponder}
/>

事件参数

每个事件都有两个返回参数nativeEvent, gestureState

nativeEvent包含以下属性

changedTouches - 在上一次事件之后,所有发生变化的触摸事件的数组集合(即上一次事件后,所有移动过的触摸点)
identifier - 触摸点的 ID
locationX - 触摸点相对于父元素的横坐标(实践证明不好用,值会突变!原因未知)
locationY - 触摸点相对于父元素的纵坐标(实践证明不好用,值会突变!)
pageX - 触摸点相对于根元素的横坐标
pageY - 触摸点相对于根元素的纵坐标
target - 触摸点所在的元素 ID
timestamp - 触摸事件的时间戳,可用于移动速度的计算
touches - 当前屏幕上的所有触摸点的集合

gestureState包含以下属性:

stateID 此次触摸事件的ID
moveX 最近一次移动的屏幕坐标
moveY
x0 响应器产生时的屏幕坐标(手势第一个坐标)
y0
dx 触摸开始累积的横向路程
dy
vx 当前的横向移动速度
vy
numberActiveTouches 触摸点数量

事件生命周期

单点事件

onStartShouldSetResponderCapture 如果父视图想要阻止子视图响应 touch start 事件,它就应该设置这个方法并返回 true。

onStartShouldSetResponder 在用户开始触摸的时候(手指刚刚接触屏幕的瞬间),返回是否愿意成为响应者

onPanResponderGrant 这个视图开始响应触摸事件。此时需要高亮告诉用户正在响应。

onPanResponderStart 触摸事件正式被监视

onPanResponderEnd 触摸事件结束

onPanResponderRelease 在整个触摸事件结束时调用这个函数。

移动事件

onMoveShouldSetResponderCapture 如果父视图想要阻止子视图响应 touch move 事件时,它就应该设置这个方法并返回 true

onMoveShouldSetPanResponder 这个视图想要“认领”这个 touch move 事件吗?每当有 touch move 事件在这个视图中发生,并且这个视图没有被设置为这个 touch move 的响应时,这个函数就会被调用。

onPanResponderGrant 监视器发出通知开始工作

onPanResponderMove 当用户正在屏幕上移动手指时调用这个函数。

异常事件

onPanResponderReject 有一个响应器正处于活跃状态,并且不会向另一个要求响应这个事件的视图释放这个事件。

onPanResponderTerminationRequest 其他某个视图想要成为事件的响应者,并要求这个视图放弃对事件的响应时,就会调用这个函数。如果允许释放响应,就返回true。

onPanResponderTermination 响应被从这个视图上“劫走”了。可能是在调用了 onResponderTerminationRequest 之后,被另一个视图“劫走”了(见 onresponderterminationrequest), 也可能是由于 OS 无条件终止了响应(比如说被 iOS 上的控制中心/消息中心)

转载于:https://www.cnblogs.com/foxNike/p/11119204.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CISCO网络故障排错命令总结分享

一、故障处理命令 1、show命令&#xff1a; 1&#xff09; 全局命令&#xff1a; show version &#xff1b;显示系统硬件和软件版本、DRAM、Flash show startup-config &#xff1b;显示写入NVRAM中的配置内容 show running-config &#xff1b;显示当前运行的配置内容 show b…

java input回车,用java怎样编写加减乘除,从键盘输入,例如:1+2按回车得到

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼import org.junit.Test;import java.util.regex.Matcher;import java.util.regex.Pattern;public class TestCalc {Testpublic void testCalculator() {String input "11";//输入String rule "(\\d\\.?\\d*)([\\…

Java中数组在内存中的存放原理?

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/yangyong0717/article/details/79165685Java中数组被实现为对象&#xff0c;它们一般都会因为记录长度而需要额外的内存。对于一个原始数据类型的数组&#xff0c;一般需要24…

程序员如何面试才能拿到offer

一、概述 面试&#xff0c;难还是不难&#xff1f;取决于面试者的底蕴&#xff08;气场技能&#xff09;、心态和认知及沟通技巧。面试其实可以理解为一场聊天和谈判&#xff0c;在这过程中有心理、思想上的碰撞和博弈。其实你只需要搞清楚一个逻辑&#xff1a;“面试官为什么会…

php 跨区域,如何构造PHP的内容包括在非安全(http://)和安全(https://)区域以及跨多个目录使用?...

只需使用//example.com/foo.blah即可.< img id “sample-image”src “// /media/sample-image.png”/>很明显,HTTP是协议,但存在其他协议,如GOPHER,HTTPS,FTP等……而不是在gopher URL gopher&#xff1a;//example.com上,您只需链接到//example.com,协议就可以在没有它…

Generative Adversarial Learning Towards Fast Weakly Supervised Detection(CVPR2018)阅读笔记

弱监督目标检测相对于一般的目标检测任务来说&#xff0c;训练样本不需要实例级别的标注&#xff0c;只需要图片级别的标注&#xff0c;即告诉图片中有什么而不需标注位置信息&#xff0c;这种标注图片容易获取&#xff0c;能节省标注时间及精力。现有的大部分方法在进行若监督…

如何添加JWT生成的token在请求头中

前言 在我们使用JWT来做用户的验证时&#xff0c;我们登陆生成对应的token,并加入到请求的参数中发送到后台提供相关的权限校验。这个时候我们需要使用到传递请求头参数传递的问题&#xff0c;下面是两种方式。 1.ajax提交方式 1&#xff09;.方法一&#xff1a; $.ajax({ type…

Gradle 使用技巧(二) - SO/NDK过滤

引言 作为一个Android开发人员&#xff0c;so对于我们来讲是极其常见的&#xff0c;各种大厂的SDK中都包含着各种各样的so&#xff0c;而so也是apk瘦身的重要一环&#xff0c;减少so平台的数量&#xff0c;可以极大限度的减少apk的大小。 Android 中的so 先看一张官方的图&…

java两个数之间质数求法,求任意两个整数之间质数的个数的代码!!!(新手编写)...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/*** Title:Calculate acount of prime number between preNum and rearNum;* Author: public* Time&#xff1a;2008.12.5 21:09:35*/import java.awt.*;import java.awt.event.*;class Arithmetic{//将计算质数个数的类封装在此类…

VMware——安装CentOS

VMware——安装CentOS 摘要&#xff1a;本文主要记录了在VMware虚拟机里安装CentOS的步骤。 下载操作系统 可以从下面的镜像地址去下载各种版本的CentOS&#xff0c;此次安装使用的版本是7.2&#xff1a; http://archive.kernel.org/centos-vault/ http://mirror.nsc.liu.se/ce…

django1.4.9 OMserverweb站点管理

1.项目setting.py配置&#xff1a; 2.项目url.py配置&#xff1a; 错误提示&#xff1a;auth_user这个表没有创建&#xff0c;那个因为,admin站点默认数据表需要迁移。执行python manage.py syncdb 会创建所有应用程序需要的数据库表4.接下来就是根据要求一步一步来&#xff1a…

matlab读取气象数据,基于MATLAB实现3种气象数据的读取和绘图

第 29卷第 4期 2007年 11月 广 东 气 象 GuangdongMeteorology Vol. 29  No. 4 November 2007 基于 MATLAB实现 3种气象数据的读取和绘图 刘  峰 , 刘  娟 , 李  萍 , 林  智 (民航中南空中交通管理局气象中心 ,广东广州  510406)   摘  要 :针对 M ICAPS、 GR IB和…

[USACO17JAN]Promotion Counting 题解

前言 巨佬说:要有线段树&#xff0c;结果蒟蒻打了一棵树状数组... 想想啊&#xff0c;奶牛都开公司当老板了&#xff0c;我还在这里码代码&#xff0c;太失败了。话说奶牛开个公司老板不应该是FarmerJohn吗&#xff1f; 题解 刚看到这道题的时候竟然没有想到深搜&#xff0c;然…

牛客小白月赛6 水题 求n!在m进制下末尾0的个数 数论

链接&#xff1a;https://www.nowcoder.com/acm/contest/135/C来源&#xff1a;牛客网 题目描述 其中&#xff0c;f(1)1;f(2)1;Z皇后的方案数&#xff1a;即在ZZ的棋盘上放置Z个皇后&#xff0c;使其互不攻击的方案数。 输入描述: 输入数据共一行&#xff0c;两个正整数x,m&am…

centos php7 apcu,centos php5.4 升级 php7

接上篇&#xff0c;edusoho需要php5.5以上版本&#xff0c;于是需要升级本地phpphp是通过yum默认安装的。以下安装参考 linkhttps://blog.csdn.net/u012569217/article/details/77506902因此先查看本地php版本php -v检查当前php的安装包yum list installed | grep php将本地php…

子类访问父类和方法覆写

子类不能直接访问父类的私有成员&#xff1b; 但是子类可以调用父类中的非私有方法来间接访问父类的私有成员。 Person类中有私有字段name,Student继承Person new Sudent().name; new Student().getName(); √ 子类拓展父类&#xff08;子类是父类的一种特殊…

面向对象笔试题练习一

1.接口只能被类实现&#xff0c;类不能继承接口&#xff0c;遵循单继承多实现原则&#xff1b; 2.静态方法中不能引用其外部的非静态成员&#xff1b; 3.实现 Runnable 接口&#xff0c;接口中有一个抽象方法 run&#xff0c;实现类中重写该方法&#xff1b; 4.public修饰的方法…

curl 升级 php,将命令行cURL转换为PHP cURL

我从来没有做过任何卷曲&#xff0c;所以需要一些帮助。我试图从例子中解决这个问题&#xff0c;但无法理解它&#xff01;我有一个curl命令&#xff0c;我可以从linux(ubuntu)命令行成功运行&#xff0c;该命令行通过api将文件放入wiki。我需要将这个curl命令合并到我正在构建…

VM-ESXI 相关常用命令(Updateing)

# ESXI计划任务路径&#xff1a;cat /var/spool/cron/crontabs/root # 获取虚拟机列表vim-cmd vmsvc/getallvms获取vm状态vim-cmd vmsvc/power.getstat [vmid]关闭虚机vim-cmd vmsvc/power.shutdown [vmid]vim-cmd vmsvc/power.off [vmid] # 强制关闭长期脚本存放路径 vi /etc/…

sql server中的go

1. 作用:向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号.2. 语法:一批 Transact-SQL 语句GO如Select 1Select 2Select 3GO3. 说明:1) GO 不是 Transact-SQL 语句&#xff1b;2) 它是 sqlcmd 和 osql 实用工具以及 SQL Server Management Studio 代码编辑器识别的…