首先交代一下,我是用angular写的公众号项目,在点击按钮出现的弹框中打字,调起了ios的虚拟键盘,当键盘收起时,发现弹框中的点击事件失效了。其实我做过实验,就是打字完成后不点击键盘中的“完成”按钮,直接点击弹框中的按钮就是可以的,但我不可能控制用户的操作,所以只能重新找方法。

既然找到原因,那就去查资料,果然早在2018年底,就有人提出这个问题,因为ios12.x系统升级,所以部分iphone会出现这种问题。输入框focus时展开键盘,输完点击“完成”,键盘收起,问题就出现这儿,键盘虽然收起,但body之前被键盘推上去了,所以现在需要页面重新绘制。

window.setTimeout(() => {
      document.body.scrollTop = 0;
      document.documentElement.scrollTop = 0;
      window.scroll(0, 0);
      this.zone.run(() => {});
}, 0);
// 这是angular中的写法,其中this.zone.run(() => {});下面介绍。

ngNone

NgZone是基于Zone来实现的,NgZone从Zone中fork了一份实例,是Zone派生出的一个子Zone,在Angular环境内注册的异步事件都运行在这个子Zone上。

zone中有两个方法,runOutsideAngularrun

runOutsideAngular不会对Angular里面的变化进行跟踪。

run重新跟踪变化。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