Packaged into components, can be directly in the need of the page call, using custom instructions to achieve drag

<template>
  <div class="drag">
    <div v-show="show" v-drag class="content" style="width:500px; z-index: 20">
      <img
        id="target"
        ref="element"
        class="target"
        style="width: 100%;"
        :style="{ transform: 'scale(' + multiples + ')' + 'rotate(' + current + 'deg)' }"
        :src="src"
      >
    </div>
    <div v-show="show" class="button">
      <el-button size="mini" type="success" @click="handleClose">Shut down</el-button>
      <el-button size="mini" type="success" @click="handlerotate">rotating</el-button>
      <el-button size="mini" type="success" @click="handlebig">amplification</el-button>
      <el-button size="mini" type="success" @click="handleReduce">narrow</el-button>
    </div>
  </div>
</template>
<script>
export default {
  directives: {
    drag(el) {
      const oDiv = el
      oDiv.onmousedown = function(e) {
        const disX = e.clientX - oDiv.offsetLeft
        const disY = e.clientY - oDiv.offsetTop
        document.onmousemove = function(e) {
          const l = e.clientX - disX
          const t = e.clientY - disY
          oDiv.style.left = l + 'px'
          oDiv.style.top = t + 'px'
        }
        document.onmouseup = function() {
          document.onmousemove = null
          document.onmouseup = null
        }
        return false}}},props: {
    shows: {
      type: Boolean.default: null
    },
    url: {
      type: String || Number.default: null}},data() {
    return {
      dd: ' '.inout: ' '.show: ' '.current: 0.name: ' '.src: ' '.multiples: 1}},watch: {
    shows() {
      this.show = this.shows
      if (this.shows) {
        this.src = this.url
        this.$nextTick(() = > {
          if (this.$refs.element.offsetHeight > 600) {
            this.multiples = '0.2'}})}}},methods: {
    handlerotate() {
      this.current = (this.current + 90) % 360
    },
    handlebig() {
      this.multiples = Number(this.multiples) + 0.1
    },
    handleReduce() {
      this.multiples = Number(this.multiples) - 0.1
    },
    handleClose() {
      this.$emit('update:shows'.false)}}}</script>
<style>
.drag {
  position: relative;
  height: 100%;
}
.content {
  position: fixed;
  transform: translate(-50%, -50%);
  left: 50%;
  /* top: 50%; * /
  cursor: pointer;
}
.target {
 text-align: center;
 display: inline-block;
  -webkit-box-shadow: # 666 0px 0px 10px;
   -moz-box-shadow: # 666 0px 0px 10px;
   box-shadow: # 666 0px 0px 10px;
   background: #EEFF99;
}
.button {
  position: fixed;
  transform: translate(-50%, -50%);
  left: 50%;
  top: 95%;
  z-index: 200;
}
</style>

Copy the code