问题:有个h5列表页,要求的是横屏显示8个,竖屏显示6个,大概像下面这种,还要显示分页
第一眼,这不很简单的事吗,判断下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转屏了,但没有完全转