Aar0n @Aar0n 我想在问一下, laya.core.js 3452----3522行
/**
*处理TouchEnd事件
*@param ele 根节点
*@param touchID touchID
*@param isLeft 是否为左键
*/
__proto.onMouseUp=function(ele,touchID,isLeft){
(isLeft===void 0)&& (isLeft=false);
if (!this.enable)
return;
var preO;
var tO;
var arrs;
var oldArr;
var i=0,len=0;
var tar;
var sendArr;
var onMobile=Browser.onMobile;
arrs=this.getEles(ele,null,TouchManager._tEleArr);
this.sendEvents(arrs,isLeft ? /*laya.events.Event.MOUSE_UP*/"mouseup" :/*laya.events.Event.RIGHT_MOUSE_UP*/"rightmouseup",touchID);
var preDowns;
preDowns=isLeft ? this.preDowns :this.preRightDowns;
preO=this.getTouchFromArr(touchID,preDowns);
if (!preO){
}else {
var isDouble=false;
var now=Browser.now();
isDouble=now-this._lastClickTime < 300;
this._lastClickTime=now;
if (ele==preO.tar){
sendArr=arrs;
}else {
oldArr=this.getEles(preO.tar,null,TouchManager._oldArr);
sendArr=TouchManager._newArr;
sendArr.length=0;
len=oldArr.length;
for (i=0;i < len;i++){
tar=oldArr[i];
if (arrs.indexOf(tar)>=0){
sendArr.push(tar);
}
}
}
if (sendArr.length > 0){
this.sendEvents(sendArr,isLeft ? /*laya.events.Event.CLICK*/"click" :/*laya.events.Event.RIGHT_CLICK*/"rightclick",touchID);
}
if (isLeft && isDouble){
this.sendEvents(sendArr,/*laya.events.Event.DOUBLE_CLICK*/"doubleclick",touchID);
}
this.removeTouchFromArr(touchID,preDowns);
preO.tar=null;
Pool.recover("TouchData",preO);
}
preO=this.getTouchFromArr(touchID,this.preOvers);
if (!preO){
}else {
if (onMobile){
sendArr=this.getEles(preO.tar,null,sendArr);
if (sendArr && sendArr.length > 0){
this.sendEvents(sendArr,/*laya.events.Event.MOUSE_OUT*/"mouseout",touchID);
}
this.removeTouchFromArr(touchID,this.preOvers);
preO.tar=null;
Pool.recover("TouchData",preO);
}
}
this._clearTempArrs();
}
TouchManager._oldArr=[];
TouchManager._newArr=[];
TouchManager._tEleArr=[];
__static(TouchManager,
['I',function(){return this.I=new TouchManager();}
]);
return TouchManager;
})()
这段代码,我如果把 增加一个 && !this._event._stoped 的判断 对其他地方会有影响吗?
for (i=0;i < len;i++){
tar=oldArr[i];
if (arrs.indexOf(tar)>=0 && !this._event._stoped ){
sendArr.push(tar);
}
}
我测试了一下这个函数在if (!preO) 判断之前已经执行过一次up事件了,后面再if (!preO)的判断的else条件里面,又把stage事件刷了出来,然后加到了 sendArr 数组里面,并且只有一个,因为 我之前的UI那个事件在if (!preO)上面的send已经执行完毕了,。而且我再UI完毕的时候 已经设置了event.stopPropagation();,也就是 this._event._stoped应该是个true, 既然已经是true了,是否可以不执行 循环里面 添加 发送的其他消息了,因为这个stop 就是阻止后面的所有监听器,我不知道我这样理解是否正确…… 麻烦版主指正,十万火急啊~ 谢谢啦~我也在赶进度!望理解!