91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

微信小程序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

肃宁县| 大姚县| 旌德县| 常山县| 南木林县| 彝良县| 义乌市| 库车县| 汤原县| 阿合奇县| 青冈县| 开平市| 富源县| 屏东市| 蒲城县| 永济市| 阿城市| 太谷县| 临漳县| 双江| 吉木乃县| 镇巴县| 额敏县| 长宁县| 阜南县| 库伦旗| 富源县| 虞城县| 镇赉县| 朝阳县| 临沧市| 茌平县| 绥德县| 余干县| 中超| 福建省| 永登县| 集贤县| 兴海县| 珲春市| 得荣县|