Добрый день! Моя ситуация следующая: Создаю геопортал для компании. На карте присутствуют различные объекты (точки, линии, полигоны), с которыми будут работать операторы. Для них пытаюсь реализовать редактирование объектов. И сейчас пытаюсь сделать функцию Ctr+Z. Более подробно: когда оператор выбирает какой-то объект надо повесить обработчик события, чтобы при перемещении объекта или его точки сохранялся в массив клон этого объекта,а точнее его геометрия, но не по ходу всего перемещения а на конец перемещения, то есть как раз таки на mouseup это можно реализовать. Вот как я пытаюсь это сделать, но дело в том, что когда я отпускаю кнопку мыши у меня происходит зацикливания события mouseup, из за чего один и тот же клон объекта кладется в массив очень много раз и тем самым Ctr+Z не удается реализовать. Помогите кто может. Если что для создания геопортала используется библиотека OpenLayers 3 версии.
Код:
var changeFeature;
var unchangeFeature = [];
var currentFeature;
select.getFeatures().on('add', function(e){
changeFeature = e.element;
unchangeFeature.push(e.element.clone());
e.element.on('change', function(e){
dirty[e.target.getId()] = true;
$('#map').mouseup(function(){
unchangeFeature.push(changeFeature.clone());
currentFeature = unchangeFeature[unchangeFeature.length-1];
$('.back img').addClass('access');
$('#map').stopPropagation();
});
});
$('.back img').click(function(){
if ($('.back img').hasClass('access')){
for (i=unchangeFeature.length-1; i>0; i--){
if (currentFeature == unchangeFeature[i]){
changeFeature.setGeometry(unchangeFeature[i-1].getGeometry());
currentFeature = unchangeFeature[i-1];
break;
}
}
}
});
});
select.getFeatures().on('remove', function(e){
f = e.element;
if (dirty[f.getId()]){
var conf = confirm("Сохранить изменения?");
if (conf == true){
delete dirty[f.getId()];
featureProperties = f.getProperties();
delete featureProperties.boundedBy;
var clone = new ol.Feature(featureProperties);
clone.setId(f.getId());
var values_Geom = clone.get('type');
if (values_Geom === 'Point')
{
transactWFSPoint('update',clone);
}else if(values_Geom === 'Line'){
transactWFSLine('update', clone);
} else{
transactWFSPolygon('update', clone);
}
changeFeature = null;
unchangeFeature = null;
} else {
changeFeature.setGeometry(unchangeFeature[0].getGeometry());
changeFeature = null;
unchangeFeature = null;
}
}
});