移动端页面弹窗后,底部页面还能继续滑动解决方案

背景:页面本身具备滚动条,弹窗后,还是能继续滑动底部的页面,体验不好。

解决方案一:弹窗后将底部页面设置overflow:hide;当弹窗结束后又重新设置回overflow:auto/scroll
这个方案大家都比较熟悉,虽然能解决问题,但是又存在的另外一个问题。那就是但你页面浏览到底部的时候,你页面设置overflow:hidden;页面瞬间回到了顶部。这样的体验感觉也是够奇怪的了~所以我们还是来看下面一种方案,也是比较推荐的一种。

方案二:弹窗后将整个弹窗阻止手指滑动(touchmove)的默认。
实现代码:(假设弹窗最外层的类名为masker)

  const masker = document.querySelector('masker')
  masker.addEventListener('touchmove',(e) => {
    e.preventDefault()
  },false)

这样底部的页面就不能滑动了,关闭弹窗后,则能正常滑动。但是这里也有一个弊端就是,有的情况你的弹窗也是需要滑动来浏览内容,也就是说你的弹窗是有滚动条的。这样的设置导致你的弹窗的滚动条也无法滚动,弹窗内容无法正常浏览。因此针对这样的问题,解决思路是这样的:
1、还是把touchmove默认给阻止掉。
2、给maskertouchmovejs手势滑动来实现滑动。
这样的方案我已经封装好了,直接npm来安装使用就行。

npm包的github地址:https://github.com/supermanHTL/popup-slide

希望对你有帮助!!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值