“绑定”j向下(箭头)滚动文档

时间:2017-08-23 08:14:49

标签: javascript scroll keyboard-events keydown

我希望基本上将向下箭头的行为提供给键j,以便滚动文档

这就是我所做的:

document.addEventListener("DOMContentLoaded", function() {
  document.body.addEventListener("keydown", e => {
    console.log(e.key, e.code, e.which);
  });

  const event = new KeyboardEvent("keydown", {
    key: "ArrowDown",
    bubbles: true,
    code: 40,
    isTrusted: true,
    which: 40,
    charCode: 40,
    isComposing: true
  });
  document.body.dispatchEvent(event);
});

因此,它会触发侦听器,但不会滚动文档。这真的很奇怪,因为当我实际按下向下箭头时,监听器被触发。

1 个答案:

答案 0 :(得分:0)

dispatchEvent(event)方法将调用您在Dom上绑定的EventListeners。但它不会触发浏览器的默认行为。

虽然您可以通过Javascript触发keydown事件,但这并不意味着您可以模拟按键盘上的任意键。

我认为出于一些安全的原因,现在可以通过纯Javascript控制用户的键盘(也许某些浏览器插件可以做到这一点)。

所以,如果你真的想在按j时滚动文档,我想你可以试试这个

document.body.addEventListener("keydown", e => {
    console.log(e.key, e.code, e.which);
    if (e.which === 74) {// 'key j'
      for (var i = 0; i < 20; i++) {// scroll down smoothly
        setTimeout( function() {
          document.body.scrollTop += 1;
        }, 10*i);
      }
    }
  });

希望这可以帮到你。