Оказывается, так как вы никогда не обновляете свое поле на новое местоположение, когда оно выходит из строя, вы просто устанавливаете то же значение, что и раньше. (Вы начинаете движение с left: 100, top: 100
. Тогда, поскольку вы обновляете fields
только при «остановке перетаскивания», вы указываете, что поля должны обновляться с полученными вами координатами onActivated
(по-прежнему 100, 100).)
Vue не будет регистрировать никаких изменений, если значение ===
старое. Это приводит к тому, что ваш прямоугольник не возвращается к началу, но опять же, потому что Vue не думает, что что-то новое.
Есть несколько способов решить эту проблему.
Решение 1: Например, вы можете добавить десятичную дробь к вашему новому значению;
onDragStop(rect) {
if (rect.left < 0 || rect.top < 0) {
alert("revert!!");
this.fields[this.currentFieldIndex].left = this.currentField.left + 0.1; //<--
this.fields[this.currentFieldIndex].top = this.currentField.top + 0.1; //<--
} else {
//...
}
}
Это, конечно, делает ваш прямоугольник на n
.
Решение 2: Вы можете постоянно обновлять this.fields[x]
с помощью события перетаскивания ;
onDragging(rect) {
this.fields[this.currentFieldIndex].left = rect.left;
this.fields[this.currentFieldIndex].top = rect.top;
}
Это более ресурсоемкое решение, но у вас всегда будут правильные значения.