uniapp在微信小程序中動態(tài)繪制canvas寬高

1.假設寬100%,高1200rpx,通過query.select('#myCanvas').boundingClientRect接口獲取元素寬高,動態(tài)賦值

<template>
   <canvas canvas-id="myCanvas" id="myCanvas" style="width: 100%; height: 1200rpx"></canvas>
</template>
<script setup lang="ts">
const init = ()=>{
 const ctx = uni.createCanvasContext('myCanvas')
 const query = uni.createSelectorQuery()
  query
    .select('#myCanvas')
    .boundingClientRect((data: any) => {
      console.log(data)
      // 繪制底圖
      uni.getImageInfo({
        src: mock.value?.backgroundImageUrl, //底部圖片
        success: (res) => {
          ctx.drawImage(res.path, 0, 0, data?.width, data?.height) // 假設canvas大小為375x667

          ctx.setFontSize(18)
          ctx.setFillStyle('white')
          ctx.fillText(mock.value?.name, 20, data?.height - 80) // 調(diào)整文字位置
          // 繪制左下角文字
          ctx.setFontSize(14)
          ctx.setFillStyle('white')
          ctx.fillText(mock.value?.text, 20, data?.height - 60) // 調(diào)整文字位置
          // 繪制左下角文字
          ctx.setFontSize(12)
          ctx.setFillStyle('white')
          ctx.fillText(mock.value?.tip, 40, data?.height - 35) // 調(diào)整文字位置

          // 繪制右下角二維碼
          uni.getImageInfo({
            src: mock.value?.qrCodeImageUrl,
            success: (qrRes) => {
              ctx.drawImage(qrRes.path, data?.width - 104, data?.height - 104, 84, 84) // 調(diào)整二維碼位置、大小和圓角
              ctx.draw(false, () => {
                // 繪制完成后的回調(diào),可以在這里做其他事情,比如更新頁面狀態(tài)
              })
            },
            fail: (err) => {
              console.error('加載二維碼圖片失敗:', err)
            },
          })
        },
        fail: (err) => {
          console.error('加載底圖失敗:', err)
        },
      })
    })
    .exec()
}
onReady(()=>{
   init()
})
</script>
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容