• canvas图层添加拖拽事件


    <template>
      <div style="height: 100%;text-align: center">
        <canvas id="cvs" width="600" height="600"></canvas>
      </div>
    </template>
    
    <script>
      export default {
        name: "a6",
        data() {
          return {};
        },
        mounted() {
          this.drawCanvas()
        },
        methods: {
          drawCanvas() {
            let cvs = document.getElementById('cvs')
            let ctx = cvs.getContext("2d")
            let eles = [{
              type: 'Circle',
              x: 300,
              y: 300,
              r: 10,
              isPointInPath: false,
              ev: null
            }]
            this.beginDraw(ctx, eles)
    
            cvs.onmousedown = dev => {
              eles.map(ele => {
                ele.ev = dev
              })
              this.beginDraw(ctx, eles)
              eles.map(ele => {
                ele.ev = null
              })
              cvs.onmousemove = mev => {
                eles.map(ele => {
                  if (ele.isPointInPath) {
                    ele.x = mev.offsetX
                    ele.y = mev.offsetY
                  }
                })
                this.beginDraw(ctx, eles)
              }
            }
            document.onmouseup = cvs.onmouseup = function (uev) {
              cvs.onmousemove = null
              eles.map(ele => {
                ele.isPointInPath = false
                ele.ev = null
              })
            }
          },
          beginDraw(ctx, eles) {
            ctx.clearRect(0, 0, 600, 600)
            eles.map(ele => {
              this[`draw${ele.type}`](ctx, ele)
            })
          },
          drawCircle(ctx, ele) {
            ctx.save()
            ctx.beginPath()
            ctx.arc(ele.x, ele.y, ele.r, 0, -2 * Math.PI, true);
            ele.ev && (ele.isPointInPath = ctx.isPointInPath(ele.ev.offsetX, ele.ev.offsetY))
            ctx.strokeStyle = 'red';
            ctx.stroke();
            ctx.restore()
          }
        }
      }
    </script>
    
    <style scoped>
      #cvs {
        border: 1px solid black;
        margin-top: 20px;
      }
    </style>
  • 相关阅读:
    chrome:禁用缓存
    datatables:如何禁用一列的排序
    springboot:集成fastjson(教训)
    eclipse:显示堆内存
    模板, 保存&发布
    动画
    配色
    图示 Smart-Art
    常用快捷键 & BLOG & Website
    图表
  • 原文地址:https://www.cnblogs.com/linding/p/14500437.html
Copyright © 2020-2023  润新知