zoukankan      html  css  js  c++  java
  • 手机端遮罩层禁止滚动,阻止穿透滑动

    现在手机端常常有类似于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的弹窗,采用第一种,没有弹窗的,采用第二种。

  • 相关阅读:
    练习二十七:递归函数应用
    mysql8.0数据库忘记密码时进行修改方法
    格式化字符串两种方式
    练习二十六:阶乘计算(递归)
    练习二十五:阶乘之和计算
    Dapper批量添加
    c# FTP操作类(转)
    c# 依赖注入之---反射(转)
    c# 依赖注入之---setterInjection(转)
    php遍历数组赋值
  • 原文地址:https://www.cnblogs.com/zihai/p/6855619.html
Copyright © 2011-2022 走看看