美文网首页
【从0开始写Laya框架】1-一句代码解决Button单击和长按

【从0开始写Laya框架】1-一句代码解决Button单击和长按

作者: 会奔跑的蘑菇 | 来源:发表于2020-04-21 00:14 被阅读0次

笔者刚接触Laya,一边学一边写,决定自己写一个框架,持续更新,框架名字的话开头以笔者真名缩写命名,就叫做YrpFrameWork


1.创建Button

创建一个空项目,并创建一个Button,然后var的值赋值为"myBtn",记住这个值,我们待会儿要用到它。

创建Button
2.绑定场景runtime
绑定runtime
3.实现单击方法

要实现一个Button的单击方法,其实有很多种,笔者自己挑了最常用的一种,如下

export default class MyScene extends Laya.Scene{
    static instance: MyScene;
    private btn:laya.ui.Button;

    constructor(){
        super();
        MyScene.instance = this;
       this.loadScene("StartScene.json");
    
        this.btn = this.scene.myBtn as laya.ui.Button;
        this.btn.on(Laya.Event.MOUSE_DOWN,this,this.onClick);

  }
    //单击方法
    public onClick():void{
        console.debug("---OnClick---");
    }
}

4.实现长按方法
//单击方法
public onClick():void{
    this.isLongPress = false;
    //设置定时器间隔 单位毫秒
    var delay:number = 2000;
    Laya.timer.once(delay,this,this.onLongPress);
    //鼠标抬起,取消定时器
    this.btn.on(Laya.Event.MOUSE_UP,this,this.onClear);
}
//长按方法
private onLongPress()
{
    this.isLongPress = true;
    console.debug("---OnLongPress---");
}
//移除定时器
private onClear()
{
    if(!this.isLongPress) console.debug("---OnClick---");
    Laya.timer.clear(this,this.onLongPress);
}

思路:
点击按钮->触发定时器
->通过是否调用长按方法来识别长按开关的打开
->如果调用了长按方法,无需操作/如果未调用长按方法,手指放开,调用单击方法
->移除定时器

5.代码整合
export module YrpFrameWork{
export class Button{
    private  static isLongPress:Boolean = false;
    private static longPressLister:Function = null;
    private static clickListener:Function = null;
    /**
     * 
     * @param _targetBtn 目标按钮
     * @param _clickListener 点击方法
     * @param _longPressListener 长按方法
     * @param _delay 定时器间隔
     * @param _isOnce 是否执行一次
     */
    public static on(_targetBtn:laya.ui.Button,_clickListener:Function,
        _longPressListener:Function = null,_delay:number = 2000,_isOnce = true)
    {
        this.longPressLister = _longPressListener;
        this.clickListener = _clickListener;
        //鼠标按下,启动定时器
        _targetBtn.on(Laya.Event.MOUSE_DOWN,this,()=>{
            this.isLongPress = false;
            if(_isOnce)
            {
                _longPressListener && Laya.timer.once(_delay,this,this.onLongPress);
            }
            else{
                _longPressListener && Laya.timer.loop(_delay,this,this.onLongPress);
            }
            //鼠标抬起,取消定时器
            _targetBtn.on(Laya.Event.MOUSE_UP,this,this.onMouseUp);

        })  
    }

    private static onMouseUp():void{
        if(!this.isLongPress) this.clickListener();
        this.longPressLister && Laya.timer.clear(this,this.onLongPress);       
    }
    private static onLongPress():void{
        this.isLongPress = true
        this.longPressLister();

    }
}
}

最后我们调用我们的YrpFrameWork框架试试效果

大功告成,一句代码完成Button单击和长按的调用

相关文章

网友评论

      本文标题:【从0开始写Laya框架】1-一句代码解决Button单击和长按

      本文链接:https://www.haomeiwen.com/subject/dwzjihtx.html