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

溫馨提示×

溫馨提示×

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

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

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

浑源县| 大埔县| 客服| 子洲县| 绥德县| 元朗区| 平陆县| 克什克腾旗| 舟山市| 萝北县| 神木县| 沁阳市| 阜新市| 丹寨县| 东乌珠穆沁旗| 天津市| 加查县| 鹰潭市| 海原县| 寿光市| 柳州市| 新龙县| 寻甸| 芷江| 和政县| 曲靖市| 娄底市| 定南县| 新闻| 什邡市| 徐汇区| 葫芦岛市| 泾源县| 岳池县| 科技| 沅江市| 门头沟区| 黔江区| 敦煌市| 天长市| 湘潭县|