美文网首页
弹出遮罩层后,如何禁止底层页面的滚动

弹出遮罩层后,如何禁止底层页面的滚动

作者: 小菜鸟g | 来源:发表于2020-05-18 11:26 被阅读0次

    弹窗是一种常见的交互方式,而蒙层则是弹窗必不可少的元素,用于隔断页面与弹窗区块,暂时阻断页面的交互。但是,我们会发现,当弹出遮罩层后,底层body的内容也是可以滚动,显然这不是我们想要的效果,这个是最近做项目频繁出现的一个问题,对于这个问题尝试了几种解决方案,皆存在弊端。

    方法一:


    当触发浮层的时候对body加css样式

    body: {
          height: 100%;
          overflow: hidden;
    }
    

    使用这个方法测试后发现,在pc端支持良好,在移动端就很尴尬了,部分Android手机支持,iOS手机完全不支持

    方法二:


    我们写的这个项目正好是个Vue项目,可以用vue提供的 @touchmove.prevent 方法可以用来阻止滑动,当时用了之后感觉良好,结果测试来给报bug了,说是遮罩页上的其他需要滑动的元素都无法滑动了,啊尴尬了,这个方式禁掉了所有的滑动时间,看来对于我的需求来说依然用不得了...

    方法三:


    这个方法使用定位的原理,也是目前项目使用的方式,测试后移动端支持良好,靠谱!!!
    需要注意的细节,就是将页面定位后,内容会回到头部最顶端,如有需要,这里我们需要记录一下,当取消蒙层时同步top值。
    在vue项目使用,封装了个简单的
    +在vue项目下通过自定义指令封装了个简单的指令

    'use strict';
    
    var scrollTop = 0;
    function install(Vue) {
        Vue.directive('banscroll', {
            bind(el, binding, vnode, oldVnode) {
                scrollTop = window.scrollY
                document.body.style.position = 'fixed';
                document.body.style.top = `-${scrollTop}px`;
                document.body.style.left = 0;
                document.body.style.right = 0;
                document.body.style.overflow = 'hidden';
            },
            unbind(el) {
                document.body.style.position = '';
                document.body.style.top = 0;
                document.body.style.overflow = 'auto';
                window.scrollTo(0, scrollTop);
            }
        })
    }
    export default install;
    

    相关文章

      网友评论

          本文标题:弹出遮罩层后,如何禁止底层页面的滚动

          本文链接:https://www.haomeiwen.com/subject/ykayohtx.html