Javascript 滚动div元素时防止页面滚动

Javascript 滚动div元素时防止页面滚动,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我已经在这里的公认答案中找到了解决方案: 但也要禁用在按键上滚动主页(当div内容不能再滚动时) 我正在尝试制作类似的东西,但它不起作用: $( '.div-scroll' ).bind( 'keydown mousewheel DOMMouseScroll', function ( e ) { var e0 = e.originalEvent, delta = e0.wheelDelta || -e0.detail;

我已经在这里的公认答案中找到了解决方案:

但也要禁用在按键上滚动主页(当div内容不能再滚动时)

我正在尝试制作类似的东西,但它不起作用:

$( '.div-scroll' ).bind( 'keydown mousewheel DOMMouseScroll', function ( e ) {
                var e0 = e.originalEvent,
                delta = e0.wheelDelta || -e0.detail;

                this.scrollTop += ( delta < 0 ? 1 : -1 ) * 30;

                if([32, 37, 38, 39, 40].indexOf(e.keyCode) > -1) {
                    e.preventDefault();
                }
                e.preventDefault();
            });
$('.div scroll').bind('keydown mouseweel DOMMouseScroll',函数(e){
var e0=e.原始事件,
delta=e0.车轮delta | |-e0.详图;
这个.scrollTop+=(增量<0?1:-1)*30;
if([32,37,38,39,40].indexOf(e.keyCode)>-1){
e、 预防默认值();
}
e、 预防默认值();
});

你知道为什么吗

您可以通过执行以下操作停止整个页面的滚动:

方法1

<div  onmouseover="document.body.style.overflow='hidden';"  onmouseout="document.body.style.overflow='auto';"></div>
方法4

您可以通过取消以下交互事件来完成此操作:

鼠标和触摸滚动以及与滚动相关的按钮

// left: 37, up: 38, right: 39, down: 40,
// spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36
var keys = {37: 1, 38: 1, 39: 1, 40: 1};

function preventDefault(e) {
  e = e || window.event;
  if (e.preventDefault)
      e.preventDefault();
  e.returnValue = false;  
}

function preventDefaultForScrollKeys(e) {
    if (keys[e.keyCode]) {
        preventDefault(e);
        return false;
    }
}

function disableScroll() {
  if (window.addEventListener) // older FF
      window.addEventListener('DOMMouseScroll', preventDefault, false);
  window.onwheel = preventDefault; // modern standard
  window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE
  window.ontouchmove  = preventDefault; // mobile
  document.onkeydown  = preventDefaultForScrollKeys;
}

function enableScroll() {
    if (window.removeEventListener)
        window.removeEventListener('DOMMouseScroll', preventDefault, false);
    window.onmousewheel = document.onmousewheel = null; 
    window.onwheel = null; 
    window.ontouchmove = null;  
    document.onkeydown = null;  
}

您需要将文档绑定到“keydown”事件,如下所示:

$( document ).bind( 'keydown', function (e) { ... e.preventDefault(); }

此代码使用以下键阻止滚动:

$(document).keydown(function(e) {
        if (e.keyCode === 32 || e.keyCode === 37 || e.keyCode === 38 || e.keyCode === 39 || e.keyCode === 40) {
            return false;
        }
});

是的,我知道如何防止按键滚动,但不知道如何将其融入到我提供的代码中,只有.div滚动元素可以使用箭头滚动,而不是整个页面(我位于.div滚动元素的底部/顶部)并点击向上/向下箭头。是的,我知道如何防止按键滚动,但不知道如何将其纳入我提供的代码中,只有.div scroll元素可以使用箭头滚动,而不是整个页面(我位于.div scroll元素的底部/顶部)并点击向上/向下箭头。当使用上述方法4时,当可滚动列表到达底部时,main/container div再次开始滚动,这似乎是一件奇怪的事情,考虑到不应该触发mouseout。是的,我知道如何防止键滚动,但不知道如何将其合并到我提供的代码中,因为只有.div滚动元素可以使用箭头滚动,而不是整个页面(我位于.div滚动元素的底部/顶部)并点击向上/向下箭头。
// left: 37, up: 38, right: 39, down: 40,
// spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36
var keys = {37: 1, 38: 1, 39: 1, 40: 1};

function preventDefault(e) {
  e = e || window.event;
  if (e.preventDefault)
      e.preventDefault();
  e.returnValue = false;  
}

function preventDefaultForScrollKeys(e) {
    if (keys[e.keyCode]) {
        preventDefault(e);
        return false;
    }
}

function disableScroll() {
  if (window.addEventListener) // older FF
      window.addEventListener('DOMMouseScroll', preventDefault, false);
  window.onwheel = preventDefault; // modern standard
  window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE
  window.ontouchmove  = preventDefault; // mobile
  document.onkeydown  = preventDefaultForScrollKeys;
}

function enableScroll() {
    if (window.removeEventListener)
        window.removeEventListener('DOMMouseScroll', preventDefault, false);
    window.onmousewheel = document.onmousewheel = null; 
    window.onwheel = null; 
    window.ontouchmove = null;  
    document.onkeydown = null;  
}
$( document ).bind( 'keydown', function (e) { ... e.preventDefault(); }
$(document).keydown(function(e) {
        if (e.keyCode === 32 || e.keyCode === 37 || e.keyCode === 38 || e.keyCode === 39 || e.keyCode === 40) {
            return false;
        }
});