移动端js弹出层滚动的时候 body层不可滚动的解决办法

RGB接口电容触摸屏驱动(一)模块介绍 阅读详情

最近在做移动端网站,在点击导航栏,弹出导航列表时,出现了问题。下滑列表时底层body也跟着滚动,连查带想的折腾了两天才解决这个问题。下面主要分享一下解决办法以及关键代码。

一、有的网友建议弹出层弹出时给 html 和 body 都加上“height:100%;overflow:hidden;”,然而在手机上并没有什么卵用

二、结合弹出层加上“overflow-y:auto”依然不起作用

三、加上touchmove事件:window.ontouchmove = function(e){e.preventDefault();return false;},结果整个屏幕都无法滑动,这个办法也不行
。。。。
后来经过网友的帮助,结合我的代码终于找到了解决的办法

代码如下:

<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>移动端->弹出层内容滚动的时候,不影响body的滚动条处理</title>

    <script type="text/javascript" src="vue.js"></script>
    <script type="text/javascript" src="vue-resource.js"></script>
    <style>
        *{
            margin:0;
            padding:0;
        }
        body{
            height:1500px;
        }
        .mark{
            width:100%;
            height:100%;
            background:rgba(0,0,0,.5);
            position:fixed;
            left:0;
            top:0;
        }
        .layerNode{
            width:200px;
            height:200px;
            left:50%;
            top:50%;
            margin-left:-100px;
            margin-top:-100px;
            background-color:#fff;
            position: absolute;
            overflow-y:scroll;
            -webkit-overflow-scrolling : touch; /* ios 自带滚动条不平滑解决方法 */

        }

    </style>
</head>
<body>


body层

<div class="mark">
        <div id="ul"  v-show="ok" >
            <ul id="menuList" class="layerNode">
                <template v-for="item in message">
                        <li style="height:46px;"><a :href="getHref(item)">{{item.name}}</a></li>
                </template>
            </ul>
        </div>
</div>


<script type="text/javascript">

    //弹出层滚动条不影响到body [layerNode:需要滚动的元素]
    var DivScroll = function( layerNode ){
        //如果没有这个元素的话,那么将不再执行下去
        if ( !document.querySelector( layerNode ) ) return ;

        this.popupLayer = document.querySelector( layerNode ) ;
        this.startX = 0 ;
        this.startY = 0 ;

        this.popupLayer.addEventListener('touchstart', function (e) {
            this.startX = e.changedTouches[0].pageX;
            this.startY = e.changedTouches[0].pageY;
        }, false);

        // 仿innerScroll方法
        this.popupLayer.addEventListener('touchmove', function (e) {

            e.stopPropagation();

            var deltaX = e.changedTouches[0].pageX - this.startX;
            var deltaY = e.changedTouches[0].pageY - this.startY;

            // 只能纵向滚
            if(Math.abs(deltaY) < Math.abs(deltaX)){
                e.preventDefault();
                return false;
            }

            if( this.offsetHeight + this.scrollTop >= this.scrollHeight){
                if(deltaY < 0) {
                    e.preventDefault();
                    return false;
                }
            }
            if(this.scrollTop === 0){
                if(deltaY > 0) {
                    e.preventDefault();
                    return false;
                }
            }
            // 会阻止原生滚动
            // return false;
        },false);

    }

    //调用
    var divScroll = new DivScroll('.layerNode');
    //////////////////////////////////////////////
    以下是我用vue.js获取的列表数据部分代码,就不展示了,核心代码都在上面
    </script>
</body>
</html>

另外,如果列表滑动到最底部还是会引起body滚动时,可以给body加上一段css样式:{height:100%;position:fixed;top:0;},在关闭弹出层时,去掉这段样式就可以了

效果图如下:
这里写图片描述

亚马逊SP-API授权实战:从OAuth流程到Refresh Token获取 本文详细解析了亚马逊SP-API授权流程,从OAuth认证到Refresh Token获取的全过程。通过实战经验分享,帮助开发者快速掌握Marketplace Appstore、Website Workflow和自行授权三种方式,解决常见错误如MD5100和MD9999,并提供了安全存储Refresh Token的最佳实践。 阅读详情

