<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      微信小程序 canvas 手寫簽名(2d)

      canvas 2d 目前支持預覽,不支持真機調試

      index.wxml

      <canvas type="2d" id="canvas" bindtouchmove="move" bindtouchstart="start"  binderror="error" style="width:{{width}}px;height:{{height}}px;"></canvas>
      <view class="btn">
        <button bindtap="clearClick">重簽</button>
        <button bindtap="saveClick">完成簽名</button>
      </view>

      index.wxss

      page {
        background-color: #e9f2f1;
      }
      .btn {
        display: flex;
        flex-direction: row;
        justify-self: baseline;
        margin: 15rpx;
      
      }
      .btn button:first-child {
        color: #3fa89a;
      }
      .btn button:last-child {
        color: white;
        background-color: #3fa89a;
      }
      button {
        width: 200rpx;
        border-radius: 5rpx;
        box-shadow: 0px 0px 1px 1px #c5c5c5;
      }
      canvas {
        background-color: white;
      }

      index.json

      {
        "usingComponents": {},
        "pageOrientation": "landscape",
        "navigationBarBackgroundColor":"#3fa89a",
        "navigationBarTextStyle":"white",
        "navigationBarTitleText":"手寫簽名"
      }

       index.js

      const app = getApp()
      Page({
        data: {
          canvas: '',
          ctx: '',
          pr:0,
          width: 0,
          height: 0,
          first:true,
        },
        start(e) {
          if(this.data.first){
            this.clearClick();
            this.setData({first:false})
          }
          this.data.ctx.beginPath(); // 開始創建一個路徑,如果不調用該方法,最后無法清除畫布
          this.data.ctx.moveTo(e.changedTouches[0].x, e.changedTouches[0].y) // 把路徑移動到畫布中的指定點,不創建線條。用 stroke 方法來畫線條
        },
        move(e) {
          this.data.ctx.lineTo(e.changedTouches[0].x, e.changedTouches[0].y) // 增加一個新點,然后創建一條從上次指定點到目標點的線。用 stroke 方法來畫線條
          this.data.ctx.stroke()
        },
        error: function (e) {
          console.log("畫布觸摸錯誤" + e);
        },
        /**
        * 生命周期函數--監聽頁面加載
        */
        onLoad: function () {
          this.getSystemInfo()
          this.createCanvas()
        },
        /**
         * 初始化
         */
        createCanvas() {
          const pr = this.data.pr; // 像素比
          const query = wx.createSelectorQuery();
          query.select('#canvas').fields({ node: true, size: true }).exec((res) => {
            const canvas = res[0].node;
            const ctx = canvas.getContext('2d');
            canvas.width = this.data.width*pr; // 畫布寬度
            canvas.height = this.data.height*pr; // 畫布高度
            ctx.scale(pr,pr); // 縮放比
            ctx.lineGap = 'round';
            ctx.lineJoin = 'round';
            ctx.lineWidth = 4; // 字體粗細
            ctx.font = '40px Arial'; // 字體大小,
            ctx.fillStyle = '#ecf0ef'; // 填充顏色
            ctx.fillText('簽名區', res[0].width / 2 - 60, res[0].height / 2)
            this.setData({ ctx, canvas })
          })
        },
        // 獲取系統信息
        getSystemInfo() {
          let that = this;
          wx.getSystemInfo({
            success(res) {
              that.setData({
                pr:res.pixelRatio,
                width: res.windowWidth,
                height: res.windowHeight - 75,
              })
            }
          })
        },
        clearClick: function () {
          //清除畫布
          this.data.ctx.clearRect(0, 0, this.data.width, this.data.height);
        },
        //保存圖片
        saveClick: function () {
          wx.canvasToTempFilePath({
            x: 0,
            y: 0,
            width: this.data.width,
            height: this.data.height,
            destWidth:this.data.width*this.data.pr,
            destHeight: this.data.height*this.data.pr,
            canvasId: 'canvas',
            canvas: this.data.canvas,
            fileType: 'png',
            success(res) {
              wx.saveImageToPhotosAlbum({
                filePath: res.tempFilePath,
                success(res) {
                  wx.showToast({
                    title: '保存成功',
                    icon: 'success'
                  })
                }
              })
            }
          })
        }
      })

       

       效果圖

       

      簽名效果

       

      PNG圖

       

       

       

       

       代碼地址

      posted @ 2021-09-12 09:25  天葬  閱讀(2647)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 福利一区二区1000| 嫩草欧美曰韩国产大片| 亚洲日韩国产二区无码| 国精品午夜福利视频| 国产精品欧美亚洲韩国日本久久| 久久波多野结衣av| 99精品国产一区二区三| 久久99九九精品久久久久蜜桃| 日韩有码中文在线观看| 亚洲女女女同性video| 动漫av网站免费观看| 激情六月丁香婷婷四房播| 欧美成人精品一级在线观看| 国产激情一区二区三区午夜| 国产精品久久久久免费观看| а∨天堂一区中文字幕| 狠狠人妻久久久久久综合九色| 亚洲av影院一区二区三区| 成av人片一区二区久久| 日日碰狠狠躁久久躁综合小说 | 性色在线视频精品| 亚洲免费成人av一区| 嗯灬啊灬把腿张开灬动态图| 97人妻无码一区| 国产午夜精品福利91| 无码粉嫩虎白一线天在线观看| 九九热精品视频在线免费| 日韩精品卡一卡二卡三卡四| 99无码中文字幕视频| 亚洲人妻一区二区精品| 加勒比无码人妻东京热| 东方av四虎在线观看| 午夜高清福利在线观看| 久久天天躁夜夜躁狠狠85| 国产初高中生在线视频| 国内精品免费久久久久电影院97| 国产AV大陆精品一区二区三区| av天堂亚洲天堂亚洲天堂| 久久亚洲精品情侣| 久久久久青草线综合超碰| 国产精品 亚洲一区二区三区|