Stream 如何制作键盘事件流';长按该键时触发的?(飞镖)
我如何创建键盘事件流,当长按某个html元素中的键时会触发该事件流 同样,我也对Angular2指令Stream 如何制作键盘事件流';长按该键时触发的?(飞镖),stream,dart,angular,Stream,Dart,Angular,我如何创建键盘事件流,当长按某个html元素中的键时会触发该事件流 同样,我也对Angular2指令(longpress)(具有相同的想法)感兴趣 事件处理(preventDefault)似乎还不能正常工作。 将此指令添加到会中断输入中的写入 一种解决方法是以这种方式订阅keydown/keydup LongPress(ElementRef elementRef) { (elementRef.nativeElement as Element).onKeyDown.listen(keyEven
(longpress)
(具有相同的想法)感兴趣
事件处理(preventDefault
)似乎还不能正常工作。
将此指令添加到
会中断输入中的写入
一种解决方法是以这种方式订阅keydown/keydup
LongPress(ElementRef elementRef) {
(elementRef.nativeElement as Element).onKeyDown.listen(keyEventHandler);
(elementRef.nativeElement as Element).onKeyUp.listen(keyEventHandler);
}
以下是typescript版本,如果有人感兴趣:
import { Directive, EventEmitter, Output, Input, HostListener } from '@angular/core';
@Directive({
selector: '[longpress]'
})
export class LongPressDirective {
@Output() longpress: EventEmitter<KeyboardEvent> = new EventEmitter(true);
_startEvent: KeyboardEvent;
@Input() longpressDelay: number = 1000;
timer: any;
@HostListener('keydown', ['$event'])
@HostListener('keyup', ['$event'])
keyEventHandler(event: KeyboardEvent) {
if (this._startEvent == null ||
this._startEvent.type != event.type ||
this._startEvent.keyCode != event.keyCode) {
//console.log(event.type, event);
if (this.timer != null) {
clearTimeout(this.timer);
}
this._startEvent = event;
if(event.type == 'keydown') {
this.timer = setTimeout(() => {
console.log('longpress');
this.longpress.emit(this._startEvent);
clearTimeout(this.timer);
this.timer = null;
}, this.longpressDelay);
}
}
}
}
import{Directive,EventEmitter,Output,Input,HostListener}来自“@angular/core”;
@指示({
选择器:“[longpress]”
})
导出类longpress指令{
@Output()longpress:EventEmitter=neweventemitter(true);
_StarteEvent:键盘事件;
@输入()长按延时:数字=1000;
定时器:任意;
@HostListener('keydown',['$event']))
@HostListener('keyup',['$event']))
keyEventHandler(事件:KeyboardEvent){
如果(this.\u startEvent==null||
此.\u startEvent.type!=event.type||
这是。_startEvent.keyCode!=事件.keyCode){
//console.log(event.type,event);
如果(this.timer!=null){
clearTimeout(this.timer);
}
此。_startEvent=事件;
如果(event.type=='keydown'){
this.timer=setTimeout(()=>{
console.log('longpress');
this.longpress.emit(this.\u startEvent);
clearTimeout(this.timer);
this.timer=null;
},此为长按延迟);
}
}
}
}
这是我代码中的一个错误。我漏掉了一张支票,如果您使用()=>
就不需要,非常感谢您的帮助:)
<label for="input">Longpress: </label><input id="longpress" (longpress)="longPressed($event)">
LongPress(ElementRef elementRef) {
(elementRef.nativeElement as Element).onKeyDown.listen(keyEventHandler);
(elementRef.nativeElement as Element).onKeyUp.listen(keyEventHandler);
}
import { Directive, EventEmitter, Output, Input, HostListener } from '@angular/core';
@Directive({
selector: '[longpress]'
})
export class LongPressDirective {
@Output() longpress: EventEmitter<KeyboardEvent> = new EventEmitter(true);
_startEvent: KeyboardEvent;
@Input() longpressDelay: number = 1000;
timer: any;
@HostListener('keydown', ['$event'])
@HostListener('keyup', ['$event'])
keyEventHandler(event: KeyboardEvent) {
if (this._startEvent == null ||
this._startEvent.type != event.type ||
this._startEvent.keyCode != event.keyCode) {
//console.log(event.type, event);
if (this.timer != null) {
clearTimeout(this.timer);
}
this._startEvent = event;
if(event.type == 'keydown') {
this.timer = setTimeout(() => {
console.log('longpress');
this.longpress.emit(this._startEvent);
clearTimeout(this.timer);
this.timer = null;
}, this.longpressDelay);
}
}
}
}