微信小程序适配原理我的理解

微信小程序适配原理我的理解

1.微信规定

小程序rpx单位自适应宽度,rpx单位并没有做到高度的适配。规定屏幕宽度为750rpx,在iphone6(375*667)中,750rpx=375px --> 1rpx=375/750=0.5px 另外1rpx在所有手机中占屏幕1/750;

2.100rpx在iphone6和iphoneXR中占各屏幕宽度和高度的百分比

通过纯计算来做

iphone6(375*667) 100rpx*0.5=50px 所以100rpx在iphone6中占屏幕宽度为 50px/375px=0.133333占屏幕高度为 50px/667px=0.074962

iphoneXR(414*896) 750rpx=414px–>1rpx=414/750=0.552px 100rpx*0.552=55.2px 所以100rpx在iphoneXR中占屏幕宽度为 55.2px/414px=0.1333333 占屏幕高度为55.2px/896px=0.061607

所以rpx单位实现了宽度自适应,高度并没有做到自适应

3.实现高度自适应的单位vh

vh为屏幕视口单位,对应还有vw,规定屏幕宽度为100vw,屏幕高度为100vh,1vh就是就占掉1/100。

给在iphone6中给定height=150px,问在iphoneXR中如何实现适配?

前面知道rpx单位不能实现高度自适应,所以rpx单位抛弃。故这里选择vh单位。在iphone6中,150px/667px是该高度占屏幕的百分比,故应在iphone6中将height=150px改为height=150px/667px*100vh即可实现适配。而在iphoneXR中,height=150/667*100vh ,而1vh为896/100px,实际的高度给定为150/667*100*(896/100)px=150*896/667px,占屏幕的百分比为150*896/667/896=150/667,与iphone6中占比一致,实现适配。

4.微信小程序顶部导航栏自定义,根据不同手机自适应距离状态栏高度

在app.json中添加"navigationStyle"=“custom” 自定义导航栏

"window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "Weixin",
    "navigationBarTextStyle":"black",
    "navigationStyle":"custom"
  },

通过js动态获取顶部状态栏高度,globalData中设置全局变量statusBarHeight存储

wx.getSystemInfo({
    sucess:(result)=>{
        this.globalData.statusBarHeight=result.statusBarHeight;
    }
})

在具体页面中获得全局变量statusBarHeight的值 如在index页面里,则在index.js中设置

data:{
    statusBarHeight:getApp().globalData.statusBarHeight,
}

在index.wxml中设置

<view class="statusBar" style="height:{{statusBarHeight}}px;"></view>
<view class="navbar" style="height:44px;">标题</view>

在index.wxss里设置 实现标题水平垂直居中

.navbar{
  width:200rpx;
  margin:0 auto;
  display:flex;
  justify-content: center;
  align-items: center;
}  

iphone6中效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SQa2PNo3-1605974067319)(C:\Users\椰菜\AppData\Roaming\Typora\typora-user-images\image-20201116010148005.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XWM41QRB-1605974067323)(C:\Users\椰菜\AppData\Roaming\Typora\typora-user-images\image-20201116005424455.png)]

iphoneXR中效果

image-20201116005518134

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-quvF2Ka4-1605974067326)(C:\Users\椰菜\AppData\Roaming\Typora\typora-user-images\image-20201116005555738.png)]

看一下iphone6中getSystemInfo里的内容

{errMsg: "getSystemInfo:ok", model: "iPhone 6/7/8", pixelRatio: 2, windowWidth: 375, windowHeight: 667,}
SDKVersion: "2.14.0"
batteryLevel: 100
benchmarkLevel: 1
brand: "devtools"
deviceOrientation: "portrait"
devicePixelRatio: 2
errMsg: "getSystemInfo:ok"
fontSizeSetting: 16
language: "zh_CN"
model: "iPhone 6/7/8"
pixelRatio: 2
platform: "devtools"
safeArea: {right: 375, bottom: 667, left: 0, top: 20, width: 375,}
screenHeight: 667
screenWidth: 375
statusBarHeight: 20
system: "iOS 10.0.1"
version: "7.0.4"
windowHeight: 667
windowWidth: 375
__proto__: Object

20
system: “iOS 10.0.1”
version: “7.0.4”
windowHeight: 667
windowWidth: 375
proto: Object















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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值