HTML阻止空格键滚动页面

时间:2014-03-21 13:14:09

标签: javascript html

我正在使用代码:

window.onkeydown = function(e) { 
    return !(e.keyCode == 32);
};

完全符合我的要求,当按下空格键时停止滚动页面。但是,它也会阻止用户在文本框中键入空格

有没有办法阻止空格键滚动以及在键入时保留空格键功能?

5 个答案:

答案 0 :(得分:47)

尝试检查target是否为正文:



window.addEventListener('keydown', function(e) {
  if(e.keyCode == 32 && e.target == document.body) {
    e.preventDefault();
  }
});

body { height: 100000px; }

<input />
<textarea></textarea>
&#13;
&#13;
&#13;

Demo

答案 1 :(得分:2)

您可以查看e.target,如果它是您返回false的正文。

window.onkeydown = function(e) { 
  return !(e.keyCode == 32 && e.target == document.body);
}; 

答案 2 :(得分:0)

window.onkeydown = function(e) { 
    e = e || window.event;  //normalize the evebnt for IE
    var target = e.srcElement || e.target;  //Get the element that event was triggered on
    var tagName = target.tagName;  //get the tag name of the element [could also just compare elements]
    return !(tagName==="BODY" && e.keyCode == 32);  //see if it was body and space
};

答案 3 :(得分:0)

您可以检查事件的目标,只有在它不是“可输入”元素时才运行您的代码。例如:

window.onkeydown = function(e) {
    var elem = e.target.nodename;
    if( elem !== 'TEXTAREA' && elem != 'INPUT' ) {
        return !(e.keyCode == 32);
    }
};

答案 4 :(得分:0)

CSS:

body::-webkit-scrollbar {display: none;} /* Chrome, Safari and Opera */
body {-ms-overflow-style: none;}  /* IE and Edge */
html {scrollbar-width: none;}  /* Firefox */

JavaScript:

window.addEventListener('keydown', function() {if (event.keyCode == 32) {document.body.style.overflow = "hidden";}});
window.addEventListener('keyup', function() {if (event.keyCode == 32) {document.body.style.overflow = "auto";}});

JavaScript 在按下空格键时使溢出隐藏 onkeydown 事件,因此无法滚动,当您离开空格键时,它会使溢出自动进行,因此可以再次滚动。这会更改页面的宽度,因此可以添加 CSS 以消除滚动条。