亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

微信小程序的canvas如何使用

發布時間:2022-09-30 17:04:16 來源:億速云 閱讀:213 作者:iii 欄目:web開發

這篇文章主要介紹了微信小程序的canvas如何使用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇微信小程序的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如何使用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“微信小程序的canvas如何使用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

象州县| 齐齐哈尔市| 腾冲县| 黄龙县| 肃南| 永丰县| 焦作市| 南和县| 沁水县| 施甸县| 湖北省| 黄陵县| 长汀县| 丰都县| 武城县| 砚山县| 甘孜| 昌图县| 莆田市| 师宗县| 凤翔县| 阳城县| 收藏| 东港市| 古交市| 克东县| 开鲁县| 海兴县| 葵青区| 崇文区| 高阳县| 鹤庆县| 慈利县| 龙井市| 逊克县| 桐梓县| 嘉定区| 江安县| 抚顺县| 资中县| 清水县|