这个问题已经在这里有一个答案:
- 防止父元素的滚动时内部元件滚动位置到达顶部/底部? [重复] 30个答案
我有一个div是滚动的,但每当你到达它的底部/顶部,它开始滚动整个页面。 这可能是恼人谁滚动快速用户,然后整个页面开始滚动意外。
我需要的东西在那里,如果你将鼠标悬停在格,页面不可滚动。
我已经通过添加CSS当我将鼠标悬停在div尝试这个...
body {
overflow:hidden;
}
......它的工作原理,但有一个问题。 滚动条消失,看起来挺傻的把它消失/重新出现。 任何的方式来达到同样的效果,但保持滚动条可见? 我已经看到了与Facebook聊天结束。
这里是一个非常简单的方法来阻止无插件,只是jQuery的传播。
更新 :该代码已经更新到IE9中+正常工作。 有没有在以前的版本进行测试。
首先,创建你的类<div>
将其标记为有此行为。 在我的例子,我用的是类.Scrollable
。
<div class="Scrollable">
<!-- A bunch of HTML here which will create scrolling -->
</div>
jQuery的禁用是:
$('.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();
}
});
在本质上,这是什么一样是检测正在请求哪个方向滚动在(基于originalEvent.wheelDelta
:阳性= up
,负= down
)。 如果所请求的delta
的的mousewheel
事件将移动滚动过去的top
或bottom
的<div>
取消该事件。
在IE中,尤其是,它晃过一个子元素的滚动区域滚动事件,然后汇总到父元素,并且继续滚动不管事件被取消。 因为我们取消在任何情况下的事件,然后控制通过jQuery的孩子滚动,这被阻止。
这是松散的基础上,该方法这个问题解决了问题,但不需要插件,并且是跨浏览器IE9与兼容+。
这里是一个工作的jsfiddle表明其操作中的代码。
这里是一个工作的jsfiddle表明其操作中的代码,并更新了IE浏览器的工作。
这里是一个工作的jsfiddle表明其操作中的代码,并更新了IE和Firefox的工作。 见这个职位有关的变化的必要性的更多细节。