cocos creator 触摸事件官方案例
cocos creator 触摸事件官方案例
1、官方示例;
2、对官方示例的总结:
(1)介绍了鼠标事件和触摸事件的类型,这里主要关注的是在移动端和PC端都可以触发的触摸事件。
(2)节点事件的派发:a.捕获阶段,从根节点至子节点;b.目标触发阶段,在目标节点(如果是触摸事件,即在被触摸到的节点上触发);c.冒泡传递阶段:由目标节点逐级向父节点冒泡传递。
(3)propagationStopped 与preventSwallow 的用法。
3、补充:
(1)关于在捕获阶段或目标阶段注册事件的区别。默认情况下,触摸事件注册在节点的目标触发阶段,即被点到的目标节点的触发顺序高于其父节点。
但特殊情况下,例如ScrollView,父节点的触摸事件注册在捕获阶段,即使触摸到的是子节点,父节点也会优先触发。
为什么ScrollView需要如此设计?因为作为一个可以滑动的列表,ScrollView的子节点是其上面的子项。如果ScrollView的触摸事件注册在目标触发阶段,当其子节点接收到触摸事件后,将propagationStopped设置为true,则ScrollView无法触发该事件,也就是无法实现滑动的功能。而将父节点的触摸事件注册在捕获阶段,可以保证父节点一定先于它的任何子节点触发该事件。
(2)propagationStopped 与preventSwallow的区别:propagationStopped 控制事件是否停止传递,需要在父子节点关系中才生效。preventSwallow控制是否吞噬节点,与节点的父子关系无关。
注意:以下表格均以触摸事件注册在目标阶段为前提。
a.有节点A和节点B,节点B是节点A的子节点。
节点B的propagationStopped /触摸区域位置 | true | false |
---|---|---|
在A内 且 在B内 | A不触发;B触发 | A触发;B触发 |
在A内 不在B内 | A触发;B不触发 | A触发;B不触发 |
不在A内 在B内 | A不触发;B触发 | A触发;B触发 |
b.节点A和节点B同级,节点B的层级在节点A之上。
节点B的preventSwallow/触摸区域位置 | true | false |
---|---|---|
在A内 且 在B内 | A不触发;B触发 | A触发;B触发 |
在A内 不在B内 | A触发;B不触发 | A触发;B不触发 |
不在A内 在B内 | A不触发;B触发 | A不触发;B触发 |
c.节点B是节点A的子节点。如果节点B的propagationStopped和preventSwallow同时为false,当触摸区域在节点A内且在节点B内时,节点A的触摸事件会触发两次;若节点B的propagationStopped和preventSwallow同时为true,当触摸区域在节点A内且在节点B内时,节点A的触摸事件不被触发。
原文地址:https://blog.csdn.net/qq_39458250/article/details/144144672
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!