如题,是否有类似addListener(eventName, eventCallback, priority)这样的方式能设置事件回调的优先级。
使得用户能够设置回调的先后顺序。
目前没有办法哦
- 首先,祝贺你们2.0正式发布。
- 代码提示好像有个DragEvent,但没找到实际所在处,也就用不上了。
- 优先级是因为开发拖放系统,多个拖放区叠在一起,不知道如何让最上面的最优先响应拖放操作,因为不熟悉在节点树中自定义事件
- 于是就开发了个拖放系统,里面有关于优先级的操作,发代码于此,望指教:
/**
* 拖放管理器
*/
var DragAndDropManager = cc.Class({
extends: cc.Component,
properties: {
},
statics: {
Singleton: null,
},
// LIFE-CYCLE CALLBACKS:
onLoad() {
if (!DragAndDropManager.Singleton)
DragAndDropManager.Singleton = this;
else
this.destroy();
// 创建监听器组
this._dragListeners = {
};
this._dragListeners[DragAndDropManager.EventType.DRAG_START] = [];
this._dragListeners[DragAndDropManager.EventType.DRAG_MOVE] = [];
this._dragListeners[DragAndDropManager.EventType.DRAG_END] = [];
},
/**
*
* @param {*} dragType
* @param {*} callback
* @param {*} priority
*/
addDragAndDropListener(dragType, callback, priority){
// 获取对应的监听器组
var _listeners = this._dragListeners[dragType];
if (_listeners) {
var exists = false;
_listeners.some(e=>{
if (e.callback === callback && e.priority === priority) {
exists = true;
return true;
}
});
// 不重复添加
if (exists === true)
return;
_listeners.push({callback:callback, priority:priority});
//
_listeners.sort(this._sortListener);
}
},
/**
*
* @param {*} dragType
* @param {*} callback
* @param {*} priority
*/
removeDragAndDropListener(dragType, callback, priority){
var _listeners = this._dragListeners[dragType];
if (_listeners) {
_listeners.some((e, i) => {
if (e.callback === callback && e.priority === priority) {
_listeners.splice(i, 1);
return true;
}
});
}
},
/**
* 发送拖拽事件
* @param {cc.Node} dragTarget
*/
emitDrag(dragType, dragTarget, touchLocation){
var dragEvent = {
type: dragType,
target: dragTarget,
location: touchLocation,
stop: false,
};
var _listeners = this._dragListeners[dragType];
if (_listeners) {
for (var i = 0; i < _listeners.length; ++i) {
_listeners[i].callback(dragEvent);
// 是否上一个处理终止事件继续传递
if(dragEvent.stop === true)
break;
}
}
},
_sortListener(a, b) {
return a.priority - b.priority;
},
});
DragAndDropManager.EventType = {
DRAG_START: 'dragStart',
DRAG_MOVE: 'dragMove',
DRAG_END: 'dragEnd',
};
module.exports = DragAndDropManager;
以后会有吗,感觉是个很实用的功能