diff --git a/sheep/components/s-share-modal/canvas-poster/poster/user.js b/sheep/components/s-share-modal/canvas-poster/poster/user.js index 5c4d3b9693c3321fe8844ed78bc042d29b5bd317..aa73922e176a895f69ed180f54eee7e5c5ce4e33 100644 --- a/sheep/components/s-share-modal/canvas-poster/poster/user.js +++ b/sheep/components/s-share-modal/canvas-poster/poster/user.js @@ -1,10 +1,11 @@ import sheep from '@/sheep'; import { formatImageUrlProtocol, getWxaQrcode } from './index'; - +import { measureTextWidth } from '@/utils/textUtils'; // 引入新封装的方法 const user = async (poster) => { const width = poster.width; const userInfo = sheep.$store('user').userInfo; const wxa_qrcode = await getWxaQrcode(poster.shareInfo.path, poster.shareInfo.query); + const widthNickName = measureTextWidth(userInfo.nickname, 14); // 使用新方法 return [ { type: 'image', @@ -28,7 +29,7 @@ const user = async (poster) => { fontFamily: 'sans-serif', position: 'fixed', top: width * 0.4, - left: width / 2, + left: (width-widthNickName) / 2, }, }, { diff --git a/utils/textUtils.js b/utils/textUtils.js new file mode 100644 index 0000000000000000000000000000000000000000..f6231a0d32b3f04516f6612160869a5f3b22a07c --- /dev/null +++ b/utils/textUtils.js @@ -0,0 +1,34 @@ +// 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; +}