想象一个页面有两个并排的<div>
元素,如https://nodejs.org/dist/latest-v12.x/docs/api/.
左侧的<div>
在页面之间导航。右边的有实际内容。
当我按下space
(空格键(时,浏览器会将右侧<div>
的内容提前一个屏幕,这让人想起传统的UNIX寻呼机more
。(IIRC,自NCSA Mosaic以来,这一直是相当标准的浏览器行为。(
然而,有时我想滚动左边的列("导航"列(。当按下space
时,浏览器如何决定滚动哪一列?document.activeElement
是<body>
,是这两个列<div>
元素的祖先。我希望能够使用bookmarklet(或扩展(来更改焦点——我很乐意自己编写,但据我所知,这种机制似乎不受HTMLElement.focus()
的控制。
当按下空格键(或箭头键、pg down、pg up等(时,浏览器会滚动当前活动元素的最近可滚动父元素。当您打开页面时,活动元素是<html>
,这是将被滚动的元素(如果它是可滚动的(,并且它的流内容超过了它的高度(默认情况下,它是视口的height
(。
如果当前活动元素是侧边栏或其子元素之一,则按空格键将滚动侧边栏,而不是<html>
元素。您可以通过各种方法(点击、按tab、编程等(更改活动元素
使用tabIndex属性通过focus((对其进行操作
对于您提供的xmpl页面:
document.getElementById("column2").tabIndex = 0;
document.getElementById("column1").tabIndex = 0;
document.addEventListener("keydown",function(){
if(event.ctrlKey){
if(document.activeElement.id=="column1")
document.getElementById("column2").focus();
else
document.getElementById("column1").focus();
}
});