`

fixed弹出层滚动区域滑动时阻止window窗体的滚动事件

 
阅读更多

web浏览器中,当我们出现一个浮层,浮层里面也有滚动条的时候,且有部分背景半透明的时候,就会发现,当我们滚动浮层里面的小滚动条的时候,背后整个页面都跟着一起滚走了。

 

方案1:监听浮层的touchstart,touchmove事件, 计算浮层滚动区域的最大滚动区域,在touchmove事件中判断规则,根据情况阻止默认事件(popup_box_scroll为浮层滚动区域的id)

   依赖方法:

   

let isMy = function(node, id){
    return node.getAttribute('id') === id;
},isMyOrParents = function(node, id){
    if(isMy(node, id)){
        return true;
    }else{
        let t = node.parentNode;
        while(t && !/body/i.test(t.tagName)){
            if(isMy(t, id)){
                return true;
            }
            t = t.parentNode;
        }
        return false;
    }
}, ppbData = {
    isTarget: false,
    posY: 0,
    scrollY: 0,
    maxscroll: 0
}

 

   给弹出层(id=popup_box)绑定touchstart,touchmove,touchend事件,事件方法如下:

ppbTouchStart: function(e){
          let event = e.touches[0] || e;
          ppbData.isTarget = isMyOrParents(event.target, 'popup_box_scroll');
          // 当前滚动元素标记
          ppbData.elScroll = ppbData.isTarget ? document.getElementById('popup_box_scroll') : null;
          if(!ppbData.elScroll){
              return;
          }
          // 垂直位置标记
          ppbData.posY = event.pageY;
          // 现在移动的垂直位置,用来判断是往上移动还是往下
          ppbData.scrollY = ppbData.elScroll.scrollTop || ppbData.elScroll.pageYOffset || 0;
          // 是否可以滚动
          ppbData.maxscroll = ppbData.elScroll.scrollHeight - ppbData.elScroll.clientHeight;
      },
      ppbTouchMove: function(e){
          let event = e.touches[0] || e;
          // 如果不足于滚动,则禁止触发整个窗体元素的滚动
          if (ppbData.maxscroll <= 0) {
              // 禁止滚动
              e.preventDefault();
          }
          if(!ppbData.elScroll){
              e.preventDefault();
              return;
          }
          // 移动距离
          let distanceY = event.pageY - ppbData.posY;

          // 上边缘检测
          if (distanceY > 0 && ppbData.scrollY == 0) {
              // 往上滑,并且到头
              // 禁止滚动的默认行为
              e.preventDefault();
          }

          // 下边缘检测
          if (distanceY < 0 && (ppbData.scrollY + 1 >= ppbData.maxscroll)) {
              // 往下滑,并且到头
              // 禁止滚动的默认行为
              e.preventDefault();
          }
      },
      ppbTouchEnd: function(e){
          ppbData.isTarget = false;
          ppbData.maxscroll = 0;
      }

 

方案2:

   给html, body节点设置height=弹出层的高度(弹出层的高度在显示时获取,作防重处理),overflow=hidden样式。

分享到:
评论

相关推荐

    JS触发滚动条弹出层

    然后,我们添加了一个`scroll`事件监听器,当用户滚动页面时,会检查当前的滚动距离并决定是否显示弹出层。 为了实现更复杂的效果,例如渐入渐出、动画过渡等,可以使用CSS3的`transition`属性配合JS改变`opacity`...

    jquery弹出层鼠标点击弹出层可浮动在屏幕滚动

    当用户滚动页面时,弹出层会随着滚动。同时,如果用户点击弹出层外部,弹出层会自动隐藏。 需要注意的是,这只是一个基础示例,实际应用中可能需要考虑更多细节,比如弹出层的样式调整、动画效果、响应式布局等。在...

    jQuery滑动弹出层特效 jQuery滑动弹出层网页特效.zip

    - 防止页面滚动:在弹出层打开时,可以锁定页面滚动,确保用户注意力集中在弹出层上。 - 关闭弹出层的其他方式:除了点击关闭按钮,还可以监听Esc键或点击弹出层外部区域来关闭弹出层。 五、实际应用与案例分析 ...

    DIV弹出层+定位

    此外,为了确保弹出层在页面滚动时仍然保持在固定位置,可能需要使用`position:fixed`,这样它就会相对于浏览器窗口定位。但在这个描述中,弹出层的定位方式是固定的,所以`position:absolute`应该足够满足需求。 ...

    解决移动端滚动穿透问题

    当用户在页面上触发一个弹出层(如模态对话框、下拉菜单或加载遮罩层)时,通常希望页面主体部分在此期间不可滚动,以防止意外的滚动行为影响交互。然而,如果不正确处理,用户仍可能在遮罩层存在时滚动到页面底部,...

    弹出层示例展示

    在Web开发中,"弹出层"是一种常见的用户界面元素,它可以在用户与网页交互时显示额外的信息或功能,而不改变当前页面的主要内容。这个"弹出层示例展示"显然是一个教学或演示如何实现弹出层的实例,特别提到了与`...

    jQuery点击弹出层带关闭按钮的淡出淡进滑动弹出层效果

    当用户触发某个事件(如点击按钮)时,弹出层会从页面的某个位置淡入或滑动进入视野,而关闭按钮则提供了一种方便的机制让用户可以随时关闭这个弹出层,返回到之前的页面状态。 实现这种效果主要涉及到以下jQuery...

    jQuery顶部浮动弹出层动画弹出层特效

    弹出层是一种网页设计技术,它可以在用户与页面交互时,以对话框的形式显示额外的信息,而不会完全中断用户与主页面的互动。这些弹出层通常用于显示通知、广告、表单或任何需要突出显示的内容。 在jQuery中,我们...

    jquery弹出层不关闭 父页面刷新

    这里,我们主要讨论如何使用jQuery实现这样的功能,即在一个弹出层(通常是一个模态对话框)显示时,用户可以操作父页面而不会导致弹出层关闭。 首先,jQuery是一个强大的JavaScript库,它提供了丰富的API来处理DOM...

    JS弹出层源代码

    弹出层的基本概念是创建一个在用户与网页其他部分交互时临时出现的独立窗口。这个窗口可以是模态的,即阻止用户与页面其余部分交互,直到弹出层被关闭;也可以是非模态的,允许用户同时操作弹出层和背景页面。 在JS...

    很犀利的弹出层,弹出层代码

    - **遮罩层**:创建一个全屏半透明的遮罩层,增加弹出层的视觉效果,同时阻止用户对背景内容的交互。 - **响应式设计**:考虑不同设备和屏幕尺寸,利用媒体查询(`@media`)确保弹出层在不同环境下都能正常显示。 ...

    带有弹出层的模拟窗口(窗体)Div实现 源码 js

    在默认状态下,弹出层的Div可能是不可见的(`display:none`),当需要显示时,通过JavaScript改变其`display`属性为`block`。为了实现“弹出”的动画效果,还可以使用CSS的`transition`属性来添加平滑的过渡效果。 ...

    js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动).docx

    同时,需要监听浏览器窗口的滚动事件,当浏览器窗口滚动时,更新弹出层的位置,使其始终居中显示。 下面是完整的代码: HTML 结构: ```html 我是正文我是正文我是正文我是正文我是正文我是正文我是正文 ...

    jQuery点击弹出层带关闭按钮的淡出淡进滑动弹出层特效.zip

    例如,我们可以有一个按钮触发弹出层,弹出层包含一个关闭按钮和内容区域。HTML代码可能如下: ```html 点击弹出 ;"&gt; 关闭 这里是弹出层内容 ``` 2. **CSS样式**:设置弹出层的基本样式,如位置、大小、透明度...

    js弹出层多样式。

    - 阻止页面滚动:在弹出层显示时,可以通过JavaScript阻止页面滚动,聚焦用户注意力。 - 自适应布局:弹出层应适应不同屏幕尺寸,如响应式设计。 - 键盘导航:支持键盘焦点和回车键操作,提高可访问性。 5. **...

    ASP.NET网页随滚动条滑动的层,ASP.NET页面随滚动条滚动

    2. **JavaScript监听滚动事件**:使用JavaScript来监听滚动事件,通常是`window.onscroll`函数。在该函数内部,我们可以获取滚动条的位置,并根据需要调整元素的位置。 ```javascript window.onscroll = function...

    jquery弹出层特效超炫

    1. 弹出层定义:弹出层通常是指在页面原有内容上临时显示的一块浮动区域,它可以是对话框、图片预览、表单填写等。通过jQuery,我们可以轻松控制弹出层的显示、隐藏、位置以及动画效果。 2. 基本结构:一个简单的弹...

    js、jquery阴影效果弹出层

    此外,为了提高用户体验,我们还可以添加一些额外的功能,比如在弹出层出现时阻止页面滚动,或者在弹出层关闭后恢复滚动。这可以通过监听窗口的`scroll`事件并根据弹出层的状态来控制: ```javascript var ...

    弹出框随滚动条滚动

    当用户在页面上滚动时,某些特定的弹出框(如提示信息、菜单或对话框)需要保持在用户的视野内,这通常通过JavaScript或者CSS来实现。以下是关于这个主题的详细知识点: 1. **JavaScript事件监听**: - **scroll...

Global site tag (gtag.js) - Google Analytics