• 关于移动端滚动穿透问题的解决


    关于移动端滚动穿透问题的解决

    移动端滚动穿透问题:在移动端进行fixed弹窗的时候,在弹窗上滑动会导致下层页面跟着滚动,影响用户体验,这种现象称为‘滚动穿透’。

    三种解决办法中,视需求选择解决办法:

    方法一:overflow:hidden;

    在列表容器的父容器设置样式overflow:hidden来禁用滚动

    html.vox , html.vox body{
      height:100%;
      overflow:hidden;
    }

    当弹出弹窗的时候,为底部页面HTML添加样式,取消弹窗的时候删除样式

    这种方式的缺点就是当弹窗弹出的时候,禁用了HTML和body的滚动条,滚动条列表的滚动位置会丢失,重置到没有滚动的状态。需要js重置;(不推荐使用)

     方式二:阻止touchmove默认事件

    通过阻止touchmove事件禁用滚动事件

    var modal = document.getElementById('modal');
    modal.addEventListener('touchmove',function(e){
            e.preventDefault();
    },false);

    缺点:弹窗里滚动事件也会失效,所以如果弹窗内容不会出现滚动时可以使用

    方式三:position:fixed

     var ModalHelper = (function(bodyCls){
            var scrollTop;
            return{
                afterOpen:function(){
                    scrollTop = document.scrollingElement.scrollTop;n
                    document.body.classList.add(bodyCls);
                    document.body.style.top = -scrollTop+'px';
                },
                beforeClose:function(){
                    document.body.classList.remove(bodyCls); 
                    document.scrollingElement.scrollTop = scrollTop;
                }
            }
        })('modal-open');
     function openModal(){
            ModalHelper.afterOpen();
        }
        function closeModal(){
            ModalHelper.beforeClose();
        }

    这种方式能够完美避免上两种方法的弊端,推荐使用

  • 相关阅读:
    silo 主机 报找不到 grain 实现错误的一个注意
    转:CRT注册
    Maven生命周期
    Maven学习笔记
    Java内存回收机制
    Selenium2.0和1.0的区别
    关于使用Selenium RC无法打开指定页面问题
    四儿子购买手册
    Objective-C 宏定义的收集
    设计模式:适配器模式
  • 原文地址:https://www.cnblogs.com/DreamerLeaf/p/9968069.html
Copyright © 2020-2023  润新知