Blame view

src/components/funAreaSelect/funAreaSelect.js 3.42 KB
96108619   Zhang Zhuo   更新添加文字功能 -张卓
1
2
3
4
  import React, { Component } from "react"
  import AreaSelect from "../areaSelete/areaSelete"
  import "./funAreaSelect.css"
  export default class FlvCom extends Component {
6bd5ee16   Zhang Zhuo   更新多功能组件 -张卓
5
6
7
8
9
    constructor(props) {
      super(props);
      this.state = {
        serviceData: [],
        mode:"polygon",//polygon    react
96108619   Zhang Zhuo   更新添加文字功能 -张卓
10
      }
6bd5ee16   Zhang Zhuo   更新多功能组件 -张卓
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    }
    static getDerivedStateFromProps(props) {
  
      return null;
    }
    componentDidUpdate() {
  
    }
    componentDidMount() {
      let {mode} = this.state;
      if(mode==="react"){
        this.setReact()
      }else{
        this.setPolygon()
96108619   Zhang Zhuo   更新添加文字功能 -张卓
25
      }
6bd5ee16   Zhang Zhuo   更新多功能组件 -张卓
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
    }
    setReact() {//设置矩形
      this.count = -1;//用来判断是否生成了一个框
      var canvasEl = document.getElementById(this.myRef.state.id)//获取canvas的id 这id是动态的所以要用ref进行获取
      var mousemoveFc = (e) => {
        var serviceData = JSON.parse(JSON.stringify(this.state.serviceData));
        var left1 = e.layerX;
        var top1 = e.layerY;
        if (this.count === 0) {//如果是第一次画就正常
          serviceData[1][1] = top1;
          serviceData[2] = [left1, top1];
          serviceData[3][0] = left1;
        } else {//不是第一次,也就是有框了这时候你直接就可以拖拽
          if (this.myRef.selectedIndex||this.myRef.selectedIndex===0) {
            serviceData[this.myRef.selectedIndex] = [left1, top1]
            switch (this.myRef.selectedIndex) {
              case 0:
                serviceData[1][0] = left1;
                serviceData[3][1] = top1;
                break;
              case 1:
                serviceData[0][0] = left1;
                serviceData[2][1] = top1;
                break;
              case 2:
                serviceData[1][1] = top1;
                serviceData[3][0] = left1;
                break;
              case 3:
                serviceData[0][1] = top1;
                serviceData[2][0] = left1;
                break;
            }
          }
        }
        this.setState({
          serviceData
        }, () => {
          this.myRef.draw()
        })
96108619   Zhang Zhuo   更新添加文字功能 -张卓
66
      }
6bd5ee16   Zhang Zhuo   更新多功能组件 -张卓
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
      canvasEl.addEventListener("mousedown", (e) => {
        var left = e.layerX;
        var top = e.layerY;
        var arr = [left, top]
        this.count++;//这个参数每次点击就加加这样就可以判断上面是否画图了
        if (this.state.serviceData.length === 0) {//刚按下的时候进行初始化
          let serviceData = [[...arr], [...arr], [...arr], [...arr]]
          this.setState({
            serviceData
          }, () => {
            this.myRef.draw();
          })
        }
        canvasEl.addEventListener("mousemove", mousemoveFc)
      })
      canvasEl.addEventListener("mouseup", (e) => {
        canvasEl.removeEventListener("mousemove", mousemoveFc)
      })
  
    }
    setPolygon() {//设置多边形
      var canvasEl = document.getElementById(this.myRef.state.id)//获取canvas的id 这id是动态的所以要用ref进行获取
      canvasEl.onclick = (e) => {
        var left = e.layerX;
        var top = e.layerY;
        let { serviceData } = this.state;
        serviceData.push([left, top])
        this.setState({
          serviceData
        }, () => {
          this.myRef.draw()
        })
96108619   Zhang Zhuo   更新添加文字功能 -张卓
99
      }
6bd5ee16   Zhang Zhuo   更新多功能组件 -张卓
100
101
102
103
104
      canvasEl.oncontextmenu = (e) => {
        e.preventDefault()
        if (e.button === 2) {
          canvasEl.onclick = null
        }
96108619   Zhang Zhuo   更新添加文字功能 -张卓
105
      }
6bd5ee16   Zhang Zhuo   更新多功能组件 -张卓
106
107
108
109
110
111
112
113
114
115
116
117
    }
    change() {
  
    }
    render() {
      let { serviceData } = this.state;
      return (
        <div className="funAreaSelectCss">
          <AreaSelect ref={(inst) => { this.myRef = inst }} serviceData={serviceData} change={(val) => this.change(val)}></AreaSelect>
        </div>
      )
    }
96108619   Zhang Zhuo   更新添加文字功能 -张卓
118
  }