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.
145 lines
3.2 KiB
145 lines
3.2 KiB
// #ifndef APP-NVUE |
|
// 计算版本 |
|
export function compareVersion(v1, v2) { |
|
v1 = v1.split('.') |
|
v2 = v2.split('.') |
|
const len = Math.max(v1.length, v2.length) |
|
while (v1.length < len) { |
|
v1.push('0') |
|
} |
|
while (v2.length < len) { |
|
v2.push('0') |
|
} |
|
for (let i = 0; i < len; i++) { |
|
const num1 = parseInt(v1[i], 10) |
|
const num2 = parseInt(v2[i], 10) |
|
|
|
if (num1 > num2) { |
|
return 1 |
|
} else if (num1 < num2) { |
|
return -1 |
|
} |
|
} |
|
return 0 |
|
} |
|
const systemInfo = uni.getSystemInfoSync(); |
|
|
|
function gte(version) { |
|
// 截止 2023-03-22 mac pc小程序不支持 canvas 2d |
|
let { |
|
SDKVersion, |
|
platform |
|
} = systemInfo; |
|
// #ifdef MP-ALIPAY |
|
SDKVersion = my.SDKVersion |
|
// #endif |
|
// #ifdef MP-WEIXIN |
|
return platform !== 'mac' && compareVersion(SDKVersion, version) >= 0; |
|
// #endif |
|
return compareVersion(SDKVersion, version) >= 0; |
|
} |
|
|
|
|
|
export function canIUseCanvas2d() { |
|
// #ifdef MP-WEIXIN |
|
return gte('2.9.0'); |
|
// #endif |
|
// #ifdef MP-ALIPAY |
|
return gte('2.7.0'); |
|
// #endif |
|
// #ifdef MP-TOUTIAO |
|
return gte('1.78.0'); |
|
// #endif |
|
return false |
|
} |
|
|
|
export function convertTouchesToArray(touches) { |
|
// 如果 touches 是一个数组,则直接返回它 |
|
if (Array.isArray(touches)) { |
|
return touches; |
|
} |
|
// 如果touches是一个对象,则转换为数组 |
|
if (typeof touches === 'object' && touches !== null) { |
|
return Object.values(touches); |
|
} |
|
// 对于其他类型,直接返回它 |
|
return touches; |
|
} |
|
|
|
export function wrapTouch(event) { |
|
for (let i = 0; i < event.touches.length; ++i) { |
|
const touch = event.touches[i]; |
|
touch.offsetX = touch.x; |
|
touch.offsetY = touch.y; |
|
} |
|
return event; |
|
} |
|
export const devicePixelRatio = uni.getSystemInfoSync().pixelRatio |
|
// #endif |
|
// #ifdef APP-NVUE |
|
export function base64ToPath(base64) { |
|
return new Promise((resolve, reject) => { |
|
const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64) || []; |
|
const bitmap = new plus.nativeObj.Bitmap('bitmap' + Date.now()) |
|
bitmap.loadBase64Data(base64, () => { |
|
if (!format) { |
|
reject(new Error('ERROR_BASE64SRC_PARSE')) |
|
} |
|
const time = new Date().getTime(); |
|
const filePath = `_doc/uniapp_temp/${time}.${format}` |
|
|
|
bitmap.save(filePath, {}, |
|
() => { |
|
bitmap.clear() |
|
resolve(filePath) |
|
}, |
|
(error) => { |
|
bitmap.clear() |
|
console.error(`${JSON.stringify(error)}`) |
|
reject(error) |
|
}) |
|
}, (error) => { |
|
bitmap.clear() |
|
console.error(`${JSON.stringify(error)}`) |
|
reject(error) |
|
}) |
|
}) |
|
} |
|
// #endif |
|
|
|
|
|
export function sleep(time) { |
|
return new Promise((resolve) => { |
|
setTimeout(() => { |
|
resolve(true) |
|
}, time) |
|
}) |
|
} |
|
|
|
|
|
export function getRect(selector, options = {}) { |
|
const typeDefault = 'boundingClientRect' |
|
const { |
|
context, |
|
type = typeDefault |
|
} = options |
|
return new Promise((resolve, reject) => { |
|
const dom = uni.createSelectorQuery().in(context).select(selector); |
|
const result = (rect) => { |
|
if (rect) { |
|
resolve(rect) |
|
} else { |
|
reject() |
|
} |
|
} |
|
if (type == typeDefault) { |
|
dom[type](result).exec() |
|
} else { |
|
dom[type]({ |
|
node: true, |
|
size: true, |
|
rect: true |
|
}, result).exec() |
|
} |
|
}); |
|
}; |