Считайте одинарный и двойной щелчок одинаковыми - PullRequest
2 голосов
/ 15 октября 2019

Я хотел бы иметь возможность выполнить foo() один раз, независимо от того, нажимаю ли я кнопку один или два раза.

<span> (click)="foo()" </span>

foo() {
    console.log("You've clicked on foo");
}

Я пытался использовать это stackoverflow answer , но, дважды щелкнув по нему, вы получите несколько console.logs. Как можно было бы запустить эту функцию только один раз?

Примечание: на самом деле не нужно искать тройные / четверные клики (только одинарные / двойные)

1 Ответ

1 голос
/ 15 октября 2019

Попробуйте использовать setTimeout, clearTimeout и обрабатывать пользовательские клики:

<span 
    (click)="func1()" 
    (dblclick)="func2()">
    Hello
</span>

TypeScript:

timer = 0;
delay = 200;
prevent = false;

func1(){
    this.timer = setTimeout(() => {
        if (!this.prevent) {
            this.sayHello();
        } 
        this.prevent = false;
    }, this.delay);
}

func2(){
    clearTimeout(this.timer);
    this.prevent = true;
    this.sayHello();
}

sayHello(){
    console.log('Hello, world!:)');
}

Пример работы над стеком

...