javascript - 如何防止父容器滚动定位为固定的子元素

标签 javascript html css

我有 parent 和 child 。当用户滚动时,子项的属性为“溢出:自动”,结束后,父项开始滚动。如何预防?

即使在子滚动条结束后,我也不需要滚动父容器。

代码如下:

.children{
  height:20em;
  overflow:auto;
  border:2px solid green;
  position:fixed;
  left:0;
  background:gray;
  z-index:100;
}

我有很多内容来展示这个问题,所以请访问链接并滚动 children (灰色背景)

Live Demo

最佳答案

这是浏览器的默认行为。

要防止这种情况,请检查 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);

希望对您有所帮助! :)

关于javascript - 如何防止父容器滚动定位为固定的子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34765422/

相关文章:

javascript - 进行字符串替换时如何复制大小写模式?

javascript - 如何使用 javascript 模糊输入字段或使用react?

javascript - 如何将缩略图添加到提及当前幻灯片的光滑 slider 的点

javascript - Div 元素如何在 CSS3 Flexbox 中只占用其内部内容的空间?

html - 使用 flex 将 div 移向右侧

javascript - 对象属性中的动态值

javascript - 在转换框中输入后如何将多个链接逐一添加

javascript - 使用按钮填充具有焦点的输入框

css - 在 CSS 中应用字体颜色的边框

html - 使我的页脚图标不会堆叠在一起,同时减少我的页面宽度