Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.02.2012, 11:58
Аспирант
Отправить личное сообщение для Eugent Посмотреть профиль Найти все сообщения от Eugent
 
Регистрация: 28.02.2012
Сообщений: 55

ExtJs4. Активные области на изображении. Проблема с перемещением активных областей.
Привет всем!)

Есть вопрос по работе с активными областями на изображении. В предыдущем вопросе мне ответили, что любой Ext.Component можно перемещать. Я сделал все активные области перемещаемыми в рамках тега img.
При работе с единственной панелью в viewPort все нормально, но если добавить еще западную панель, то при перемещении активных областей, перемещаемая область смещается на ширину западной панели.

Код данного примера используется на тестовом сервере - http://extdev.eugent.org/

Прилагаю коды:

//объявление контроллера интерфейса
Ext.define('Edu.controller.Interface', {
	...
	//функция инициализации контроллера
	init: function() {
		var _this = this;	//устанавливаем синоним для контроллера
		//устанавливаем обработчики событий
		this.control({ 
			//центральная панель вьюпорта
			'viewport systemcenter': {
				//после рендера вывести изображение и расставить на нем активные div-пятна
				'afterrender': function(th_panel){
					//информация об изображении
					var picture = {
						id	: 65445,
						src: '/data/2067985.gif',
						width: 1024,
						height: 656
					};
					//список активных пятен
					var data = [
						{
							hotspot_id: 125,
							x1: 0, x2: 25,
							y1: 240, y2: 265
						}
					];
					//идентификатор компонента, содержащего изображение
					var div_id = 'draft_div_' + picture.id;
					//идентификатор тега для изображения
					var img_id = 'img_div_' + picture.id;
					//создание компонента для изображения и активных пятен
					var div_image = Ext.create('Ext.Component', {
						id: div_id,
						html: '<img id = "' + img_id + '" src = "' + picture.src + '" width = "' + picture.width + '" height = "' + picture.height + '" />'
					});
					//добавить компонент на панель
					th_panel.add(div_image);
					//создать горячие пятна
					_this.createHotSpots(data, div_id, img_id);
				}
			}
		});
    },
	
	createHotSpots: function(data, div_id, img_id){
		//в цикле создать горячие пятна на чертеж
		for(var i = 0; i < data.length; i++){
			var hot_spot = Ext.create('Ext.Component', {
				id: 'hot_spot_' + data[i].hotspot_id,
				autoEl	: {
					tag: 'div',
					cls: 'hot_spot'
				},
				draggable: {
					constrain: true,
					//ограничить область перемещения тегом изображения
					constrainTo	: Ext.get(img_id)
				},
				resizable:true,
				
				
				//вывести в тег компонент с изображением				
				renderTo	: Ext.get(div_id),
				style: {
					left: data[i].x1,
					top: data[i].y2,
					width: parseInt(Math.abs(data[i].x2 - data[i].x1), 10),
					height: parseInt(Math.abs(data[i].y2 - data[i].y1), 10)
				}
			});
		}
	}
});

Последний раз редактировалось Eugent, 29.02.2012 в 21:56. Причина: Добавлено демо
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разметка областей на изображении KaTriN21 Библиотеки/Тулкиты/Фреймворки 0 24.01.2012 12:10