中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信小程序canvas如何使用

發布時間:2022-09-28 09:51:22 來源:億速云 閱讀:199 作者:iii 欄目:開發技術

本篇內容介紹了“微信小程序canvas如何使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

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
    })
  },

“微信小程序canvas如何使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

澄迈县| 松江区| 阿合奇县| 铜山县| 莆田市| 喀什市| 通化市| 霍林郭勒市| 巴东县| 麻城市| 普陀区| 民勤县| 花莲市| 鄂州市| 灵丘县| 三台县| 靖州| 长宁区| 分宜县| 汉阴县| 木兰县| 鹿邑县| 连南| 永胜县| 洛南县| 和政县| 大连市| 扎兰屯市| 宜春市| 广德县| 桐城市| 深水埗区| 庄河市| 泾源县| 宜良县| 平武县| 合肥市| 玛曲县| 政和县| 雅安市| 梨树县|