Javascript 滚动div元素时防止页面滚动
我已经在这里的公认答案中找到了解决方案: 但也要禁用在按键上滚动主页(当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-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;
}
});