RXJS条码扫描器



我正在尝试从Javascript (Angular)中收听条形码事件。我的要求是,它不应该是一个输入(所以它不应该一直被聚焦),我的RXJS流应该每次扫描发出一次,并排除常规的键盘敲击。

这是我想出的代码。它工作得很好,我希望它能帮助任何在未来与之斗争的人。

const down = fromEvent(document, "keydown");
const up = fromEvent(document, "keyup");
const scannerKeys = up.pipe(
filter((e: KeyboardEvent) => e.code !== "ShiftLeft"),
withLatestFrom(down, (u: KeyboardEvent, d: KeyboardEvent) => ({
key: `${d.key}`,
pressTime: u.timeStamp - d.timeStamp,
e: u,
})),
filter((x) => x.pressTime < 5)
);
this.scanned = scannerKeys.pipe(
scan((acc, value) => {
return value.key !== "Enter" ? acc + value.key : "";
}, ""),
filter((x) => x !== ""),
debounceTime(50)
);

最新更新