H5高频bug

173 阅读2分钟

一、定位元素消失不见

常见原因:position:fixed, position: stiky 失效

正常情况下:一个元素设置了position:fixed时,元素脱离了正常文档流,定位相对于视口(viewport)

但是,如果元素的祖先元素设置了transform,prespective,filter属性为none时,则fixed定位从原来相对于视口,变为了设置了特殊属性的祖先元素

常出现此bug的地方:

swiper里用position: fixed 或者 position: stiky定位

解决方案:

  1. 设置transform元素的宽高,然后可以通过position:absolute实现fixed的效果

  2. 改变元素层级,把需要fixed的元素挪为transform元素的兄弟元素或者挪到最外层,如dialog, toast等

二、IOS10, IOS11,安卓低版本白屏

常见原因:语法未兼容,即有ES6或更高级的语法没被编译为ES5

解决方案:

先检查是否有ES6及以上语法未被编译,有则进行编译,无法编译的,直接用ES5改写

三、数据显示异常(部分内容未展示,或者叠在一起)

常见于低版本系统

常见原因:样式引起,比如flex属性不被支持,元素高度未被撑开

解决方案:对设置了flex:1 1自动撑开的元素,设置height:100%;


schedule-wrap {

 

    flex1 1; 

    height100%;

}

四、元素被遮挡

常见原因:其它元素设置了transitionZ属性引起的层级问题,比如better-scroll里给滚动content设置了translateZ(1px)

解决方案:被遮挡的元素也设置transitionZ属性

image.png


.fixed-btn {

    position: absolute;

    bottom: .35rem;

    left50%;

    transformtranslate3d(-50%01px);

}

五、时间错误

常见于展示时间,或者时间作为参数和客户端有交互时,安卓端显示正常,但IOS无法正常显示,或者拿不到正确数据

常见原因:时间格式引起,IOS下时间用 - 拼接解析错误

解决方案:用/拼接,不用-。eg: (2022/08/12)

六、图片不显示

常见原因:图片格式不支持,比如webp格式

解决方案:如果图片是webp格式,可以先判断浏览器是否支持webp格式,如果不支持,采用其它格式


export const isSupportWebp =( () => {

    try {

        return document.createElement('canvas').toDataURL('image/webp'0.5).indexOf('[data:image/webp](http://dataimage/)') === 0;

    } catch(err) {

        return false;

    }

})()