vue在ios返回上一路由白屏

问题描述:

进入A页面——>B页面——>ios自带的返回——>白屏出现——>手动点击白屏处——>问题解决

有时候当你加载第二页或者下拉到更高的高度的时候会出现白屏,这跟vue框架也有关系,第一次用点击路由切换我们就会遇到第一页滑到800高度,路由跳转会在同样的高度,而不是顶部0的位置只能给一个window.scrollTo(0, 1)   window.scrollTo(0, 0)

【复现步骤】
1、在app 顶级文件中,这样写代码

html, body {  
    width: 100%;  
    height: 100%;  
    margin: 0;  
    padding: 0;  
    position: relative;
}
.container{  
    position: relative;  
    width: 100%;  
    height: 100%;  
    background: #fff;
}

2、在ios(iphone6) 上,A页面滚动超过一屏幕高度后,一屏 高度后,跳到B页面,再返回会得到以下结果

33892132-fadbfa28-df92-11e7-95a6-01259528b482.png

【原本期望】:
1、一切正常的浏览器访问

【BUG必现】:
1、实际上得到一个必现的bug,A页面大约1200px 自顶部到底部有一大片空白会遮盖住

2、必须点击页面才会让空白消失

【解决方案,粗劣】
1、这样更改样式

html, body {  
    width: 100%;  
    height: 100%;  
    margin: 0;  
    padding: 0;  
    position: relative;
}
.container {  
    width: 100%;  
    height: 100%;  
    background: #fff;  
    overflow: scroll;  
    -webkit-overflow-scrolling: touch;  
    position: absolute;  
    left:0;  
    top:0;
}

2、原因是,经过排查,发现在ios 机器上使用webview 开发Vue项目时候,go history (-1),无法将body 的高度拉掉,使得遮住,触发轻点击,方可消除该遮罩

3、解决的理论:用于最重要的html 容器是container,然而因为设置html、body高度是100%,从而造成了 container 撑开父级,但浏览器默认滚动的scroll 并不是 container(可能我这里认识是错的),而是body,某些因素,造成返回history 后,无法复原(ios 的锅),为此,我们将 container 进行了绝对定位,并让它重新成为 scroll 的对象,从而解决问题

4、container 这样写

.

container { 
    width: 100%; 
    height: 100%; 
    background: #fff; 
    overflow: scroll; 
    -webkit-overflow-scrolling: touch; 
    position: absolute; 
    left:0; 
    top:0;
}

5.也可以通过

this.$nexttick(() => {   
    window.scrollTo(0, 1)   
    window.scrollTo(0, 0)
})

进行刷新


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值