UNIAPP-对于弹窗外内容的点击与滑动的简单处理

本文讲述了开发者在使用UNIAPP+Vue3+TypeScript项目中遇到的弹窗滑动问题,尝试了官方方法和DOM操作,最终通过合理利用stop和prevent事件处理机制解决了弹窗内外滑动冲突,提供了一种有效的组件化解决方案。
摘要由CSDN通过智能技术生成

 #UNIAPP#前置条件:环境为uniapp+vue3+ts,使用的是composition api开发

一、事情起因:弹窗问题

本人开发项目时遇到一个问题,起初设计了一个弹窗组件,该组件在测试时,弹窗外的位置的滑动,会导致背景内容滑动,即便设置了蒙版,蒙版下的内容依旧在滑动时随之移动

二、本站及其他平台的解决办法

方法一(大部分):基本上沿用了一个很官方的方法,有兴趣可以去研究一下
UNIAPP提供的控制遮罩外内容滑动的方法

@touchmove.stop.prevent="moveHandle",moveHandle 可以用来处理 touchmove 的事件,也可以是一个空函数。

基本思路就是:当页面产生滑动时,即touchmove触发时,会有两个事件产生,①是.stop,调用 event.stopPropagation(),原意是指这个 touchmove 事件不会冒泡到当前元素的父元素上,②是.prevent:调用 event.preventDefault(),这会阻止事件的默认行为。

此时我照搬了这个逻辑,但是发现了问题,因为prevent,所以本身弹窗内的滑动也被禁止了,我也尝试了使用别人说的,在需要要滑动的区域使用scroll-view :scroll-y=true,经过测试,弹窗内依旧无法滑动,所以没办法,暂时放弃。(具体本人的解决方案方法第三点)

方法二:直接操作DOM,或者使用js函数,反正就是给那个元素添加overflow:hidden,具体是否这么操作,智者见智。

三、借鉴思考得来的方法

鉴于此,由于此前发生过弹窗点击的问题,发现解决起来很简单,经过整理,本人的处理如下

 <view class="index-model" v-if="show">
    <view class="dialog-overlay" @tap="close()" @touchmove.prevent>
      <view class="dialog-content" @tap.stop @touchmove.stop>
        <view class="closePop" @tap="close()"></view>
        <view class="dialog-hd">
          <slot name="hd"></slot>
        </view>
        <view class="dialog-display">
          <slot name="content"></slot>
        </view>
        <view class="dialog-confirm">
          <view class="confirm-item ">
            <slot name="cannel"></slot>
          </view>
          <view class="confirm-item ">
            <slot name="confirm"></slot>
          </view>
        </view>
      </view>
    </view>
  </view>

之前处理弹窗问题时,点击弹窗外需要关闭弹窗,弹窗内非关闭按钮不关闭弹窗,此时设置在dialog-content的@tap.stop阻止弹窗内的点击事情冒泡到父组件,由此可得,组件内的滑动也可以如此,使用.stop来分离弹窗内事件和弹窗外事件。

此时组件内和组件外的事件可以分别控制,完美解决问题,也借此学习到两个方法(.stop,.prevent)
谢谢浏览,欢迎意见。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值