• 手机端遮罩层禁止滚动,阻止穿透滑动


    现在手机端常常有类似于app的全屏弹窗或者遮罩弹窗,但是会遇到一个棘手的问题:

    当位于弹窗或者遮罩底层的内容出现滚动条时,滑动弹窗或者遮罩会同时滚动底层的内容,即穿透滑动。

    如何防止穿透滑动呢?

    第一种方法,当弹窗显示时,去除底部的滚动条;当弹窗关闭时,再次显示滚动条.

    //显示弹窗
    $('.js-popup').click(function(){
        $('.mask').show();
        var wHeight = $(window).height();
        $('html').css({'height':wHeight,'overflow':'hidden'});
        $('body').css({'height':wHeight,'overflow':'hidden'});
    });
    //关闭弹窗
    $('.js-close-popup').click(function(){
        $('html,body').removeAttr('style');
        $('.mask').hide();
    })

    但是,这样会有一个问题,滚动条去除后,内容会返回顶部。对于用户来说,这肯定是一个糟糕的设计。用户反馈说,哪个煞笔设计的?

    为了不当煞笔,我们只好绞尽脑汁了。其实,可以记录显示弹窗之前,滚动所在的位置,关闭弹窗时,再重置滚动条的位置。

    //显示弹窗
    $('.js-popup').click(function(){
            window.lastScrollTop = sTop = document.body.scrollTop || document.documentElement.scrollTop;
        $('.mask').show();
        var wHeight = $(window).height();
        $('html').css({'height':wHeight,'overflow':'hidden'});
        $('body').css({'height':wHeight,'overflow':'hidden'});
    });
    //关闭弹窗
    $('.js-close-popup').click(function(){
        $('html,body').removeAttr('style');
        $(window).scrollTop(window.lastScrollTop);
        $('.mask').hide();
    })

    第二种方法,使用IScroll.js,通过CSS3 transform控制滚动

    var myScroll= new IScroll('#mask', {mouseWheel: true,click:true});

    但使用IScroll.js也会有一个问题,会影响表单内的元素,比如input不能输入、无法选择文件等等问题。

    暂时只有这两种方案,实现项目中,这两种方案都会采用,有input的弹窗,采用第一种,没有弹窗的,采用第二种。

  • 相关阅读:
    修改IIS下默认的ASP.NET版本。
    smo算法
    支持向量机通俗导论
    二次规划
    交叉熵
    机器学习中的维数灾难
    矩阵与线性变换
    l2正则化
    Matlab 的reshape函数
    matlab 等值线函数 contour
  • 原文地址:https://www.cnblogs.com/zihai/p/6855619.html
Copyright © 2020-2023  润新知