React移动端H5页面出现弹窗蒙层屏幕不可滑动

最近在做一个需求,用户第一次进入网页会有一个新手引导的功能,是一个半透明的蒙层,蒙层之后的主页面会有很多的模块功能,在功能很多的情况下,屏幕就可以向下滑动,UI觉得在有蒙层的情况下最好不要让屏幕可以滑动,因为新手引导这个图片是根据一个模块来定位的,如果滑动的话,新手引导也会跟着滑动,肯定是不合理的。

首先在加载新手引导的位置,加载完之后,执行监听事件,注意监听的元素一定要是不可滑动的元素,就是蒙层。(一开始我把事件监听在body元素上了,导致都不能滑动了,太笨了。)

    // 获取请假新手引导
    getLeaveNewHandGuid() {
        const {apply_switch} = this.props.home.data;

        //唯一的同一个事件函数
        const handler = function (event) {
            event.preventDefault();
        }

        // 申请开关打开
        if(apply_switch){

            //加载新手引导的代码
            xxxxx
            xxxx

            //添加监听事件--页面不可滚动
            document.querySelector('.mask').addEventListener('touchmove',handler,{passive: false });
        }
    }

我的新手引导引用的是一个组件,所以在新手引导的组件中点击结束引导的函数中,结束监听,注意一定要是self.handler,代表是同一个事件函数,不可两个函数都写一个事件函数,如果是在同一个组件中,就可以直接使用handler。

   // 结束新手引导
    onOverGuid() {

        axios.post('ajax-xxx', {
            data:data
        }).then(res => {
               //隐藏新手引导弹窗
            document.querySelector('.new_hand_guid-container').style.display = 'none';
        })  

        //在结束时移除禁止滑动事件      
        document.querySelector('.mask').removeEventListener('touchmove',self.handler,{passive: false});
    }

在react中不使用passive参数会报错,它可以让浏览器同时执行,是网页更加流畅,至于passive参数的用法,可以看这篇文章 :  passive的用法   ,addEventListener

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React移动端项目中,你可以通过添加CSS样式和使用React组件来禁止滑动。以下是一种常见的方法: 1. 创建一个全局的CSS文件,例如`global.css`,并在你的项目中引入它。 2. 在`global.css`文件中添加以下CSS样式: ```css /* 禁止滑动 */ body { overflow: hidden; } .modal-open { overflow: hidden; position: fixed; width: 100%; } ``` 上述CSS样式会将页面的滚动条和滑动行为禁止掉,同时保持弹窗内容可滚动。 3. 在你的React组件中,使用state来控制弹窗的显示与隐藏,并通过条件渲染来添加相应的CSS类名。 ```jsx import React, { useState } from 'react'; import './global.css'; function App() { const [modalOpen, setModalOpen] = useState(false); const openModal = () => { setModalOpen(true); }; const closeModal = () => { setModalOpen(false); }; return ( <div className={modalOpen ? 'modal-open' : ''}> {/* 页面内容 */} <button onClick={openModal}>打开弹窗</button> {/* 弹窗 */} {modalOpen && ( <div className="modal"> <h2>弹窗内容</h2> <button onClick={closeModal}>关闭弹窗</button> </div> )} </div> ); } export default App; ``` 在上述示例中,我们使用了`modalOpen`状态来控制弹窗的显示与隐藏。当弹窗打开时,给根元素添加`modal-open`类名,这将应用之前定义的CSS样式,禁止页面滑动。 通过点击按钮来打开和关闭弹窗,并更新`modalOpen`状态。 这样就可以在React移动端项目中实现弹窗后禁止滑动的效果了。记得在修改完配置后重新启动应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值