You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
795 B
41 lines
795 B
const EPS = 1e-4
|
|
const BASE_DEVICE_WIDTH = 750
|
|
let isIOS = false
|
|
let deviceWidth = 0
|
|
let deviceDPR = 0
|
|
|
|
function checkDeviceWidth () {
|
|
const {
|
|
platform,
|
|
pixelRatio,
|
|
windowWidth
|
|
} = uni.getSystemInfoSync()
|
|
|
|
deviceWidth = windowWidth
|
|
deviceDPR = pixelRatio
|
|
isIOS = platform === 'ios'
|
|
}
|
|
|
|
export function upx2px (number, newDeviceWidth) {
|
|
if (deviceWidth === 0) {
|
|
checkDeviceWidth()
|
|
}
|
|
|
|
number = Number(number)
|
|
if (number === 0) {
|
|
return 0
|
|
}
|
|
let result = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth)
|
|
if (result < 0) {
|
|
result = -result
|
|
}
|
|
result = Math.floor(result + EPS)
|
|
if (result === 0) {
|
|
if (deviceDPR === 1 || !isIOS) {
|
|
result = 1
|
|
} else {
|
|
result = 0.5
|
|
}
|
|
}
|
|
return number < 0 ? -result : result
|
|
}
|
|
|