В вашем последнем обновлении переменная i
в обработчике mousedown всегда на единицу больше, чем последний созданный вами элемент, поскольку на него ссылаются позже, после того, как переменная i
была увеличена.
Вместо этого вы также можете использовать evant.target
.
rects[i].on("mousedown", function (evant) {
console.log("jdfh");
var offset = {
x: evant.target.x - evant.stageX,
y: evant.target.y - evant.stageY
};
// Note: store the listener handler to remove it later
var listener = evant.target.on("pressmove", function (evant) {
evant.target.x = evant.stageX + offset.x;
evant.target.y = evant.stageY + offset.y;
stage.update();
});
// Remove the pressmove handler
evant.target.on("pressup", function(evant) {
evant.target.off("pressmove", listener);
evant.remove(); // Remove this pressup handler too
});
});
Напоминание об удалении обработчика pressmove
, поскольку он будет добавляться снова при каждом нажатии на объект. Это потому, что ваш обработчик является просто анонимной функцией, поэтому каждый раз создается новая. Вам не нужно каждый раз добавлять событие «pressmove», вы можете просто добавить его один раз, но вам придется сделать смещение глобальным или сохранить его на своем объекте.
Надеюсь, это поможет.