Остановка события
Добрый день! Моя ситуация следующая: Создаю геопортал для компании. На карте присутствуют различные объекты (точки, линии, полигоны), с которыми будут работать операторы. Для них пытаюсь реализовать редактирование объектов. И сейчас пытаюсь сделать функцию 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; } } }); |
AciDWarrioR,
строка 7 на каждый вам как то логику продумать иначе , хотябы if(!$('#map').data('busy')){$('#map').mouseup(function(){}).data('busy', true) }и строка 13 почему не e.stopPropagation(); |
Часовой пояс GMT +3, время: 20:05. |