gpt4 book ai didi

stream - 如何制作长按按键时触发的KeyboardEvent流? ( Dart )

转载 作者:行者123 更新时间:2023-12-03 03:27:15 24 4
gpt4 key购买 nike

长按某些html元素中的键时,如何触发触发的KeyBoardEvent流。

同样,我对Angular2指令(longpress)(具有相同的想法)也很感兴趣。

最佳答案

@Directive(
selector: '[longpress]')
class LongPress {
@Output() EventEmitter<KeyboardEvent> longpress =
new EventEmitter<KeyboardEvent>();

KeyboardEvent _startEvent;
@Input() Duration longpressDelay = new Duration(seconds: 2);
Timer timer;

@HostListener("keydown", const [r"$event"])
@HostListener("keyup", const [r"$event"])
void keyEventHandler(KeyboardEvent event) {
if (_startEvent == null ||
_startEvent.type != event.type ||
_startEvent.keyCode != event.keyCode) {
if (timer != null) {
timer.cancel();
}
_startEvent = event;

if(event.type == 'keyup') {
timer = new Timer(longpressDelay, () {
longpress.add(_startEvent);
timer = null;
});
}
}
}
}

并像这样使用
<label for="input">Longpress: </label><input id="longpress" longpress (longpress)="longPressed($event)">

我还没有想办法使指令选择器与 (...)一起使用,所以它也可以正常工作:
<label for="input">Longpress: </label><input id="longpress" (longpress)="longPressed($event)">

事件处理( preventDefault)似乎无法正常工作。
将此指令添加到 <input>会中断输入的编写。

解决方法是改用这种方式订阅keydown / keyup
LongPress(ElementRef elementRef) {
(elementRef.nativeElement as Element).onKeyDown.listen(keyEventHandler);
(elementRef.nativeElement as Element).onKeyUp.listen(keyEventHandler);
}

关于stream - 如何制作长按按键时触发的KeyboardEvent流? ( Dart ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34715315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com