相关推荐

别再混淆了!深入浅出图解四元数姿态控制中的‘误差四元数’(附四种定义对比与仿真)

本文深入解析四元数姿态控制中的误差四元数定义差异,对比四种常见定义(如Q₀∘Q⁻¹与Q⁻¹∘Q₀)及其对PD控制性能的影响。通过刚体动力学仿真验证,揭示定义二(Q⁻¹∘Q₀)在无人机和航天器控制中的最优性能,提供工程实践建议与参数整定技巧,帮助开发者避免常见陷阱并提升控制效率。

weixin_42528191的博客 277

【前端】页面高度/滚动高度/滚动条高度

页面示例: 页面代码: 页面高度: //console.log(“实际内容高度” + $(".main").height()); //console.log(“屏幕高度” + document.body.clientHeight); //console.log(“头部标题高度” + $(".flex-center").height()); //console.log(“内容显示高度” + (document.body.clientHeight - $(".flex-center").height()));

weixin_38792911的博客 1710

开源AI数字人DUIX:从零构建你的智能交互助手

本文详细介绍了如何利用开源AI数字人DUIX从零构建智能交互助手。文章阐述了DUIX作为开源项目的核心优势,包括低成本启动、低网络依赖和高度可定制性,并提供了从开发环境搭建、核心模块(AI模型、语音、形象)配置到个性化业务逻辑开发与最终部署的完整实践指南,帮助开发者快速掌握构建专属AI数字人的全流程。

weixin_29051811的博客 504

解决绝对定位层(position:absolute;)上无法触发滚动事件的问题

