当前位置: 首页 > 知识库问答 >
问题:

加载新页面时检查是否已按下键(JavaScript)

乌骏
2023-03-14

我目前正在建立一个网站,通过JavaScript使用自定义快速导航。

如果用户按右键,他将被导航到“我的页面列表”中的下一页,通过按ALT Right或Left键,他可以在浏览器历史记录中前后导航。

这是我当前的代码:

var map = [];

    window.onkeydown = window.onkeyup = function(e){
        e = e || event; // to deal with IE
        map[e.keyCode] = e.type == 'keydown';

        if (map[18] && map[39]) { // ALT + Right
            window.history.forward();
        }
        else if (map[18] && map[37]) { // ALT + Left
            window.history.back();
        }
        else if (map[39]) { // Right Key
            window.location.href = "{{ path('sctn_findsong') }}";
        }
        if (map[38]){ // Up Key
            //
        }
        if (map[40]){ // Down Key
            //
        }
    }

这一切都很好,除了一个小问题:假设我想返回三页-如果我是一个有逻辑思维的人,我会先按ALT Left返回一个站点,然后当我在上一个站点上时,只需按住ALT,然后再次按Left返回一个站点。然而,当我返回一个站点并按住ALT键时,它并没有显示ALT仍然被按下,所以每次我到达前一个站点时都必须再次按下ALT键,这很烦人。我如何让它按我想要的方式工作?感谢您的帮助。

共有3个答案

柳翼
2023-03-14

您应该查找e.altKey==true以查看alt key是否已关闭

var map = [];

window.onkeydown = window.onkeyup = function(e){
    e = e || event; // to deal with IE
    map[e.keyCode] = e.type == 'keydown';

    if(e.altKey==true){ // ALT down
    if (map[39]) { //  + Right
        window.history.forward();
        //console.log("forward");
    }
    else if (map[37]) { //  + Left
        window.history.back();
        //console.log("back");
    }
    }


    else if (map[39]) { // Right Key
        window.location.href = "{{ path('sctn_findsong') }}";
    }
    if (map[38]){ // Up Key
        //
    }
    if (map[40]){ // Down Key
        //
    }
}
商运锋
2023-03-14

如果不想使用AJAX,可以将页面加载到IFRAME

穆宾白
2023-03-14

这是不可能的。您需要一个事件“keyup”或“keydown”,以便在加载新页面后能够知道ALT键的状态。但是,您可以将状态(布尔值向下或向上)存储在localStorage中。当加载新页面时,您可以读取该值。但是,这可能不可靠,尤其是在页面加载期间(页面加载之前)释放键时。此外,您还需要在每个加载的页面中包含处理keyevents/localStorage的javascript。

您是否考虑过更改Web应用程序的设计,以便通过异步(ajax)请求加载页面内容?这样,您实际上就不会离开主页,并且可以跟踪触发的事件。缺点是你需要创建自己的“历史记录”,因为你实际上没有从浏览器的角度离开一个页面。一个好的方法是利用窗口。地方散列。

 类似资料:
  • 我有一个Java函数,我想在其中测试控制键是否被按住。我该怎么做? 编辑:我正在使用摆动作为gui。

  • 有没有一种方法可以使用收集器/interactionCreate来检测用户是否已经在特定消息上按下了特定按钮?我尝试的一种方法是将其保存在这样的数组中 但是机器人最终总是以“你已经投票”作为回应,那么有什么可行的方法来检查这一点呢?

  • 好的,在这被标记为可能的重复之前,我已经尝试了以下代码:

  • 问题内容: 在Java中,我有一个程序需要连续检查用户是否按下了键。所以在伪代码中,像 提前致谢! 问题答案: 在Java中,你不检查是否有键被按下,而不是你听到秒。实现目标的正确方法是注册一个,并实现它以维持所需密钥的状态: 然后,您可以随时使用: 当然,您可以使用相同的方法来实现键映射及其包裹在状态中的状态。

  • 问题内容: 有没有一种方法可以检测JavaScript中的鼠标按钮当前是否处于按下状态? 我知道“ mousedown”事件,但这不是我所需要的。按下鼠标按钮后的一段时间,我希望能够检测它是否仍被按下。 这可能吗? 问题答案: 关于Pax的解决方案:如果用户有意或无意地单击了多个按钮,则该按钮将不起作用。不要问我我怎么知道:-(。 正确的代码应如下所示: 通过这样的测试: 如果您想知道按下了什么按