Mint-ui 框架Popup和Datetime Picker组件滚动穿透解决方式

本文详细介绍了在使用Mint-ui框架时,Popup和Datetime Picker组件遇到的滚动穿透问题及其解决方法。通过监听组件状态,阻止和恢复body的touchmove事件,以及利用可见性变化事件visible-change,实现了优雅的处理策略。此外,还提出了一种全局注册指令v-roll的方法,以简化代码并避免多个组件间的冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在移动端开发中使用到了Mint-ui组件库,其中有两个组件Popup组件和Datetime Picker存在滚动性穿透问题,官方文档最新版并没有解决这个问题。

现象还原

问题原因

  • HTML5触摸事件touchmove事件:当手指在屏幕上滑动的时候连续地触发
  • 所以当激活出组件Popup组件和Datetime Picker的弹出层时,我们在弹层选择内容时上下连续滑动是会触发该事件

解决思路

  • 在弹出层出现之后阻止body的touchmove事件,在弹层消失之后移除阻止事件

使用mint-ui组件库的解决方式

Popup组件

// 官方实例

<mt-popup
  v-model="popupVisible"
  position="bottom">
  ...
</mt-popup>

// 解决方式,通过监听popupVisible变量,在弹窗出现后禁止bode节点touchMove事件,弹窗消失后恢复body节点的touchMove事件

const handler = function(e) {
    e.preventDefault();
}

// vue实例内
watch: {
    popupVisible: function (val) {
      if(val) {
          document.g
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值