h5事件监听

本文主要介绍了在Angular项目中遇到的一个问题:点击弹框外区域需两次点击才能关闭弹框。问题源于键盘组件外的一层透明div。解决方案是通过addEventListener监听事件,结合ngOnChanges生命周期钩子在键盘显示和隐藏时动态绑定和移除监听。在解决过程中,由于事件绑定时机和this指向的问题,经过多次尝试和优化,最终确定在键盘显示后延迟500毫秒绑定事件以避免手机点击延迟导致的问题。
摘要由CSDN通过智能技术生成

问题:点击div(或弹框)外的任何区域div(或弹框)消失

前情提要:

项目是用angular写的移动端页面,测试反馈点击确认按钮每次都要点击2次才生效,体验很不好,需要优化。页面如下图所示:点击金额输入框键盘出现输入金额,键盘是单独封装的组件,点击页面其他地方键盘消失。

WechatIMG1.jpeg

定位问题:

当测试跟我说的时候,我第一反应是是不是点击有延迟啊,然后我亲自测了一遍,发现有键盘出现的时候需要点2次,没有键盘出现的时候一次就生效了,然后看了代码发现,按照代码逻辑是这样的没错,因为键盘组件中在键盘外absolute了一层透明div(宽高100%),然后当键盘展示的时候点击确认按钮其实点击到的是这层隐形div所以第一次点击其实是关闭键盘,需要再点一次按钮确认按钮才能正常生效。所以问题就是:解决这个点击div其他区域隐藏div的事。

解决问题:

解决这个问题还是很简单的,把之前隐形的绝对定位div去掉,重新写一个方法隐藏键盘就好了,首先想到的肯定是在document上绑定addEventListener监听事件,所以就有以下2个问题需要考虑:(1)什么时候去绑定这个监听事件?

(2)需不需要移除监听事件,什么时候去移除这个监听事件?(因为不移除的话,会造成内存泄漏,可能还会造成其他一些bug)

基于以上2个问题,最先想到的是:在进入组件或者页面的时候添加监听事件,在离开组件的时候移除监听事件,但是这样会有问题:进入页面键盘是默认false不展示的,进入页面就绑定监听点击页面隐藏键盘,这样的话键盘怕是永远都展示不出来了。。。。

然后就想到在键盘展示的时候添加监听,隐藏的时候移除监听,就要用到angular的ngOnChanges生命周期钩子(ngOnChanges具体使用方法在最后有展示):

ngOnChanges (changes: SimpleChanges) {
// 判断变化的属性中是否有变量show(show为true,键盘展示,false键盘隐藏)
    if (changes.show) {
      if (ch
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值