需求:用户来到首页时候是竖屏的,点开详情页横屏展示详细信息,用户点击返回回到首页
问题:从横屏到竖屏或者竖屏到横屏都有可能出现页面错乱的问题,且还容易闪退!
原因:
因为页面使用rpx为单位的;如果用的是px为单位就不会;因为rpx是根据屏幕尺寸来计算的,回到首页时候,页面获取到的屏幕尺寸还是横屏的尺寸;
测试:
home.vue:
onShow(){
uni.getSystemInfo({
success: (res) => {
uni.showModal({
title:"sW:"+res.screenWidth+';sh:'+res.screenHeight+';ww:'+res.windowWidth+';wh:'+res.windowHeight
})
}
})
}
detail.vue:
methods: {
go_home(){
uni.showTabBar();
// #ifdef APP-PLUS
plus.screen.unlockOrientation(); //解除锁定屏幕方向
plus.screen.lockOrientation('portrait-primary');
// #endif
uni.reLaunch({
url:"../index/index"
})
},
首次进入首页弹窗内容如下:
sw:393;sh:857;ww:393;wh:807
进入详情页 点击首页后弹窗内容如下
sw:873;sh:393;ww:873;wh:343
很明显系统提前获取了错误的页面尺寸;
解决办法就呼之欲出了,我只需要保证在首页时候拿到正常的屏幕尺寸:
detail.vue
methods: {
go_home_real(){
uni.getSystemInfo({
success: (res) => {
if(res.screenWidth <= res.screenWidth) {
clearInterval(this.dingshiqi)
uni.reLaunch({
url:"../index/index"
})
}
}
})
},
go_home(){
uni.showTabBar();
// #ifdef APP-PLUS
plus.screen.unlockOrientation(); //解除锁定屏幕方向
plus.screen.lockOrientation('portrait-primary');
// #endif
this.dingshiqi = setInterval(this.go_home_real,300);//每隔0.3秒检测一次屏幕是否已经竖过来了 如果是就跳转
},
}
跳转时候做个检测
屏幕尺寸改变时候会触发onResize 也可以在这上面作文章;
data() {
return {
portraitUrl:'',
landScapeUrl:'',
}
},
onResize() {
let _this = this
uni.getSystemInfo({
success: function(res) {
if (res.windowWidth > res.windowHeight) {
if(_this.landScapeUrl) {
uni.reLaunch({
url:_this.landScapeUrl
})
}
} else {
if(_this.portraitUrl) {
uni.reLaunch({
url:_this.portraitUrl
})
}
}
}
})
},
methods: {
go_home(){
uni.showTabBar();
this.portraitUrl = '../index/index';
console.log("go_home")
// #ifdef APP-PLUS
plus.screen.unlockOrientation(); //解除锁定屏幕方向
plus.screen.lockOrientation('portrait-primary');
// #endif
console.log("go_home_end")
},
}
5 个评论
要回复文章请先登录或注册
1***@qq.com
kmq116
h***@leleketang.com
DcPaul (作者)
老王Plus