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的弹窗,采用第一种,没有弹窗的,采用第二种。

  • 相关阅读:
    jquery实现选项卡(两句即可实现)
    常用特效积累
    jquery学习笔记
    idong常用js总结
    织梦添加幻灯片的方法
    LeetCode "Copy List with Random Pointer"
    LeetCode "Remove Nth Node From End of List"
    LeetCode "Sqrt(x)"
    LeetCode "Construct Binary Tree from Inorder and Postorder Traversal"
    LeetCode "Construct Binary Tree from Preorder and Inorder Traversal"
  • 原文地址:https://www.cnblogs.com/zihai/p/6855619.html
Copyright © 2011-2022 走看看