如何防止父容器滚动定位为固定的子元素
How to prevent the parent container from scrolling the child element positioned as fixed
我有一个父母和孩子。当用户滚动时,子项的属性为"overflow:auto",结束后,父项开始滚动。如何防止这种情况发生?
即使在子滚动条结束之后,我也不需要滚动容器的父级。
这是代码:
.children{
height:20em;
overflow:auto;
border:2px solid green;
position:fixed;
left:0;
background:gray;
z-index:100;
}
我有一些巨大的内容来展示这个问题,所以请访问链接并滚动孩子们(灰色背景)
实时演示
这是浏览器的默认行为。
为了防止这种情况,请检查Leland Kwong的代码笔。
http://codepen.io/LelandKwong/pen/edAmn
var trapScroll;
(function($){
trapScroll = function(opt){
var trapElement;
var scrollableDist;
var trapClassName = 'trapScroll-enabled';
var trapSelector = '.trapScroll';
var trapWheel = function(e){
if (!$('body').hasClass(trapClassName)) {
return;
} else {
var curScrollPos = trapElement.scrollTop();
var wheelEvent = e.originalEvent;
var dY = wheelEvent.deltaY;
// only trap events once we've scrolled to the end
// or beginning
if ((dY>0 && curScrollPos >= scrollableDist) ||
(dY<0 && curScrollPos <= 0)) {
opt.onScrollEnd();
return false;
}
}
}
$(document)
.on('wheel', trapWheel)
.on('mouseleave', trapSelector, function(){
$('body').removeClass(trapClassName);
})
.on('mouseenter', trapSelector, function(){
trapElement = $(this);
var containerHeight = trapElement.outerHeight();
var contentHeight = trapElement[0].scrollHeight; // height of scrollable content
scrollableDist = contentHeight - containerHeight;
if (contentHeight>containerHeight)
$('body').addClass(trapClassName);
});
}
})($);
var preventedCount = 0;
var showEventPreventedMsg = function(){
$('#mousewheel-prevented').stop().animate({opacity: 1}, 'fast');
}
var hideEventPreventedMsg = function(){
$('#mousewheel-prevented').stop().animate({opacity: 0}, 'fast');
}
var addPreventedCount = function(){
$('#prevented-count').html('prevented <small>x</small>' + preventedCount++);
}
trapScroll({ onScrollEnd: addPreventedCount });
$('.trapScroll')
.on('mouseenter', showEventPreventedMsg)
.on('mouseleave', hideEventPreventedMsg);
$('[id*="parent"]').scrollTop(100);
希望这能帮助你!:)
相关文章:
- 在Jquery detachment()和appendTo()之后定位元素
- stickyfloat无法处理绝对定位的元素
- Selenium无法在浏览器DOM中定位元素
- 从定位目标中的元素中清除类
- 如何使用jquery对元素进行排序和定位
- 在IE9中使用jQuery.change定位select元素
- spin.js/angular spinner:如何将spin定位到DOM元素中(包括plunker演示)
- 如果元素在容器外部,是否可以相对于容器以绝对定位来定位该元素
- 根据其他调整大小的html元素定位背景图像
- 将html元素定位在页面中的任何x/y坐标处
- 相对于另一个 css 元素定位一个元素,而不编辑 html
- jquery 中的元素定位
- 我可以使用什么来生成元素定位器的名称
- 旧版浏览器中的高效元素定位
- 所见即所得,具有绝对的元素定位
- 将元素定位到另一个元素的右侧
- HTML动态/响应式元素定位
- 如何在量角器中找到元素定位器
- Css /javascript用于元素定位/大小
- Jquery元素定位问题