|
// @ts-nocheck
|
import type { ComponentInternalInstance } from '@/uni_modules/lime-shared/vue'
|
import { getRect } from '@/uni_modules/lime-shared/getRect'
|
import { canIUseCanvas2d } from '@/uni_modules/lime-shared/canIUseCanvas2d'
|
export const isCanvas2d = canIUseCanvas2d()
|
|
export async function getCanvas(canvasId: string, options: {context: ComponentInternalInstance}) {
|
let { context } = options
|
// #ifdef MP || VUE2
|
if (context.proxy) context = context.proxy
|
// #endif
|
return getRect('#' + canvasId, context, isCanvas2d).then(res => {
|
if(res.node){
|
return res.node
|
} else {
|
const ctx = uni.createCanvasContext(canvasId, context)
|
return {
|
getContext(type: string) {
|
if(type == '2d') {
|
return ctx
|
}
|
},
|
width: res.width,
|
height: res.height,
|
}
|
// #ifdef H5
|
// canvas.value = context.proxy.$el.querySelector('#'+ canvasId)
|
// #endif
|
}
|
})
|
}
|
|
// #ifndef H5 || APP-NVUE
|
class Image {
|
currentSrc: string | null = null
|
naturalHeight: number = 0
|
naturalWidth: number = 0
|
width: number = 0
|
height: number = 0
|
tagName: string = 'IMG'
|
path: any = ''
|
crossOrigin: any = ''
|
referrerPolicy: any = ''
|
onload: () => void
|
onerror: () => void
|
constructor() {}
|
set src(src) {
|
this.currentSrc = src
|
uni.getImageInfo({
|
src,
|
success: (res) => {
|
this.path = res.path
|
this.naturalWidth = this.width = res.width
|
this.naturalHeight = this.height = res.height
|
this.onload()
|
},
|
fail: () => {
|
this.onerror()
|
}
|
})
|
}
|
get src() {
|
return this.currentSrc
|
}
|
}
|
// #endif
|
|
export function createImage(canvas: WechatMiniprogram.Canvas) {
|
if(canvas && canvas.createImage) {
|
return canvas.createImage()
|
} else if(typeof window != 'undefined' && window.Image) {
|
return new window.Image()
|
}
|
// #ifndef H5 || APP-NVUE
|
return new Image()
|
// #endif
|
}
|