记录一个h5在ios中监听转屏的坑

527 阅读1分钟

问题:有个h5列表页,要求的是横屏显示8个,竖屏显示6个,大概像下面这种,还要显示分页

image.png

第一眼,这不很简单的事吗,判断下window.innerWidth和window.innerHeight就搞定了。在这个页面转屏就监听window的resize事件就可以了。

于是,三两下写好了。

const resizeSwiper=()=>{
 
   
         let orientation = (window.innerWidth > window.innerHeight) ? "landscape" : "portrait";
       
        if (orientation === 'portrait') {
            // do something ……
            pageSize.value = 6
        } else {
            pageSize.value = 8

            // do something else ……
        }
        pageTotal.value = Math.ceil(total.value / pageSize.value)
        if(pageTotal.value<=pageIndex.value){
             pageIndex.value=pageTotal.value
        }
       
        if (myswiper.value) {
        myswiper.value.resize()
    }
    


}
// 横竖屏切换时调整页面数据,退出页面注销监听事件
window.addEventListener("resize", resizeSwiper);
onUnmounted(()=>{
   window.removeEventListener("resize", resizeSwiper)

}) 

然后问题来了。

在ipad里面,这个经常“失灵”。

接口返回了7条数据,就是说横屏一页搞定,竖屏两页。

但是在ipad中测试有时正常,有时从竖屏转到横屏依旧显示两页,一页6条。

难道是没有触发resize事件吗。

实验证明,将window.innerWidth和window.innerHeight改成 document.body.clientWidth 和 document.body.clientHeight就可以了。

就是说此时window.innerWidth其实和document.body.clientHeight是一致,ipad转屏了,但没有完全转