H5端齐采药项目,uniapp框架
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.
 
 
 
 
 

75 lines
2.3 KiB

let windowWidth = uni.getSystemInfoSync().windowWidth
// uni-app@2.9起, 屏幕最多适配到960, 超出则按375计算
if (windowWidth > 960) windowWidth = 375
export const rpx2px = (value) => {
if (typeof value === 'string') value = Number(value.replace(/[a-z]*/g, ''))
return windowWidth / 750 * value
}
export const changeUnits = (value) => {
return Number(value.replace(/^(\-*[0-9.]*)([a-z%]*)$/, (value, num, unit) => {
switch (unit) {
case 'px':
num *= 1
break
case 'rpx':
num = rpx2px(num)
break
default:
num *= 1
break
}
return num
}))
}
let fsm
let tempImageFlag = 0
export const base64src = function(base64data) {
return new Promise((resolve, reject) => {
// 如果不是base64就直接返回路径
if (!/^data:image\/([a-z]+);base64,/.test(base64data)) return resolve(base64data)
const [, format, bodyData] = /data:image\/([a-z]+);base64,(.*)/.exec(base64data) || []
if (!format) return resolve(base64data)
const filePath = `${wx.env.USER_DATA_PATH}/lucky_${Date.now()}${tempImageFlag++}.${format}`
const buffer = wx.base64ToArrayBuffer(bodyData)
wx.getFileSystemManager().writeFile({
filePath,
data: buffer,
encoding: 'binary',
success: () => resolve(filePath),
fail: (res) => {
console.error('API `fsm.writeFile` 进入失败回调', {
errMsg: res.errMsg,
ArrayBuffer: buffer
})
reject(new Error('base64图片缓存失败'))
}
})
})
}
export const resolveImage = async (res, img, imgName = 'src', resolveName = '$resolve') => {
const src = img[imgName]
const $resolve = img[resolveName]
// #ifdef MP
// 如果是base64就调用base64src()方法把图片写入本地, 然后渲染临时路径
if (/^data:image\/([a-z]+);base64,/.test(src)) {
const path = await base64src(src)
$resolve({ ...res.detail, path })
return
}
// #endif
// 如果是本地图片, 直接返回
if (src.indexOf('http') !== 0) {
$resolve({ ...res.detail, path:src })
return
}
// 如果是网络图片, 则通过getImageInfo()方法获取图片宽高
uni.getImageInfo({
src: src,
success: (imgObj) => $resolve(imgObj),
fail: () => console.error('API `uni.getImageInfo` 加载图片失败', src)
})
}