制作不易,有什么问题可以提出来,我来改进,谢谢大家。
长按功能分为,1.监听方式和2.触发方式两个要点

首先我们要确定
1.长按时长 _curTime
2.触发长按时长 longpressTime
3.长按抬起函数 TouchContinueCallBack
4.抬起回调. TouchCallBack
/**
* 长按事件监听(兼容单击)
* @param GObject 需要注册的控件
* @param longpressTime 长按判定时间 默认500ms
* @param intervalTime 计时器间隔事件 默认100ms
* @param TouchCallBack 抬起回调
* @param TouchContinueCallBack 长按持续回调
*/
public static LongPress(This,GObject:fairygui.GObject,longpressTime = 0, intervalTime:number = 0, TouchCallBack:Function = null, TouchContinueCallBack:Function = null){
let _This = This;
let _isLongPress = false;
let _isMoveDown = false; // 是否鼠标按下
let _longpressTime = longpressTime?longpressTime:500; // 长按判定时间
let _intervalTime = intervalTime?intervalTime:100; // 计时器间隔时间
let _curTime = 0; // 计时器计时长按速度
if(!GObject){
LogUtils.log(null, "longPress - GObject is undefined ");
}
let _TouchCallBack = TouchCallBack;
let _TouchContinueCallBack = TouchContinueCallBack;
GObject.on(Laya.Event.MOUSE_DOWN, this,()=>{
LogUtils.log(null, "LongPress Laya.Event.MOUSE_DOWN");
_isMoveDown = true;
//计时器
Laya.timer.loop(_intervalTime, this, downTimeFun);
});
function downTimeFun(){
_curTime+=_intervalTime;
if(_curTime >= _longpressTime){
loopSendCallBack();
}
}
function loopSendCallBack() {
//此处可改变不同的长按触发函数方式 例如使用二次贝塞尔曲线
if(_TouchContinueCallBack){
_TouchContinueCallBack(_This);
LogUtils.log(null, "TouchContinueCallBack Function");
return;
}
LogUtils.log(null, "not TouchContinueCallBack Function");
}
GObject.on(Laya.Event.MOUSE_UP, this,()=>{
LogUtils.log(null, "LongPress Laya.Event.MOUSE_UP");
if(_isMoveDown){
Laya.timer.clear(this,downTimeFun);
}
_curTime = 0;
_isLongPress = false;
_isMoveDown = false;
if(_TouchCallBack){
LogUtils.log(null, "LongPress-TouchCallBack Function");
_TouchCallBack(_This);
return;
}else{
LogUtils.log(null, "not LongPress-TouchCallBack Function");
}
});
}

本文详细介绍了如何实现长按事件监听和触发功能,包括监听方式和触发方式。通过设置长按时长、触发长按时长、长按抬起函数和抬起回调,实现了兼容单击的长按事件。在监听过程中,利用Laya.timer进行定时检查,并在达到长按判定时间后执行相应的回调函数。同时,代码中提供了抬起回调和长按持续回调的处理逻辑。
1239

被折叠的 条评论
为什么被折叠?



