zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    相对定位和绝对定位
    一切重新开始
    Oracle Profile 使用
    使用javamail发送邮件错误:550 5.7.1 Unable to relay
    gvim 备份文件去除 配置
    解决Maven中OutOfMemory错误
    sqlplus启动后的环境SQLPATH的设置
    ORA-30004 错误处理
    oracle 锁表查询及解决、表字段查询
    如何进行软件架构设计
  • 原文地址:https://www.cnblogs.com/linding/p/14500437.html
Copyright © 2011-2022 走看看