You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
// sheep/utils/textUtils.js
export function measureTextWidth ( text , fontSize = 14 , fontFamily = 'sans-serif' ) {
// 钉钉小程序没有 uni.createCanvasContext 方法
if ( typeof uni === 'undefined' || typeof uni . createCanvasContext !== 'function' ) {
return estimateTextWidth ( text , fontSize ) ;
}
try {
const ctx = uni . createCanvasContext ( 'tempCanvasForText' ) ;
ctx . setFontSize ( fontSize ) ;
ctx . font = ` ${ fontSize } px ${ fontFamily } ` ;
const metrics = ctx . measureText ( text ) ;
return metrics . width ;
} catch ( e ) {
// 某些平台可能不支持 measureText, 降级使用估算
return estimateTextWidth ( text , fontSize ) ;
}
}
// 简单估算中文和英文字符宽度
function estimateTextWidth ( text , fontSize = 14 ) {
let width = 0 ;
for ( let i = 0 ; i < text . length ; i ++ ) {
const charCode = text . charCodeAt ( i ) ;
if ( charCode >= 0x4e00 && charCode <= 0x9fff ) {
// 中文字符
width += fontSize ;
} else {
// 英文字符
width += fontSize * 0.5 ;
}
}
return width ;
}