123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- // #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()
- }
- });
- };
|