在 cc.ScrollView 中的 _hasNestedViewGroup
函数
_hasNestedViewGroup (event, captureListeners) {
if (event.eventPhase !== cc.Event.CAPTURING_PHASE) return;
if (captureListeners) {
//captureListeners are arranged from child to parent
for (let i = 0; i < captureListeners.length; ++i){
let item = captureListeners[i];
if (this.node === item) {
if (event.target.getComponent(cc.ViewGroup)) {
return true;
}
return false;
}
if(item.getComponent(cc.ViewGroup)) {
return true;
}
}
}
return false;
},
- 我想问一下这段代码具体有什么作用,看不太明白
if (captureListeners) {
//captureListeners are arranged from child to parent
for (let i = 0; i < captureListeners.length; ++i){
let item = captureListeners[i];
if (this.node === item) {
if (event.target.getComponent(cc.ViewGroup)) {
return true;
}
return false;
}
if(item.getComponent(cc.ViewGroup)) {
return true;
}
}
}
我在论坛中找到的 PageView
嵌套 ScrollView
方法,重写上面函数:
cc.Class({
extends: cc.PageView,
//this is for nested scrollview
_hasNestedViewGroup: function(event, captureListeners) {
if (event.eventPhase !== cc.Event.CAPTURING_PHASE) return;
// 这四句是加的,用于实现嵌套
const touch = event.touch;
if (!touch) return;
const deltaMove = touch.getLocation().sub(touch.getStartLocation());
if (deltaMove.x > 7 || deltaMove.x < -7) return false;
if (captureListeners) {
for (var i = 0; i < captureListeners.length; ++i) {
var item = captureListeners[i];
if (this.node === item) {
if (event.target.getComponent(cc.ViewGroup)) {
return true;
}
return false;
}
if (item.getComponent(cc.ViewGroup)) {
return true;
}
}
}
return false;
},
});
用这个脚本替换 PageView
,有时候会报错:
Uncaught TypeError: Cannot read property '_capturingListeners' of undefined
at _doDispatchEvent (CCNode.js:630)
at cc_Node.dispatchEvent (CCNode.js:2380)
at TouchOneByOne._touchMoveHandler [as onTouchMoved] (CCNode.js:478)
at _onTouchEventCallback (CCEventManager.js:517)
at Object._dispatchEventToListeners (CCEventManager.js:646)
at Object._dispatchTouchEvent (CCEventManager.js:568)
at Object.dispatchEvent (CCEventManager.js:1031)
at Object.handleTouchesMove (CCInputManager.js:197)
at _mouseEventsOnElement (CCInputManager.js:458)
at HTMLCanvasElement.<anonymous> (CCInputManager.js:482)
频率还有点高,但是不影响实际效果。
2. 还想请教下这个问题的修复方式?