2015-02-24 89 views
0

我目前正在构建一个网站,它使用JavaScript进行自定义快速导航。加载新页面时检查按键是否已被按下(JavaScript)

如果用户按下右键,他将导航到我的页面列表中的下一页,并通过按ALT +右键或左键,他可以浏览他的浏览器历史记录向前和向后导航。

这是我当前的代码:

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,这非常烦人。 我该如何让它按照我想要的方式工作? 帮助赞赏。

回答

1

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

您是否考虑更改您的web应用程序的设计,以便通过异步(ajax)请求加载您的页面的内容?这样你实际上不会离开主页面,并且可以跟踪所发生的事件。缺点是您需要创建自己的“历史记录”,因为您实际上不会从浏览器的角度留下页面。一个好的方法是使用window.location.hash

+0

谢谢。我有一个计划B来解决我的问题,这基本上就是你在第二段中提到的,但我只是希望我忽略了一些显而易见的事情,并且这将是一个单线。 – c42 2015-02-24 10:59:15

-1

你应该寻找e.altKey ==真,看看ALT键是按下

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 
     // 
    } 
} 
+0

我加入这个下右侧的第一个if语句前:如果(e.AltKey ==真){图[18] =真正; } - 你在想什么? – c42 2015-02-24 10:25:18

+0

e.AltKey与地图[18]不一样请参阅更新摘要 – johanthuresson 2015-02-24 11:14:22

0

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

相关问题