<i id="nph9l"><b id="nph9l"><del id="nph9l"></del></b></i>

            專注Java教育13年 全國咨詢/投訴熱線:400-8080-105
            動力節點LOGO圖
            始于2009,一家只教授Java的培訓機構
            首頁 hot資訊 關于微信小程序canvas的使用

            關于微信小程序canvas的使用

            更新時間:2022-09-28 08:35:20 來源:動力節點 瀏覽18次

            canvas簡單理解成一張可以自定義大小(有上限)的畫布,在畫布上可以寫字,畫圖形,放置圖片。一般可以用來動態生成截圖,方便用戶保存和轉發。

            page.wxml

            頁面canvas被隱藏了

            <!--畫出試卷內容,通過css(position:fixed; left:100%;)隱藏canvas-->
            <!--A4是2480*3508象素 210*297毫米-->
            <canvas
              wx:if="{{page==4}}"
              type="2d"
              id="canvas"
              style="width:750rpx; height:1050rpx; position:fixed; left:100%;"
            ></canvas>

            page.js

            通過 onCanvas 事件開始繪制畫布內容

            每繪制完成一頁,通過 wx.canvasToTempFilePath 保存圖片到本地

            全部繪制完成,通過 wx.previewImage 進行圖片預覽

              // 初始化canvas
              onCanvas: function (e) {
                // 繪制完成直接顯示
                if(this.data.drawFinish) {
                  this.previewPapers()
                  return
                }
                wx.showLoading({
                  title: '試卷轉圖片中',
                })
                const query = wx.createSelectorQuery()
                query.select('#canvas')
                  .fields({ node: true, size: true })
                  .exec((res) => {
                    const canvas = res[0].node
                    const ctx = canvas.getContext('2d')
                    const dpr = wx.getSystemInfoSync().pixelRatio
                    canvas.width = res[0].width * dpr
                    canvas.height = res[0].height * dpr
                    console.log('canvas.width, canvas.height', canvas.width, canvas.height)
                    ctx.scale(dpr, dpr)
                    // 繪制記憶卷
                    this.drawMemoryPaperImage(canvas, ctx)
                  })
              },
              // 繪制記憶卷
              drawMemoryPaperImage(canvas, ctx) {
                // 獲取記憶卷數據
                let memoryList = this.data.memoryList
                // 繪制一頁記憶卷(繪制第一頁)
                let oneMemoryPaper = memoryList[0]
                let currentIndex = 0 // 0-表示繪制保存第一頁數據
                let totalPages = memoryList.length
                this.drawOneMemoryPaperImage(canvas, ctx, oneMemoryPaper, currentIndex, totalPages)
              },
              // 繪制一頁記憶卷
              drawOneMemoryPaperImage(canvas, ctx, oneMemoryPaper, currentIndex, totalPages) {
                let maxWidth = 750    
                let pg = oneMemoryPaper
                // 繪制前清空canvas
                ctx.clearRect(0, 0, canvas.width, canvas.height)
                // 繪制標題
                ctx.font = '18px sans-serif'
                ctx.textAlign = 'center';
                ctx.fillText('快速數字記憶卷', 375, 70, maxWidth )
                for(let j=0; j<pg.length; j++) {
                  let row = pg[j]
                  for(let k=0; k<row.length; k++) {
                    let text = pg[j][k]
                    let x = k * 17 + 40
                    let y = j * 35 + 150
                    // 繪制數字
                    ctx.font = '14px sans-serif'
                    ctx.textAlign = 'left';
                    ctx.fillText(text, x, y, maxWidth )
                    // 繪制行號
                    if(k==39) {
                      let rowNo = 'Row ' + (j<9?'0'+(j+1):(j+1))           
                      ctx.fillText(rowNo, x+25, y, maxWidth )
                    }
                  }
                }
                // 繪制頁碼
                ctx.font = '18px sans-serif'
                ctx.textAlign = 'center';
                ctx.fillText('第 '+(currentIndex+1)+' 頁', 375, 1050, maxWidth )
                // 保存試卷到小程序臨時目錄
                let paper = 'paper.memoryPaper['+currentIndex+']'
                this.saveToTempFilePath(canvas, ctx, paper, currentIndex, totalPages)
              },
              
              // 保存繪制的試卷到小程序臨時目錄
              saveToTempFilePath(canvas, ctx, paper, currentIndex, totalPages) {
                var that = this
                wx.canvasToTempFilePath({
                  canvas: canvas,
                  success(res) {
                    that.setData({ 
                      [paper]: res.tempFilePath,
                    })
                    // 繪制下一頁數據
                    let nextIndex = currentIndex + 1
                    if(nextIndex < totalPages) {
                      that.drawNextOneMemoryPaperImage(canvas, ctx, nextIndex, totalPages)
                    }else {
                      // 記憶卷全部繪制完成
                      that.setData({ drawFinish:true })
                      wx.hideLoading({
                        success: (res) => {
                          console.log('記憶卷全部繪制完成')
                        },
                      })
                      that.previewPapers()
                    }
                  },
                  fail(err) {
                    console.log(err)
                  }
                })
              },
              // 繪制下一頁數據
              drawNextOneMemoryPaperImage(canvas, ctx, nextIndex, totalPages) {
                // 獲取記憶卷數據
                let memoryList = this.data.memoryList
                let currentIndex = nextIndex
                let oneMemoryPaper = memoryList[nextIndex]
                this.drawOneMemoryPaperImage(canvas, ctx, oneMemoryPaper, currentIndex, totalPages)    
              },
              // 預覽試卷
              previewPapers() {
                let paper = this.data.paper
                wx.previewImage({
                  current: paper.memoryPaper[0],
                  urls: paper.memoryPaper
                })
              },

             

            提交申請后,顧問老師會電話與您溝通安排學習

            免費課程推薦 >>
            技術文檔推薦 >>
            返回頂部
            欧美系列A片

                <i id="nph9l"><b id="nph9l"><del id="nph9l"></del></b></i>