Skip to content

Commit b573475

Browse files
committed
implements jbaysolutions#21, moved and resized events
1 parent 30da015 commit b573475

File tree

8 files changed

+71
-12
lines changed

8 files changed

+71
-12
lines changed

README.md

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@ or include the script in your html (download from [releases](https://github.com/
129129
### Events
130130

131131
Move and resize event listeners can be added to each grid-item, so that the parent Vue can be notified when a grid element is being moved or resized.
132+
Moved and resized event listeners can be added, if the only notification needed is when an item is finished moving or resizing.
133+
132134
Working example [here](https://jbaysolutions.github.io/vue-grid-layout/examples/02-events.html)
133135

134136
````html
@@ -151,7 +153,9 @@ Working example [here](https://jbaysolutions.github.io/vue-grid-layout/examples/
151153
:h="item.h"
152154
:i="item.i"
153155
@resize="resizeEvent"
154-
@move="moveEvent">
156+
@move="moveEvent"
157+
@resized="resizedEvent"
158+
@moved="movedEvent">
155159
{{item.i}}
156160
</grid-item>
157161
</grid-layout>
@@ -173,6 +177,22 @@ Working example [here](https://jbaysolutions.github.io/vue-grid-layout/examples/
173177
},
174178
```
175179

180+
* Moved event: every time an item is finished being moved and changes position
181+
182+
```javascript
183+
movedEvent: function(i, newX, newY){
184+
console.log("MOVED i=" + i + ", X=" + newX + ", Y=" + newY);
185+
},
186+
```
187+
188+
* Resized event: every time an item is finished being resized and changes size
189+
190+
```javascript
191+
resizedEvent: function(i, newH, newW){
192+
console.log("RESIZED i=" + i + ", H=" + newH + ", W=" + newW);
193+
},
194+
```
195+
176196

177197
## Contribute
178198

dist/vue-grid-layout.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/vue-grid-layout.min.js

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/vue-grid-layout.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/02-events.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,10 @@ <h1>Vue Grid Layout Example 2 - Move and resize events</h1>
5050
:h="item.h"
5151
:i="item.i"
5252
@resize="resizeEvent"
53-
@move="moveEvent">
53+
@move="moveEvent"
54+
@resized="resizedEvent"
55+
@moved="movedEvent"
56+
>
5457
<span class="text">{{item.i}}</span>
5558
</grid-item>
5659
</grid-layout>

examples/02-events.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,17 @@ new Vue({
5858
this.eventLog.push(msg);
5959
console.log(msg);
6060
},
61+
movedEvent: function(i, newX, newY){
62+
var msg = "MOVED i=" + i + ", X=" + newX + ", Y=" + newY;
63+
this.eventLog.push(msg);
64+
console.log(msg);
65+
66+
},
67+
resizedEvent: function(i, newH, newW){
68+
var msg = "RESIZED i=" + i + ", H=" + newH + ", W=" + newW;
69+
this.eventLog.push(msg);
70+
console.log(msg);
71+
},
6172
}
6273
});
6374

src/App.vue

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@
3939
:min-h="2"
4040
:i="item.i"
4141
@resize="resize"
42-
@move="move">
42+
@move="move"
43+
@resized="resized"
44+
@moved="moved"
45+
>
4346
<test-element :text="item.i"></test-element>
4447
</grid-item>
4548
</grid-layout>
@@ -126,6 +129,12 @@
126129
resize: function(i, newH, newW){
127130
console.log("RESIZE i=" + i + ", H=" + newH + ", W=" + newW);
128131
},
132+
moved: function(i, newX, newY){
133+
console.log("### MOVED i=" + i + ", X=" + newX + ", Y=" + newY);
134+
},
135+
resized: function(i, newH, newW){
136+
console.log("### RESIZED i=" + i + ", H=" + newH + ", W=" + newW);
137+
},
129138
/**
130139
* Add change direction button
131140
*/

src/GridItem.vue

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,12 @@
180180
rtl: false,
181181
182182
dragEventSet: false,
183-
resizeEventSet: false
183+
resizeEventSet: false,
184+
185+
previousW: null,
186+
previousH: null,
187+
previousX: null,
188+
previousY: null,
184189
}
185190
},
186191
created () {
@@ -353,6 +358,8 @@
353358
const newSize = {width: 0, height: 0};
354359
switch (event.type) {
355360
case "resizestart":
361+
this.previousW = this.w;
362+
this.previousH = this.h;
356363
var pos = this.calcPosition(this.x, this.y, this.w, this.h);
357364
newSize.width = pos.width;
358365
newSize.height = pos.height;
@@ -411,6 +418,9 @@
411418
if (this.w !== pos.w || this.h !== pos.h) {
412419
this.$emit("resize", this.i, pos.h, pos.w);
413420
}
421+
if (event.type === "resizeend" && (this.previousW !== this.w || this.previousH !== this.h)) {
422+
this.$emit("resized", this.i, pos.h, pos.w);
423+
}
414424
eventBus.$emit("resizeEvent", event.type, this.i, this.x, this.y, pos.h, pos.w);
415425
},
416426
handleDrag(event) {
@@ -426,6 +436,9 @@
426436
const newPosition = {top: 0, left: 0};
427437
switch (event.type) {
428438
case "dragstart":
439+
this.previousX = this.x;
440+
this.previousY = this.y;
441+
429442
var parentRect = event.target.offsetParent.getBoundingClientRect();
430443
var clientRect = event.target.getBoundingClientRect();
431444
if (this.rtl) {
@@ -483,6 +496,9 @@
483496
if (this.x !== pos.x || this.y !== pos.y) {
484497
this.$emit("move", this.i, pos.x, pos.y);
485498
}
499+
if (event.type === "dragend" && (this.previousX !== this.x || this.previousY !== this.y)) {
500+
this.$emit("moved", this.i, pos.x, pos.y);
501+
}
486502
eventBus.$emit("dragEvent", event.type, this.i, pos.x, pos.y, this.h, this.w);
487503
},
488504
calcPosition: function(x, y, w, h) {

0 commit comments

Comments
 (0)