美文网首页
滚动(移动端滑动)穿透问题

滚动(移动端滑动)穿透问题

作者: lynnce | 来源:发表于2019-11-19 15:06 被阅读0次

    在项目中遇到很多次滚动穿透问题,每一次都是看情况临时试解决方案能否可行,在这里统一总结一下

    pc端model框弹出,下层内容禁止滚动

    解决方案1:body添加禁止滚动类preventScroll

    
    body.preventScroll{
    
        height:100vh;
    
        overflow:hidden
    
    }
    

    ⚠️弊端:只在pc端有效,移动端不生效,并且原有的滚动条会因为overflow:hidden而消失


    移动端model框弹出

    解决方案2:model添加touchmove事件监听,禁止默认事件

    
    model.addEventListener('touchmove',(e=>{
    
        e.preventDefault();
    
    },false)
    

    ⚠️弊端:只适用于model框没有滚动内容的情况


    解决方案3:给body添加preventScroll禁止滚动类

    body.preventScroll{
    
        position:fixed,
    
        height:100%,
    
    }
    

    ⚠️弊端:body滚动条会消失,关闭model框时滚动条回到顶部


    解决方案4:弹出model框时给body添加preventScroll禁止滚动类,记住滚动条所在位置,model框关闭时设置滚动条高度(兼容移动端和PC端)

    
    body.preventScroll{
    
       position:fixed,
    
       height:100%,
    
    }
    
    openModel(){
    
      //model框弹出,带过渡效果  this.showModel()
    
       this.myscroll = document.documentElement.scrollTop || document.body.scrollTop
    
    }
    
    closeModel(){
    
       //model框关闭,带过渡效果  this.showModel()
    
       document.document.scrollTop = this.myscroll;
    
    }
    

    ⚠️:这种方法是比较完善的,兼容pc和mobile的解决方案


    案例3:model层滑动时,禁止body滑动,model上滑下滑到达临界点时,body可以根据情况上滑或下滑

    相关文章

      网友评论

          本文标题:滚动(移动端滑动)穿透问题

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