今天处理一个需求,页面的左边大部分内容被一个绝对定位的层给覆盖了,鼠标移动到右边滚动鼠标滚轮可以触发 浏览器滚动条,移动到右边却触发不了。 解决方法:在左边层增加监听事件,判断鼠标是向上滚,还是向下滚,然后触发你需要滚动的内容。 function getOs() { if(navigator.userAgent.indexOf("MSIE")>0) return "M

深秋的竹子--依旧笑寒风 1万+

峰值电流模式CCM BUCK的传递函数推导

电流内环闭环传递函数: Gci(s)=i^L(s)v^comp(s)=FmGid(s)1+KRiHe(s)FmGid(s)=1Ri11+s[mcL+(0.5VIN−Vo)RiVINRifSW]+s21(πfSW)2 G_{ci}(s)=\frac{\hat i_{L}(s)}{\hat v_{comp}(s)}=\frac {F_mG_{id}(s)}{1+KR_iH_e(s)F_mG_{id}(s)}=\frac{1}{R_i}\frac{1}{1+s[\frac{m_cL+(0.5V_{IN}-V_o)

c007106333的博客 2356

torch.jit.script 与 torch.jit.trace

它们是 PyTorch 的即时编译(Just-in-Time Compilation)模块的一部分,用于提高模型的执行效率并支持模型的部署。方法只跟踪了给定输入张量的执行路径,因此在使用转换后的模块对象进行推理时,输入张量的维度和数据类型必须与跟踪时使用的相同。跟踪模型可以看作是一个具有相同功能的脚本模型,但它还保留了原始模型的动态特性,可以使用更多高级特性,如动态图和控制流。它接受一个模型和一个示例输入,并记录模型在给定输入上的执行过程,然后返回一个跟踪模型。的模型文件,并将其转换为评估模式。

leoatliang的博客 1万+

解决移动端滚动穿透的6种方法,经常发生在弹出遮罩层内容滚动,下面页面也滚动的情况

这时,我们可以通过记录用户打开弹窗前所滚动页面的位置,在弹层展开的时候赋给body在css中的top值,等关闭弹层的时候,再把这个值赋值给body在js中的scrollTop值,还原body的滚动位置。2、touchmove手势移动的时候,再次获取最新的坐标点y的值y2,(其实记录可滚动区域的可滚动高度、当前滚动距离等可以在一开始就记录,我这里写到了touchmove里,还可以再优化)。当弹层出现的时候不需要再禁掉body的滚动效果了,我们可以从弹层方面入手,阻止弹框的touchmove事件的默认行为。

男神的专栏 4128

C#程序突然崩溃怎么办?5分钟学会分析Dump文件(Visual Studio 2022实战)

本文详细介绍了在C#程序崩溃或无响应时,如何捕获并分析Dump文件以快速定位问题。通过Visual Studio 2022实战演示,重点讲解了配置符号服务器、解读调用堆栈与内存状态,以及针对CPU飙高、内存泄漏等典型场景的分析方法,帮助开发者高效进行故障诊断。

docker8compose的博客 474

移动端弹出层滚动时禁止body滚动

移动端弹出层滚动时禁止body滚动

weixin_45093753的博客 598

第一章 EB安装

1.DemoWorkspace 是基于EB当前组件配置下的例程,包含了启动文件和中断服务函数以及组件demo。2.Mclsar 下存放的是EB的插件包和静态MCAL的驱动文件。

舊梦的博客 1956

【四足机器人项目实战】MIT四足机器人力控电机优劣分析及解决办法

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、mit力控电机方案二、弊端三、优点四、解决办法设计相关看专栏其他博客 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对XXX做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、mit力控电机方案 MITCheetahMini驱动器采用的电机是类似于公版电机T-MotorU8的型号

qq_35635374的博客 6090

CSS实现页面滚动时body背景不动

body { background-image: url(../img/bg.jpg); background-position: center center; background-repeat: no-repeat; background-attachment: fixed; background-size: cover; }

(ง •_•)ง 1766

新手强化学习—深入解析 YOLOv13 项目包中的文件结构和各文件作用

YOLOv13是YOLO系列最新发布的计算机视觉模型。在这篇博客中,我将深入分析YOLOv13中各个文件的作用,对整个项目的文件结构有更清晰的认识。

Limiiiing的博客 482

关于移动端js弹出层滚动的时候 body层不可滚动的解决办法

最近在做移动端网站,在点击导航栏,弹出导航列表时,出现了问题。下滑列表时底层body也跟着滚动,连查带想的折腾了两天才解决这个问题。下面主要分享一下解决办法以及关键代码。一、有的网友建议弹出层弹出时给 html 和 body 都加上“height:100%;overflow:hidden;”,然而在手机上并没有什么卵用二、结合弹出层加上“overflow-y:auto”依然不...

weixin_34234823的博客 417

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

移动端弹出层后禁止背景底层 body滚动

移动端弹出层后禁止背景底层 body滚动

Quiet-Night的博客 4703

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

vue项目中禁止页面滚动 / 滚动事件穿透 (弹出蒙版时,弹出层下面还可以滚动)

vue项目中禁止页面滚动 / 滚动事件穿透移动端解决方案PC端解决方案 vue项目中弹出层时,蒙版下还可以滚动页面。 移动端解决方案 在蒙层所在div上加 @touchmove.prevent <div class="maskBox" @touchmove.prevent></div> PC端解决方案 弹层显示时调用 stopMove()停止页面滚动 ,弹层消失...

Hassan的小博客! 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

移动端如何禁止body的滚动

在我们写h5 或者移动端网站的时候,通常会有头部下拉这个功能,而当我们下拉的时候,背景body就会被滑动,那么改如何禁止body的滚动尼? - 通过禁止 touchmove 事件 //js document.addEventListener('touchmove', function(event) { event.preventDefault(); }, false); //jquery...

嗝~ 3495

关于移动端弹层下的body滚动

关于移动端弹层下的body滚动 这个问题在移动端挺常见的,网上也有一些解决方法,现在笔者来总结一下:css的解决方案都有兼容问题,js是比较稳定的解决方法(虽然比较麻烦) ps: 本文的例子都是用vue写的 关于css的解决方案 1. overflow:hidden; 这是最多人开始想到的解决方法,虽然在pc端可以解决问题,但在移动端是不行的, 但有人说在html,body同时设置ove...

weixin_30682415的博客 130

弹出弹窗后,如何禁止底层的body滚动,适用于超长的页面

常见场景 从event target入手 还是直接干body吧 conclusion 常见场景 在许多填写表单的页面中,都会弹出一个选择器,让你在弹窗中选择项目。有时,弹窗本身容纳不下内容,需要让它不断滚动来展示,但因为事件是冒泡的,有时就会造成底部(body 的Z-index肯定是在下面的 )的内容也在滚动。这内外一起滚,就有点尴尬了。 举例,下面两张图里,都有类似的问题。那

凝视深渊 4万+

移动端滚动穿透问题

定义:移动端弹出fixed弹窗的话,在弹窗上滑动会导致下层的页面跟着滚动,这个叫 “滚动穿透” 解决方案1 在弹出层的touchstart事件中调用preventDefault 这种方法不可取,至少有3个缺点: 如果弹出层本身是有滚动(条)的话,将会导致弹出层无法滚动,此时用这种方法无异于饮鸩止渴。 一个很常见的场景,点击弹出层,弹出层消失掉,此时也无法触发弹出层的点击回调事件。 弹出...

u010537398的博客 925

移动端如何禁用底层的滚动事件,保证弹出层的滚动事件正常运行

今天做移动端项目时遇到的一个问题,带来了不少麻烦。 pc端的常用方法是 : $('body').css({ overflow: 'hidden', height: $(window).height() + 'px' }) // 因为body的高度等于了window的高度,所以滚动自然就无法进行了,如果需要滚动了,只需要把高度从style标签上面移除就好了 但在移动端是不生

你帅还不是一样敲代码的博客 3315

css禁止滑动页面_弹出层完美禁止页面滚动

HtmlCssJs弹出层去除背景滚动--原生版使用js构建的弹出层类,使用new的方式实例化,传入的参数为:{el: "触发元素,click触发弹出层",content: "弹出层内容",time: 0 // 显示持续时间}使用 passive 事件和overflow:hidden;禁止滚动。完美兼容PC和移动端。main contentPopupPopup 500body {margin:0;...

weixin_39817176的博客 1422

解决ios移动端双滚动条导致滚动穿透问题

解决方案1 在弹出层的touchstart事件中调用preventDefault 这种方法不可取,至少有3个缺点: 如果弹出层本身是有滚动(条)的话,将会导致弹出层无法滚动,此时用这种方法无异于饮鸩止渴。 一个很常见的场景,点击弹出层,弹出层消失掉,此时也无法触发弹出层的点击回调事件。 弹出层内的任何事件都执行不了了。 解决方案2 此解决方案是解决方案1的升级版。 在弹出层的t...

gz-郭小敏的博客 5462

Vue 移动端出现弹出层时,禁止底部页面跟随滑动

这里写目录标题Vue 移动端出现弹出层时,禁止底部页面跟随滑动背景 Vue 移动端出现弹出层时,禁止底部页面跟随滑动 背景 最近不在状态 ,感觉自己浑浑噩噩的 需求就是弹出框弹出的时候禁止页面滑动,很多时候用css 就能结局 但是有的时候没办法! 所以想到了用js来解决这个问题! 1.在有弹出框的页面中,加上以下方法,弹出框出现时调用禁止滚动方法stopScroll(),弹出框去掉是调取允许滚动方法canScroll()即可,代码如下: methods : { //禁止滚动 stopScrol

qq_45723621的博客 4248

html弹出层全覆盖滚动条,JS弹出层遮罩,隐藏背景页面滚动条细节优化分析

一、去除滚动条方法给body添加overflow:hidden属性即可,IE6、7下不会生效,需要给html增加overflow:hidden属性样式中需要对IE6、7及其它浏览器用hack辨别,这是因为当页面拉到下面时如果html或body被overflow:hidden,透明弹层下面的页面就会被部分正常隐藏,通过透明看到的一片的灰度,具体颜色跟平台及用户设置背景色有关。body或html去掉滚...

weixin_42510019的博客 822
下一篇: less给网站换肤
张静蕾
博客等级 码龄11年 13粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值