嫩草影院久久99_老司机午夜网站国内精品久久久久久久久_久久夜色精品国产_国产一级做a爰片久久毛片

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

2019-6-24    seo達人

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

目錄結(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">藍色</button>
  <button style='background:green;color:#fff;' bindtap="green">綠色</button>
  <button type="warn" bindtap="startRecording">開始錄制</button>
  <button type="primary" bindtap='rePlay'>復盤</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
//獲取應用實例
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;//開始時刻
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();//記錄當前操作時刻
    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:該文件用來保存歷史操作,以便復盤

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

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');
  }
})
藍藍設計www.sdgs6788.com )是一家專注而深入的界面設計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、網(wǎng)站建設 平面設計服務

日歷

鏈接

個人資料

藍藍設計的小編 http://www.sdgs6788.com

存檔

嫩草影院久久99_老司机午夜网站国内精品久久久久久久久_久久夜色精品国产_国产一级做a爰片久久毛片
<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • 国产人成一区二区三区影院| 久久国产免费| 久久精品女人天堂| 欧美一区二区网站| 激情久久久久久久久久久久久久久久| 美国成人毛片| 欧美激情第9页| 欧美综合二区| 久久这里只有| 亚洲午夜精品福利| 久久精品国产免费| 一区二区三区视频在线| 性欧美超级视频| 亚洲欧洲一区二区在线播放| 一区二区三区日韩精品| 一个人看的www久久| 国产视频自拍一区| 91久久精品日日躁夜夜躁国产| 欧美日韩精品综合在线| 久久久久久久97| 欧美xx69| 国产亚洲欧美一区在线观看 | 久久漫画官网| 欧美日韩爆操| 两个人的视频www国产精品| 欧美日韩一区精品| 欧美高清不卡| 国产亚洲精品bt天堂精选| 亚洲靠逼com| 在线观看欧美视频| 亚洲综合丁香| 亚洲调教视频在线观看| 欧美成年人视频网站欧美| 亚洲国产毛片完整版| 亚洲第一在线综合网站| 亚洲字幕一区二区| 亚洲一级二级在线| 亚洲小视频在线| 999在线观看精品免费不卡网站| 久久精品国产欧美亚洲人人爽| 亚洲男人天堂2024| 欧美电影免费观看高清完整版| 久久精品中文字幕免费mv| 欧美午夜欧美| 亚洲另类春色国产| 亚洲大胆在线| 久久久一区二区| 久久久久一区| 韩国一区二区三区美女美女秀| 亚洲一级网站| 亚洲欧美日韩区| 国产精品狼人久久影院观看方式| 亚洲精品影视| 亚洲丝袜av一区| 欧美日韩国产探花| 亚洲美女啪啪| 亚洲五月婷婷| 国产精品系列在线| 亚洲一二三区视频在线观看| 午夜精品一区二区在线观看| 国产精品久久久久久久久借妻| 亚洲精品裸体| 亚洲一级特黄| 国产精品亚洲综合一区在线观看| 亚洲午夜激情| 久久久精彩视频| 在线观看av一区| 欧美成人免费全部观看天天性色| 欧美激情亚洲精品| 一区二区高清视频| 国产精品高潮视频| 性欧美激情精品| 欧美成人高清视频| 亚洲精品中文字幕女同| 欧美理论视频| 亚洲男人影院| 久久一区二区三区av| 亚洲第一偷拍| 欧美日韩亚洲一区三区 | 欧美精品偷拍| 亚洲一区国产视频| 久久精品国产第一区二区三区| 国产丝袜一区二区三区| 久久激情五月激情| 亚洲电影在线看| 亚洲一区二区免费视频| 国产精品久久999| 久久精品成人一区二区三区蜜臀| 欧美激情第8页| 亚洲免费视频一区二区| 在线观看日韩av先锋影音电影院| 欧美国产激情| 亚洲欧美视频一区| 欧美国产激情| 亚洲视频综合在线| 狠狠色丁香婷婷综合影院| 欧美成人精品h版在线观看| 夜夜精品视频| 美脚丝袜一区二区三区在线观看 | 欧美一区二区三区免费观看视频 | 狠狠色丁香婷婷综合影院| 欧美二区在线播放| 亚洲欧美一区二区三区极速播放| 亚洲第一久久影院| 午夜欧美大片免费观看| 亚洲激情午夜| 国产精品色在线| 鲁大师影院一区二区三区| 亚洲影院免费观看| 欧美激情第4页| 久久久久九九视频| 亚洲午夜日本在线观看| 伊人春色精品| 国产精品免费观看在线| 欧美顶级艳妇交换群宴| 欧美在线日韩在线| 亚洲特色特黄| 91久久精品国产91久久| 久久影视精品| 欧美在线免费观看视频| 在线亚洲精品| 亚洲国产欧美国产综合一区| 国产欧美综合一区二区三区| 欧美视频官网| 欧美日韩国产三级| 欧美国产日韩亚洲一区| 久久综合久久综合九色| 久久精品亚洲一区二区| 亚洲你懂的在线视频| 中文精品视频一区二区在线观看| 亚洲经典三级| 亚洲激情在线观看| 亚洲国产欧美日韩| 欧美搞黄网站| 欧美大尺度在线观看| 久久野战av| 久久躁日日躁aaaaxxxx| 欧美亚洲专区| 亚洲欧美日韩一区二区三区在线观看| 99精品免费| 在线中文字幕不卡| 欧美激情第二页| 欧美精品成人| 欧美高清不卡| 欧美va日韩va| 欧美高清在线精品一区| 欧美成人一区二区三区片免费| 久久久亚洲国产美女国产盗摄| 欧美中文字幕视频在线观看| 欧美一区日韩一区| 欧美一区二区三区免费观看 | 亚洲午夜国产一区99re久久| 在线视频一区二区| 亚洲一区二区三区四区视频| 亚洲欧美精品在线| 欧美一区二区三区免费视| 欧美在线黄色| 久久久久一区二区三区| 另类天堂视频在线观看| 欧美激情一区在线| 日韩一级成人av| 亚洲欧美中日韩| 欧美黄色免费| 亚洲日本久久| 亚洲一区黄色| 欧美亚洲综合在线| 久久香蕉国产线看观看av| 欧美高清在线一区二区| 国产精品乱看| 狠狠综合久久av一区二区老牛| 亚洲精品日韩久久| 性8sex亚洲区入口| 欧美xx视频| 一区二区三区精品在线 | 亚洲午夜一二三区视频| 久久久999精品| 最新国产乱人伦偷精品免费网站| 亚洲视频电影图片偷拍一区| 久久黄金**| 欧美日韩另类一区| 狠狠入ady亚洲精品| 一本久久综合| 久久美女性网| 日韩视频永久免费观看| 久久精品亚洲热| 欧美日韩国产一区二区三区地区| 国产精品自拍在线| 亚洲福利久久| 亚洲欧美日韩国产精品| 久久女同精品一区二区| 欧美国产欧美综合| 亚洲欧美综合另类中字| 久久久久久久91| 国产精品萝li| 亚洲二区精品| 久久久精品动漫| 亚洲丝袜av一区| 欧美精品在线观看播放| 精品999成人| 久久精品91久久久久久再现|