国产精品爱久久久久久久小说,女人扒开腿让男人桶到爽 ,亚洲欧美国产双大乳头,国产成人精品综合久久久久,国产精品制服丝袜无码,免费无码精品黄av电影,黑色丝袜无码中中文字幕,乱熟女高潮一区二区在线

    微信小程序--實(shí)現(xiàn)canvas繪圖并且可以復(fù)盤回看

    2019-6-24    seo達(dá)人

    如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請點(diǎn)這里

    目錄結(jié)構(gòu):



    index.wxml:

    <view class="canvasBox">
      <canvas canvas-id="myCanvas" class="myCanvas" catchtouchstart='canvasStart' catchtouchmove='canvasMoving'></canvas>
    </view>
    <view class="btn">
      <button type="warn" bindtap='drawPen'>畫筆</button>
      <button type="primary" bindtap='clearCanvas'>清空畫板</button>
      <button type="warn" bindtap='clearLine'>橡皮擦</button>
      <button style='background:#000;color:#fff;' bindtap="black">黑色</button>
      <button style='background:yellow;color:#000;' bindtap="yellow">黃色</button>
      <button style='background:red;color:#fff;' bindtap="red">紅色</button>
      <button style='background:blue;color:#fff;' bindtap="blue">藍(lán)色</button>
      <button style='background:green;color:#fff;' bindtap="green">綠色</button>
      <button type="warn" bindtap="startRecording">開始錄制</button>
      <button type="primary" bindtap='rePlay'>復(fù)盤</button>
      <button></button>
    </view>
    index.wxss:

    .canvasBox{
      position: relative;
      top:0;
      left:0;
      width: 750rpx;
      height:800rpx;
      background:#eee;
    }
    .canvasBox .myCanvas{
      width: 100%;
      height:100%;
      position: absolute;
      top:0;
      left:0;
    }
     
    .btn{
      width: 750rpx;
      display: flex;
      justify-content: space-between;
      flex-wrap: wrap;
    }
    .btn button{
      width: 180rpx;
      font-size: 24rpx;
    }
    index.js:

    //index.js
    //獲取應(yīng)用實(shí)例
    import {hisData} from "../../utils/historyOperation.js";
    const app = getApp()
    var moveToX = 0, moveToY = 0, lineToX = 0, lineToY = 0;
    var context = null;
    var isStart = false;
    var date;
    var startDate;//開始時(shí)刻
    var penType = "drawPen";
    var colorStr = "#000";
    var operationType = "mapping";
    Page({
      data: {
        
      },
      
      canvasStart:function(e){
        var x = Math.floor(e.touches[0].clientX);
        var y = Math.floor(e.touches[0].clientY);
        date = new Date();
        moveToX = x;
        moveToY = y;
        operationType = "mapping";
        if(penType === "clearPen"){
          operationType = "clearLine";
        }
        if (isStart) {
          hisData.hisDataArr.push({
            time: date.getTime() - startDate,
            operation: operationType,
            lineArr: {
              startX: moveToX,
              startY: moveToY,
              currentX: x,
              currentY: y,
              z: 1,
              colorStr:colorStr
            }
          })
        }
      },
      //繪制線條
      canvasMoving:function(e){
        date = new Date();
        var x = Math.floor(e.changedTouches[0].clientX);
        var y = Math.floor(e.changedTouches[0].clientY);
        lineToX = x;
        lineToY = y;
        if(penType === "clearPen"){
          operationType = "clearLine";
          context.clearRect(x-12, y-12, 24, 24);
          context.draw(true);
        }else{
          operationType = "mapping";
          context.setStrokeStyle(colorStr);
          context.moveTo(moveToX, moveToY);
          context.lineTo(lineToX, lineToY);
        }
        if (isStart) {
          hisData.hisDataArr.push({
            time: date.getTime() - startDate,
            operation: operationType,
            lineArr: {
              startX: moveToX,
              startY: moveToY,
              currentX: lineToX,
              currentY: lineToY,
              z: 1,
              colorStr: colorStr
            }
          })
        }
        moveToX = lineToX;
        moveToY = lineToY;
        context.stroke();
        context.draw(true);
      },
      
      clearCanvas:function(){
        context.clearRect(0,0,375,400);
        context.draw(true);
        date = new Date();//記錄當(dāng)前操作時(shí)刻
        operationType = "clearCanvas";
        if(isStart){
          hisData.hisDataArr.push({
            time: date.getTime() - startDate,
            operation: operationType,
            lineArr: {
              startX: -1,
              startY: -1,
              currentX: -1,
              currentY: -1,
              z: 0,
              colorStr: colorStr
            }
          })
        }
      },
      
      drawPen:function(){
        penType = "drawPen";
      },
      clearLine:function(){
        penType = "clearPen";
      },
      black:function(){
        colorStr = "#000";
      },
      yellow: function () {
        colorStr = "yellow";
      },
      red: function () {
        colorStr = "red";
      },
      blue: function () {
        colorStr = "blue";
      },
      green: function () {
        colorStr = "green";
      },
      startRecording:function(){
        isStart = true;
        date = new Date();
        startDate = date.getTime();
      },
      rePlay:function(){
        wx.navigateTo({
          url: '../replay/replay',
        })
      },
      onLoad: function () {
        isStart = false;
        context = wx.createCanvasContext('myCanvas');
        context.beginPath();
        context.setStrokeStyle('#000');
        context.setLineWidth(5);
        context.setLineCap('round');
        context.setLineJoin('round');
      }
    })
    historyOperation.js:該文件用來保存歷史操作,以便復(fù)盤

    const hisData = {
      hisDataArr:[
        {
          time:0,//操作時(shí)間
          /**
           * 操作類型
           * 繪圖:mapping
           * 拖動(dòng)球員:moveplayer
           * 清除畫布:clearCanvas
           * 橡皮擦:clearLine
           */
          operation:"mapping",//操作類型
          /**
           * 繪制路徑
           * startX:開始x坐標(biāo)
           * startY:開y縱坐標(biāo)
           * currentX:目標(biāo)位置的 x 坐標(biāo)
           * currentY:目標(biāo)位置的 y 坐標(biāo)
           * z:1代表畫線時(shí)鼠標(biāo)處于move狀態(tài),0代表處于松開狀態(tài)
           * colorStr:線的填充顏色
           */
          lineArr: {    //繪制路徑
            startX:0,
            startY:0,
            currentX:0,
            currentY:0,
            z:0,
            colorStr:"#000"
          }
        }
      ]
    };
     
    export {hisData};
    復(fù)盤:

    reply.wxml:

    <!--pages/replay/replay.wxml-->
    <view class="replayBox">
      <canvas canvas-id='myCanvas' class="myCanvas"></canvas>
    </view>
    <button type="warn" bindtap="start">開始</button>
    reply.wxss:

    /* pages/replay/replay.wxss */
    .replayBox{
      position:relative;
      width: 750rpx;
      height:800rpx;
      background: #eee;
    }
     
    .replayBox .myCanvas{
      position: absolute;
      top:0;
      left:0;
      width:100%;
      height:100%;
    }
     
    reply.js:

    // pages/replay/replay.js
    import {hisData} from "../../utils/historyOperation.js";
    var startDate;
    var date;
    var curTime;
    var context = null;
    var timer = null;
    Page({
     
      /**
       * 頁面的初始數(shù)據(jù)
       */
      data: {
     
      },
      start:function(){
        context.clearRect(0, 0, 375, 400);
        clearInterval(timer);
        date = new Date();
        startDate = date.getTime();
        var i = 0;
        var that = this;
        var len = hisData.hisDataArr.length;
        timer = setInterval(function(){
          date = new Date();
          curTime = date.getTime() - startDate;
          if (curTime >= hisData.hisDataArr[i].time){
            switch (hisData.hisDataArr[i].operation) {
              case "mapping":
                context.setStrokeStyle(hisData.hisDataArr[i].lineArr.colorStr);
                context.moveTo(hisData.hisDataArr[i].lineArr.startX, hisData.hisDataArr[i].lineArr.startY);
                context.lineTo(hisData.hisDataArr[i].lineArr.currentX, hisData.hisDataArr[i].lineArr.currentY);
                context.stroke();
                context.draw(true);
                break;
              case "clearCanvas":
                context.clearRect(0, 0, 375, 400);
                context.draw(true);
                break;
              case "clearLine":
                context.clearRect(hisData.hisDataArr[i].lineArr.currentX-12, hisData.hisDataArr[i].lineArr.currentY-12, 24, 24);
                context.draw(true);
                break;
            }
            i++;
          }
          if(i >= len){
            clearInterval(timer);
          }
        },2);
      },
      /**
       * 生命周期函數(shù)--監(jiān)聽頁面加載
       */
      onLoad: function (options) {
        context = wx.createCanvasContext('myCanvas');
        context.beginPath();
        context.setStrokeStyle('#000');
        context.setLineWidth(3);
        context.setLineCap('round');
        context.setLineJoin('round');
      }
    })
    藍(lán)藍(lán)設(shè)計(jì)m.dzxscac.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、網(wǎng)站建設(shè) 平面設(shè)計(jì)服務(wù)。

    日歷

    鏈接

    個(gè)人資料

    存檔

    主站蜘蛛池模板: 国产末成年av在线播放| 亚洲福利视频网| 国产精品午夜精品福利| 性刺激的欧美三级视频中文字幕| 爱爱91| 国产亚洲欧美一区二区三区| 99精品国产一区二区三区2021 | 国产娇喘喷水呻吟在线观看| 国精品人妻无码一区二区三区喝尿| 亚洲鸥美日韩精品久久| 日韩精品无码一区二区三区视频| 91玉足脚交嫩脚丫在线播放| 亚洲人交配视频| 精品熟人妻一区二区三区四区不卡| 欧美 另类 国产 第一页| 日本激情网站| 亚洲免费色| 超碰免费公开| 国产午夜福利精品久久2021| 网址av| 欧美高清视频一区二区三区| 国语自产少妇精品视频| 亚洲红杏成在人线免费视频| 日韩伦理一区二区| 日本黄页网站免费大全| 欧美性videos高清精品| 国产成人亚洲综合图区| 亚洲综合五月| www.天天操.com| 中文成人无码精品久久久| 奇米影视7777狠狠狠狠影视| 夫の上司に犯波多野结衣853| hs视频在线观看| 搡老熟女国产| 久久久久久国产精品mv| 免费性视频| 一级片视频播放| 成人区人妻精品一区二区不卡视频 | 久久久久久9999| 中文字幕无码人妻aaa片| 亚洲性色av一区二区三区|