ios系统在h5页面下拉上拉会带动整个webview 出现空白

产生原因:
在 iOS 中,手指按住屏幕上下拖动,会触发 touchmove 事件。这个事件触发的对象是整个 webview 容器,
容器自然会被拖动,剩下的部分会成空白。

在 W3C 文档中说

touchmove 事件的速度是可以实现定义的,取决于硬件性能和其他实现细节
preventDefault 方法,阻止同一触点上所有默认行为,比如滚动。
解决方案:
监听事件禁止滑动,通过监听 touchmove,让需要滑动的地方滑动,不需要滑动的地方禁止滑动。
具体实现代码(vue中):
mounted(){
        document.body.addEventListener('touchmove', this.eventListenerHandle, {
            passive: false
        });
},
//页面离开时记得销毁监听事件
destroyed(){
     document.body.removeEventListener('touchmove',this.eventListenerHandle,{
            passive: false
     })
},
methods:{
         eventListenerHandle(e){
            if(e._isScroller) return;
            e.preventDefault();
         }
}

注意:以上方法浏览器的自带的滚动也会被禁止 用better-scroll 实现的滚动不会被禁止。

方法原理:
//这个ios13以上没有效果
document.body.addEventListener('touchmove', function(evt) {
    if(!evt._isScroller) {
        evt.preventDefault();
    }
});
//这个会完全禁止touchmove  导致内部无法滚动。
document.body.addEventListener('touchmove', function (e) {
  if(e._isScroller) return; //过滤掉具有滚动容器的元素。
  e.preventDefault(); 
}, {passive: false}); //passive 参数不能省略
### 解决 UniApp 开发中 APP 内嵌 H5 页面卡顿的方法 #### 1. 调整 `touch-action` 属性 在某些情况下,设置 `touch-action: none;` 可能会导致页面响应变慢或卡顿。移除此属性通常能够改善这些问题[^2]。 ```css /* 移除 touch-action */ body { /* touch-action: none; */ } ``` 然而,这可能允许用户随意缩放页面,影响用户体验。为了防止这种情况发生,可以在 HTML 文件头部加入特定的 `<meta>` 标签来控制视口行为: ```html <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"> ``` 通过这种方式既保持了良好的触摸体验又阻止了不必要的手势操作。 #### 2. 使用 FastClick 库消除300毫秒延迟 移动端浏览器默认存在约300毫秒的点击延迟用于识别双击动作。引入第三方库如 FastClick 或者利用 Vue 的内置指令 v-on 来处理原生事件监听器可以帮助减少这种延迟带来的负面影响。 安装 fastclick 插件: ```bash npm install --save fastclick ``` 初始化插件: ```javascript import FastClick from 'fastclick'; FastClick.attach(document.body); ``` #### 3. 配置 Webview 性能参数 对于 iOS 设备上的 webview 加载性能问题,可以通过调整 WebView 设置提高渲染效率。例如,在 uni-app 中配置 app.json 文件中的 "pages" 字段下的 "style" 对象里增加 `"enablePullDownRefresh": false`, 这样可以关闭下拉刷新功能从而减轻部分压力;另外还可以尝试开启硬件加速(`hardwareAccelerated`)等选项[^3]。 ```json { "pages":[ { "path":"index", "style":{ "navigationBarTitleText":"首页" } }, ... ], "globalStyle": { "app-plus": { "webView": { "bounce":false, "scrollIndicator":"none", "hardwareAccelerated":true } } } } ``` 以上措施综合应用后应能在很大程度上缓解甚至彻底解决 UniApp 开发过程中遇到的应用程序内部嵌入 H5 页面时发生的卡顿现象。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南朝听月

你的打赏是我持续贡献的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值