国产精品美女久久久浪潮AV,国产精品三级一二三区,久久精品国产一区二区小说 ,依依成人影视国产精品,全部无卡免费的毛片在线看,日本一区二区三深夜不卡,国产精品女同一区二区久久,国产精品夜色一区二区三区

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

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

        如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請(qǐng)點(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:該文件用來(lái)保存歷史操作,以便復(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({
         
          /**
           * 頁(yè)面的初始數(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)聽頁(yè)面加載
           */
          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ì)www.shtzxx.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國(guó)內(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è)人資料

        存檔

        主站蜘蛛池模板: 全黄性性激高免费视频| 国产专区一线二线三线码| 国产高清在线a视频大全| 国产精品久久精品国产| 1313久久国产午夜精品理论片 | 在线观看肉片av网站免费| 三人交free性欧美| av国产精品| 免费午夜电影| 精品丝袜国产自在线拍高清| 国产成人精品午夜2022| 欧美不卡视频一区发布| 久久久久精品国产亚洲av麻豆| 69zxx少妇内射无码| 一个人看的视频在线观看www| 久久久亚洲欧洲日产国码aⅴ | 好男人hd免费观看| 日韩欧美+自拍| 洛川县| 少妇自慰流白口浆21p| 老熟女一区二区免费| 国产深夜男女无套内射| 偷窥 亚洲 另类 图片 熟女| 久久男人av资源站| 亚洲一区二区三区高清在线观看| 国产在线视频一区二区三区98| 亚洲中文字幕久久精品无码a| 蜜桃无码一区二区三区| 亚洲av无码乱码国产麻豆穿越| tobu8日本高清在线观看| 浦江县| 乌拉特后旗| 亚洲a∨无码一区二区三区| 依兰县| 无码少妇一区二区三区芒果| 高清自拍亚洲精品二区| 国产极品美女高潮无套在线观看| 男女啪啪免费体验区| 中文字幕mv在线观看| a亚洲va欧美va国产综合| 德钦县|