ScrollView相关的触摸问题

图中ScrollView节点挂载了cc.ScrollView组件,item节点通过on函数注册了touch_began的事件回调,那么有以下三个问题:

  1. 通过调试发现,touch_began事件会先传递到ScrollView节点,之后才传递到item,可是按文档中的说法,触摸事件应该是子节点往根节点方向传递
  2. 既然触摸事件先传递到ScrollView节点,而在ScrollView的_onTouchMoved方法中又调用了event.stopPropagation,这意味着item节点收不到touch_move事件,感觉这不是一个很好的设计
  3. 有没有什么优雅的方法可以禁止cc.ScrollView中content节点的滚动
  1. 事件分为 capture 阶段和 bubble 阶段,文档中说的从子节点往根节点传递是 bubble 阶段,而Scrollview注册的是 capture 阶段的事件,这样可以防止点击 scrollview 中的 button 滚动的时候触发 button 的 click 事件。

  2. 这里确实有一点小问题,scrollview 只需要 cancel item 的 click 事件就行了。

  3. 如果要禁止 content 的滚动,只需要把 scrollview 的 horizontal 和 vertical 属性都设置为 false 就可以了。

无法做到只 cancel click 事件,因为没有 click 事件。同时我认为子节点的 move 事件也不应该触发了,满足不了实际的需求,打个比方,你要 drag n drop,肯定要阻止 scrollview 的 touch 事件才可以,如果要 move scroll view 的同时 move 子节点,只会乱套,因为 scrollview 本身的 position 改变后,叠加上子节点的位置改变,就错了

感谢团队同学的回复;)

是先出发 scrollview 还是 先 item啊 .

我这里想补充个问题,scrollview 在进行 scrollToLeft or scrollToRight 的时候,子节点上面的button click 事件把这个scrollToLeft打断了怎么处理?