Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.11.2015, 10:18
Аватар для AciDWarrioR
Кандидат Javascript-наук
Отправить личное сообщение для AciDWarrioR Посмотреть профиль Найти все сообщения от AciDWarrioR
 
Регистрация: 11.11.2015
Сообщений: 136

Остановка события
Добрый день! Моя ситуация следующая: Создаю геопортал для компании. На карте присутствуют различные объекты (точки, линии, полигоны), с которыми будут работать операторы. Для них пытаюсь реализовать редактирование объектов. И сейчас пытаюсь сделать функцию 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;
				}
			}
		});
Ответить с цитированием
  #2 (permalink)  
Старый 24.11.2015, 10:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,125

AciDWarrioR,
строка 7 на каждый чих 'change' идёт навешивание $('#map').mouseup, строка 4 ещё умножает количество mouseup
вам как то логику продумать иначе , хотябы
if(!$('#map').data('busy')){$('#map').mouseup(function(){}).data('busy', true)
}
и строка 13 почему не e.stopPropagation();
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка события внутри события grifangel Общие вопросы Javascript 6 04.09.2014 12:34
Остановка события пока не загруизится ajax -=1100=- AJAX и COMET 1 08.07.2013 19:38
Дебаг js, или как найти обработчик события для тега jimm88 Events/DOM/Window 1 18.04.2012 15:11
Как сделать чтобы клавиатурные события пропускались сквозь флешку? khusamov Общие вопросы Javascript 3 11.02.2012 16:48
Передача параметров в колбэки и дальнейшее их вешанье на события. Gremlin Общие вопросы Javascript 17 13.08.2011 08:54