• JS弹出层制作,以及移动端禁止弹出层下内容滚动,overflow:hidden移动端失效问题


    HTML

    <div class="layer">
                <div class="menu-list">
                     <span>社会</span>
                     <span>历史</span>
                     <span>军事</span>
                     <span>娱乐</span>
                     <span>电影</span>
                     <span>财经</span>
                     <span>体育</span>
                     <span>科技</span>
                     <span>手机</span>
                     <span>健康</span>
                     <span>情感</span>
                     <span>亲子</span>
                </div>
         </div>

    CSS

    .preHander{
        overflow: hidden;
    }

    当设置背景层内容overflow:hidden的时候在PC端和模拟器上的有的,但是到的安卓、IOS真机运行的时候失效!

    JS

         $('.menu').click(function(){
                    $('.layer').show()
                    var scroTop=$(document).scrollTop() //滚动条距离顶部的位置
                    $('.layer').css('top',scroTop+'px') //弹出框顶部位置
              
              $('.menu-list').css('z-index','9999')

    $('html,body').addClass('preHander') //禁止弹出框下面内容滚动,但是在真机运行失效// 添加触摸监听事件,如果手指触摸到阴影区域,弹出层消失!
                    document.addEventListener('touchstart',touch, false)
                    function touch(event){
                        var event=event || window.event;
                        if(!$(event.target).is($('.menu-list'))&&$(event.target).parent('.menu-list').length===0){
                                    $(".layer").hide(); 
                                    $('html,body').removeClass('preHander') //解除弹出框下面内容滚动
                                }
                    }
                })

     所以为了禁止弹出层下内容的滚动,必须要禁止滑动事件传递到下一层,所以要防止滑动事件冒泡

        // 当弹出层出现的时候,禁止弹出层背景层滑动,阻止事件传递冒泡
                    function move(e){
                        e.preventDefault();//禁止事件冒泡
                    }

    当弹出层出现的时候

               // 当弹出层出现的时候,禁止弹出层背景层滑动,阻止事件传递冒泡
                    function move(e){
                        e.preventDefault();//禁止事件冒泡
                    }
                    $('.layer').on('touchmove',move, false)//弹出层出现,弹出层的背景层阻止默认滑动事件    

    所以最后的JS应该是

     // 点击菜单函数封装=========================================================
            function menushow(){
                $('.menu').click(function(){
                    $('.layer').show()
                    var scroTop=$(document).scrollTop() //滚动条距离浏览器顶部的位置
                    $('.layer').css('top',scroTop+'px') //弹出框顶部相对于浏览器的位置,就是在可视窗口的顶部
                    $('.menu-list').css('z-index','9999') 
                // 当弹出层出现的时候,禁止弹出层背景层滑动,阻止事件传递冒泡
                    function move(e){
                        e.preventDefault();//禁止事件冒泡
                    }
                    $('.layer').on('touchmove',move, false)//弹出层出现,弹出层的背景层阻止默认滑动事件      
                // 添加触摸监听事件,如果手指触摸到阴影区域,弹出层消失!
                    document.addEventListener('touchstart',touch, false)
                    function touch(event){
                        var event=event || window.event;
                        if(!$(event.target).is($('.menu-list'))&&$(event.target).parent('.menu-list').length===0){
                                    $(".layer").hide(); 
                                }
                    }
                })
            }
  • 相关阅读:
    桌面工具集
    运维工具集
    使用Maven插件构建Spring Boot应用程序Docker镜像
    解决Ubuntu 17.10设置面板打不开的问题
    防止Web表单重复提交的方法总结
    深入浅出mybatis之启动详解
    yum方式安装mysql
    在Java中调用Python
    UUID在Java中的实现与应用
    VM克隆后找不到eth0的问题解决
  • 原文地址:https://www.cnblogs.com/xxflz/p/9778444.html
Copyright © 2020-2023  润新知