---
# System prepended metadata

title: vue-drag-resize套件 16
tags: [vue]

---

# vue-drag-resize套件 16

###### tags: `vue`
vue-drag-resize是一個有趣的套件，可以把它當成可以拖動的div。

篇文章是參考https://github.com/kirillmurashov/vue-drag-resize

### 安裝
開啟cmd到專案資料夾打

```
npm i -s vue-drag-resize
```

下載好後，要做引入的動作。
到main.js裡輸入

```
import VueDragResize from 'vue-drag-resize'

Vue.component('vue-drag-resize', VueDragResize)
```



---

### 範例

接著創建一個vue檔，就可以開始用了。

以下是他的基本架構:

```
<template>
  <div >
    <div id="bgbg">
      <vue-drag-resize :isActive="true"  @resizing="resize" @dragging="resize"
      :w="100" :h="100"
      >
              <h3>test</h3>
              <p>{{ top }} х {{ left }} </p>
              <p>{{ width }} х {{ height }}</p>
      </vue-drag-resize>
    </div>
  </div>
</template>

<script>
// @ is an alias to /src
/*eslint-disable*/
export default {
  data:()=>({
     width: 0,
     height: 0,
     top: 0,
     left: 0,
  }),
  components: {
  },
  methods:{
    resize(newRect) {
        this.width = newRect.width;
        this.height = newRect.height;
        this.top = newRect.top;
        this.left = newRect.left;
    },
  }
}
</script>
<style  scoped>
#bgbg{
  position: relative;
  height:400px;
  width: 400px;
  background-color:skyblue;
  margin:0 auto;
}
</style>

```
我將它新增在一個div裡，
:w="100" :h="100" 表示長寬大小
@resizing 表示監聽其大小改變時會執行resize function   @dragging 表示監聽其被拖曳時會執行resize function
resize function:用來監聽其top、left值和長寬值 


---

加入:aspectRatio="true"，會在控制大小時，等比例更改

```
      <vue-drag-resize :isActive="true"  @resizing="resize" @dragging="resize"
      :w="100" :h="100"
      :aspectRatio="true"
      >
              <h3>test</h3>
              <p>{{ top }} х {{ left }} </p>
              <p>{{ width }} х {{ height }}</p>
      </vue-drag-resize>
```

加入 :minw :minh ，限制其最小大小
```
    <div id="bgbg">
      <vue-drag-resize :isActive="true"  @resizing="resize" @dragging="resize"
      :w="100" :h="100"
      :minw="40"
      :minh="40"
      >
              <h3>test</h3>
              <p>{{ top }} х {{ left }} </p>
              <p>{{ width }} х {{ height }}</p>
      </vue-drag-resize>
    </div>
```

加入parentScaleX parentScaleY，控制其移動和縮放的幅度(參數愈大愈慢)。
```
      <vue-drag-resize :isActive="true"  @resizing="resize" @dragging="resize"
      :w="100" :h="100"
      :parentScaleX="10"
      :parentScaleY="10"
      >
              <h3>test</h3>
              <p>{{ top }} х {{ left }} </p>
              <p>{{ width }} х {{ height }}</p>
      </vue-drag-resize>
```

加入:x :y 控制生成時的位置。
```
      <vue-drag-resize :isActive="true"  @resizing="resize" @dragging="resize"
      :w="100" :h="100"
      :x="100"
      :y="100"
      >
              <h3>test</h3>
              <p>{{ top }} х {{ left }} </p>
              <p>{{ width }} х {{ height }}</p>
      </vue-drag-resize>
```

加入:stickSize 修改調整大小的按鈕大小
```
      <vue-drag-resize :isActive="true"  @resizing="resize" @dragging="resize"
      :w="100" :h="100"
      :stickSize="5"
      >
              <h3>test</h3>
              <p>{{ top }} х {{ left }} </p>
              <p>{{ width }} х {{ height }}</p>
      </vue-drag-resize>
```

加入isDraggable isResizable，值為true or false，isDraggable控制是否開啟拖曳功能，isResizable控制是否開啟縮放功能
```
      <vue-drag-resize :isActive="true"  @resizing="resize" @dragging="resize"
      :w="100" :h="100"
      :isDraggable="true"
      :isResizable="true"
      >
```

加入parentLimitation，值為true or false，控制縮放和拖曳是否能超過父元素。

```
      <vue-drag-resize :isActive="true"  @resizing="resize" @dragging="resize"
      :w="100" :h="100"
      :parentLimitation="true"
      >
              <h3>test</h3>
              <p>{{ top }} х {{ left }} </p>
              <p>{{ width }} х {{ height }}</p>
      </vue-drag-resize>
```

@clicked="cc" :監聽點擊該元件後觸發事件
@deactivated="de"監聽點擊除該元件外的地方時觸發事件
```
      <vue-drag-resize :isActive="true"  @resizing="resize" @dragging="resize"
      :w="100" :h="100"
      @clicked="cc"
      @deactivated="de"
      >
              <h3>test</h3>
              <p>{{ top }} х {{ left }} </p>
              <p>{{ width }} х {{ height }}</p>
      </vue-drag-resize>
```

@resizestop="stops":監聽縮放結束時觸發function
@dragstop="stopd":監聽拖曳結束時觸發function
```
      <vue-drag-resize :isActive="true"  @resizing="resize" @dragging="resize"
      :w="100" :h="100"
      @resizestop="stops"
      @dragstop="stopd"
      >
              <h3>test</h3>
              <p>{{ top }} х {{ left }} </p>
              <p>{{ width }} х {{ height }}</p>
      </vue-drag-resize>
```
