我已经在接受的答案中找到了解决方案:
How to prevent page scrolling when scrolling a DIV element?
但是也想禁用在键上滚动主页面(当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();
});
任何想法为什么?
答案 0 :(得分:8)
您可以通过执行以下操作停止整个页面的滚动:
方法1
x ** 2 + y ** 2 == z ** 2
但只要将鼠标悬停在div上,它就会使浏览器的滚动条消失。
方法2
否则你可以看一下jquery-mousewheel。
<div onmouseover="document.body.style.overflow='hidden';" onmouseout="document.body.style.overflow='auto';"></div>
方法3
在没有插件的情况下停止传播。
HTML
var toolbox = $('#toolbox'),
height = toolbox.height(),
scrollHeight = toolbox.get(0).scrollHeight;
toolbox.off("mousewheel").on("mousewheel", function (event) {
var blockScrolling = this.scrollTop === scrollHeight - height && event.deltaY < 0 || this.scrollTop === 0 && event.deltaY > 0;
return !blockScrolling;
});
JS
<div class="Scrollable">
<!-- A bunch of HTML here which will create scrolling -->
</div>
方法4
你可以通过取消这些互动事件来做到这一点:
鼠标&amp;触摸滚动和与滚动相关联的按钮。
$('.Scrollable').on('DOMMouseScroll mousewheel', function(ev) {
var $this = $(this),
scrollTop = this.scrollTop,
scrollHeight = this.scrollHeight,
height = $this.height(),
delta = (ev.type == 'DOMMouseScroll' ?
ev.originalEvent.detail * -40 :
ev.originalEvent.wheelDelta),
up = delta > 0;
var prevent = function() {
ev.stopPropagation();
ev.preventDefault();
ev.returnValue = false;
return false;
}
if (!up && -delta > scrollHeight - height - scrollTop) {
// Scrolling down, but this will take us past the bottom.
$this.scrollTop(scrollHeight);
return prevent();
} else if (up && delta > scrollTop) {
// Scrolling up, but this will take us past the top.
$this.scrollTop(0);
return prevent();
}
});
答案 1 :(得分:4)
您需要将文档绑定到'keydown'事件,如下所示:
$( document ).bind( 'keydown', function (e) { ... e.preventDefault(); }
答案 2 :(得分:3)
此代码使用键阻止滚动:
$(document).keydown(function(e) {
if (e.keyCode === 32 || e.keyCode === 37 || e.keyCode === 38 || e.keyCode === 39 || e.keyCode === 40) {
return false;
}
});