H5页面必会遇到的问题及解决办法

前言

在我们开发H5页面的时候必会遇到一些兼容性等爬过坑的问题,在这里我将这些问题汇总一下,自己也做一下笔记

问题:

1,ios滑动不流畅
2,ios上拉边界下拉出现白色空白
3,页面件放大或缩小不确定性行为
4,click点击穿透与延迟
5,软键盘弹出将页面顶起,收起未回落问题(导致整体页面上移)
6,iphonex 底部栏适配问题
7,保存页面为图片和二维码问题和解决方案
8,微信公众号H5分享问题

移动端H5相关基础技术:
H5页面必会遇到的问题及解决办法_第1张图片

ios滑动不流畅

上下滑动页面会产生卡顿,手指离开页面,页面立即停止运动。整体表现就是滑动不流畅,没有滑动惯性。

原来在 iOS 5.0 以及之后的版本,滑动有定义有两个值 auto 和 touch,默认值为 auto。

-webkit-overflow-scrolling: touch; /* 当手指从触摸屏上移开,会保持一段时间的滚动 */

-webkit-overflow-scrolling: auto; /* 当手指从触摸屏上移开,滚动会立即停止 */

解决方案:
1.在滚动容器上增加滚动 touch 方法

将-webkit-overflow-scrolling 值设置为 touch

.wrapper {
-webkit-overflow-scrolling: touch;
}
设置滚动条隐藏: .container ::-webkit-scrollbar {display: none;}
可能会导致使用position:fixed; 固定定位的元素,随着页面一起滚动

2.设置 overflow

设置外部 overflow 为 hidden,设置内容元素 overflow 为 auto。内部元素超出 body 即产生滚动,超出的部分 body 隐藏。

body {
overflow-y: hidden;
}
.wrapper {
overflow-y: auto;
}
两者结合使用更佳!

iOS 上拉边界下拉出现白色空白

手指按住屏幕下拉,屏幕顶部会多出一块白色区域。手指按住屏幕上拉,底部多出一块白色区域。

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

解决:

document.body.addEventListener('touchmove', function(e) {
    if(e._isScroller) return;
    // 阻止默认事件
    e.preventDefault();
}, {
    passive: false
});

页面放大或缩小不确定性行为

双击或者双指张开手指页面元素,页面会放大或缩小。

解决:


或者:


click 点击事件延时与穿透

监听元素 click 事件,点击元素触发时间延迟约 300ms。

点击蒙层,蒙层消失后,下层元素点击触发。

解决:
1,,使用 touchstart 替换 click

移动设备不仅支持点击,还支持几个触摸事件。那么我们现在基本思路就是用 touch 事件代替click 事件。
将 click 替换成 touchstart 不仅解决了 click 事件都延时问题,还解决了穿透问题。因为穿透问题是在 touch 和 click 混用时产生。

在原生中使用

el.addEventListener(“touchstart”, () => { console.log(“ok”); }, false);

在 vue 中使用

你可能感兴趣的:(web前端,html5)