Greasy Fork

Key navigation

To be used for mapping keyboard arrow press events

目前为 2020-02-21 提交的版本。查看 最新版本

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.icu/scripts/396703/774316/Key%20navigation.js

(() => {
  'use strict';

  const KEYS = {
    37: 'LEFT',
    38: 'UP',
    39: 'RIGHT',
    40: 'DOWN',
  };

  const setUpKeyNavigation = ({
    onDownPressed,
    onLeftPressed,
    onRightPressed,
    onUpPressed,
    preventDefault,
    stopPropagation,
  }) => {
    document.addEventListener('keydown', event => {
      const eventKey = KEYS[event.which];

      const operation = {
        DOWN: e => executeFn(onDownPressed, e),
        LEFT: e => executeFn(onLeftPressed, e),
        RIGHT: e => executeFn(onRightPressed, e),
        UP: e => executeFn(onUpPressed, e),
      }[eventKey];
      operation && operation(event);

      preventDefault && event.preventDefault();
      stopPropagation && event.stopPropagation();
    });
  };

  const executeFn = (fn, ...parameters) => {
    return typeof fn === 'function' && fn(...parameters);
  };

  window.setUpKeyNavigation = setUpKeyNavigation;
})();