| | |
| | | <template> |
| | | <div class="video-player"> |
| | | <canvas id="area-canvas" ref="areaCanvas" ></canvas> |
| | | <canvas id="area-canvas" ref="areaCanvas" :width="canvasWidth" :height="canvasHeight"></canvas> |
| | | <video ref="videoPlayer" :poster="poster" preload="auto" muted></video> |
| | | <div class="controls"> |
| | | <!-- 全屏 --> |
| | |
| | | arrow: [], |
| | | polygon: [] |
| | | }, |
| | | showProportion: 3.2, |
| | | showProportionY: 3.58, |
| | | //showProportion: 3.2, |
| | | //showProportionY: 3.58, |
| | | showProportion: 1.036, |
| | | showProportionY: 1.039, |
| | | canvas: null, |
| | | ctx: null |
| | | ctx: null, |
| | | canvasWidth: 0, |
| | | canvasHeight: 0, |
| | | }; |
| | | }, |
| | | watch: { |
| | |
| | | _this.ctx.moveTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion); |
| | | _this.ctx.lineTo(v.location[1].x / _this.showProportion, v.location[1].y / _this.showProportion); |
| | | _this.ctx.stroke(); |
| | | _this.showRemarks( |
| | | v.location[0].x / _this.showProportion, |
| | | v.location[0].y / _this.showProportion, |
| | | v.name |
| | | ); |
| | | // _this.showRemarks( |
| | | // v.location[0].x / _this.showProportion, |
| | | // v.location[0].y / _this.showProportion, |
| | | // v.name |
| | | // ); |
| | | _this.canvas.style.cursor = "default"; |
| | | if (e && _this.ctx.isPointInStroke(e.offsetX, e.offsetY)) { |
| | | // 如果传入了事件坐标,就用isPointInStroke判断一下 |
| | |
| | | _this.ctx.lineTo(v.location[3].x / _this.showProportion, v.location[3].y / _this.showProportion); |
| | | _this.ctx.lineTo(v.location[0].x / _this.showProportion, v.location[0].y / _this.showProportion); |
| | | _this.ctx.stroke(); |
| | | _this.showRemarks( |
| | | v.location[0].x / _this.showProportion, |
| | | v.location[0].y / _this.showProportion, |
| | | v.name |
| | | ); |
| | | // _this.showRemarks( |
| | | // v.location[0].x / _this.showProportion, |
| | | // v.location[0].y / _this.showProportion, |
| | | // v.name |
| | | // ); |
| | | _this.canvas.style.cursor = "default"; |
| | | if (e && _this.ctx.isPointInPath(e.offsetX, e.offsetY)) { |
| | | // 如果传入了事件坐标,就用isPointInStroke判断一下 |
| | |
| | | } |
| | | _this.ctx.closePath(); |
| | | _this.ctx.stroke(); |
| | | _this.showRemarks( |
| | | v.location[v.location.length - 1].x / _this.showProportion, |
| | | v.location[v.location.length - 1].y / _this.showProportionY, |
| | | v.name |
| | | ); |
| | | // _this.showRemarks( |
| | | // v.location[v.location.length - 1].x / _this.showProportion, |
| | | // v.location[v.location.length - 1].y / _this.showProportionY, |
| | | // v.name |
| | | // ); |
| | | _this.canvas.style.cursor = "default"; |
| | | if (e && _this.ctx.isPointInPath(e.offsetX, e.offsetY)) { |
| | | // 如果传入了事件坐标,就用isPointInStroke判断一下 |
| | |
| | | this.Camera.getCameraTask(); |
| | | }); |
| | | }, |
| | | async initCanvas(id){ |
| | | |
| | | //this.canvas = document.querySelector("#area-canvas"); |
| | | this.canvas = this.$refs.areaCanvas; |
| | | this.ctx = this.canvas.getContext("2d"); |
| | | |
| | | // this.Camera.getPolygon();x:758,y:280 |
| | | // console.log(this.Camera.canvasData); |
| | | const rsp = await getAllPolygon({ cameraId: id }); |
| | | debugger |
| | | if (rsp && rsp.success) { |
| | | this.canvasData = { |
| | | line: rsp.data.line, |
| | | arrow: rsp.data.arrow, |
| | | polygon: [{id:'uuid', name: '多边形1', location: [{ x: 735, y: 155 }, { x: 830, y: 156 }, { x: 809, y: 351 }, { x: 809, y: 364 }, { x: 753, y: 396 }, { x: 755, y: 520 },{ x: 706, y: 524 },{ x: 722, y: 392 },{x:758,y:280},{ x: 735, y: 155 }] }], |
| | | //rect: rsp.data.rect |
| | | rect: [{id:'uuid', name: '矩形1', location: [{ x: 20, y: 30 }, { x: 20, y: 60 }, { x: 100, y: 60 }, { x: 100, y: 30 }] }] |
| | | }; |
| | | } |
| | | debugger |
| | | this.clickSelect(this.canvasData); |
| | | setWidthHeight(){ |
| | | this.canvasWidth = this.$refs.videoPlayer.offsetWidth; |
| | | this.canvasHeight = this.$refs.videoPlayer.offsetHeight; |
| | | }, |
| | | async initArea(){ |
| | | console.log('init') |
| | |
| | | }, |
| | | mounted() { |
| | | this.clickStart(); |
| | | //获取video宽高并给区域canvas赋值 |
| | | this.setWidthHeight(); |
| | | window.addEventListener('resize',()=>{ |
| | | //this.setWidthHeight(); |
| | | //this.initArea(); |
| | | }); |
| | | this.$nextTick(()=>{ |
| | | this.canvas = this.$refs.areaCanvas; |
| | | this.ctx = this.canvas.getContext("2d"); |
| | | this.ctx.lineWidth = 1; |
| | | |
| | | this.initArea() |
| | | this.initArea(); |
| | | |
| | | }) |
| | | }, |
| | |
| | | |
| | | <style lang="scss"> |
| | | #area-canvas{ |
| | | width: 100%; |
| | | height: 100%; |
| | | background: transparent; |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | padding: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | // .cavas{ |
| | | // width: 100%; |
| | | // height: 100%; |
| | | // position: absolute; |
| | | // top: 0; |
| | | // left: 0; |
| | | // canvas{ |
| | | // background: transparent!important; |
| | | // } |
| | | // } |
| | | |
| | | video { |
| | | object-fit: fill; |
| | | width: 100%; |