首页 > 解决方案 > 我想用相同的按键操作按顺序交替执行不同的操作过程

问题描述

例如,您可以从特定键开始并通过单击或其他键停止,

// Alt + Shift + ↓  Auto scroll
document.addEventListener("DOMContentLoaded", (l) => {
  var m;
  setInterval(m);
  $(window).keydown((e) => {

    //pattern 1
    if (e.altKey && e.shiftKey && e.keyCode == 40) {
      if (!m) {
        m = setInterval((s) => {
          scrollBy(0, s || 1);
        }, 35);
      }
    }
    $(document).on('click', () => {
      clearInterval(m);
      m = undefined;
    });

    //pattern 2
    setInterval(m);
    if (e.altKey && e.shiftKey && e.keyCode == 40) {
      if (!m) {
        m = setInterval((s) => {
          scrollBy(0, s || 1);
        }, 35);
      }
    }
    if (e.keyCode == 96) { //ten key of「0」key
      clearInterval(m);
      m = undefined;
    }

    //}, false);
  });
});

像这样:尝试使用相同的键处理启动和停止将不起作用。

Alt在下面的示例中以+ Shift+开头↓</kbd>,

也停下来我想用Alt+ Shift+做↓</kbd>. How can I correct it to implement the desired function?

运行环境使用 Chrome WEB 商店的第三方扩展。

标签: javascriptjquery

解决方案


如果我明白你想要什么,你想使用相同的键来启动和停止,所以你必须使用一种切换:

var timer;
var last_state = "keyup";
var param = 10;

$(window).on("keydown keyup", (e) => {

  if (e.type == "keyup" && e.which == 40) {
    last_state = "keyup";
  }

  if (e.type == "keydown" && e.type != last_state && e.altKey && e.shiftKey && e.which == 40) {
    last_state = e.type;

    if (!timer) {
      timer = setInterval(() => {
        scrollBy(0, param || 1);
      }, 35);
    } else {
      clearInterval(timer);
      timer = undefined;
    }
  }

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


推荐阅读