提交 d3c52595 编写于 作者: Q qiang

feat: App、H5 端 CanvasContext.measureText 支持异步返回数据

上级 f278040d
......@@ -17,16 +17,6 @@ import {
const canvasEventCallbacks = createCallbacks('canvasEvent')
UniServiceJSBridge.subscribe('onDrawCanvas', ({
callbackId,
data
}) => {
const callback = canvasEventCallbacks.pop(callbackId)
if (callback) {
callback(data)
}
})
UniServiceJSBridge.subscribe('onCanvasMethodCallback', ({
callbackId,
data
......@@ -342,14 +332,32 @@ export class CanvasContext {
}
}
// TODO
measureText (text) {
if (typeof document === 'object') {
var c2d = getTempCanvas().getContext('2d')
c2d.font = this.state.font
return new TextMetrics(c2d.measureText(text).width || 0)
measureText (text, callback) {
const font = this.state.font
if (__PLATFORM__ === 'h5') {
const canvas = getTempCanvas()
const c2d = canvas.getContext('2d')
c2d.font = font
const textMetrics = new TextMetrics(c2d.measureText(text).width || 0)
if (typeof callback === 'function') {
setTimeout(() => callback(textMetrics), 0)
}
return textMetrics
} else {
return new TextMetrics(0)
const textMetrics = new TextMetrics(0)
if (typeof callback === 'function') {
const callbackId = canvasEventCallbacks.push(function ({ width }) {
callback(new TextMetrics(width))
})
operateCanvas(this.id, this.pageId, 'measureText', {
text,
font,
callbackId
})
} else {
console.error('warning: measureText missing required arguments: callback')
}
return textMetrics
}
}
......
......@@ -272,7 +272,7 @@ export default {
}
}
if (!this.actionsWaiting && callbackId) {
UniViewJSBridge.publishHandler('onDrawCanvas', {
UniViewJSBridge.publishHandler('onCanvasMethodCallback', {
callbackId,
data: {
errMsg: 'drawCanvas:ok'
......@@ -280,6 +280,22 @@ export default {
}, this.$page.id)
}
},
measureText ({
text,
font,
callbackId
}) {
const canvas = getTempCanvas()
const c2d = canvas.getContext('2d')
c2d.font = font
UniViewJSBridge.publishHandler('onCanvasMethodCallback', {
callbackId,
data: {
errMsg: 'measureText:ok',
width: c2d.measureText(text).width || 0
}
}, this.$page.id)
},
preloadImage: function (actions) {
var self = this
actions.forEach(function (action) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册