0

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

4

1 回答 1

1

这是我想出的代码。它工作得很好,我希望它能帮助任何在未来为此苦苦挣扎的人。

    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)
    );
于 2021-01-25T18:06:02.303 回答