Показать сообщение отдельно
  #1 (permalink)  
Старый 27.12.2013, 11:36
Новичок на форуме
Отправить личное сообщение для plumkin Посмотреть профиль Найти все сообщения от plumkin
 
Регистрация: 27.12.2013
Сообщений: 4

Всплывающий список при наведении на область svg изображения
Добрый день.
Задача:
1. сделать на странице интерактивную карту, с регионами сложной формы; (готово)
2. при наведении на регион он подсвечивается; (готово)
3. при нажатии на регион всплывает список (для каждого региона свой) со ссылками (в дальнейшем ссылки на материалы сайта). (прошу помощи с этим пунктом)

Вот как примерно я хочу это реализовать: http://novaposhta.ua/map/

Рассматривал рещения и через чистый CSS и с множеством изображений с разным состояние карты сделанными в Addobe Fireworks. Но эти решения не радовали. А так как сайт делается для себя, то хочется сделать все максимально удобно и функционально, без полумер и постоянной подгрузки кучи изображений.

Решение:
1. карту я нарисовал в inkscape, и засунул в файл.js. Для обработки использую raphael.js (библиотека JavaScript, которая упрощает работу с векторной графикой в веб проектах. Raphael использует SVG W3C и VML как основу для создания графики. Каждый графический объект создается как объект DOM и, таким образом, к нему можно присоединить обработчик события или модифицировать в процессе обработки страницы).

Вот его сокращенный код:
var paths = {
	lenin: {
		name: 'Ленинский',
		path: 'm 182.5 ... 42 z'
	},
	dzerg: {
		name: 'Дзержинский',
		path: 'm 301.8 ... 73 z'
	},
           ...
}

по логике вещей я понимаю что в переменные lenin и dzerg мне нужно вставить массивы с соответствующими значениями.

2. подсветку при наведении на регион я реализовал.

3. при нажатии на конкретный регион карты я вывожу окошко с именем области и кнопкой закрыть (а нужно вывести все эл-ты массива).

$(function(){
     
    var r = Raphael('map', 721, 700),
    attributes = {
            fill: '#ddd', stroke: '#333', 'stroke-width': 1.2, 'stroke-linejoin': 'round'
        },
    arr = new Array();
    for (var country in paths) {
        var obj = r.path(paths[country].path); 
        obj.attr(attributes);
	    arr[obj.id] = country;
	// Oбработчик события hover
		obj.hover(function(){
			this.animate({
				fill: '#1669AD'
			},300);
		},function(){
			this.animate({
				fill: attributes.fill
			}, 300);
		});
	// Oбработкa события click
		obj.click(function(){
		    document.location.hash = arr[this.id];
		    // Изменяем хэш документа (#)
		    var point = this.getBBox(0);
		    // возвращаем размеры элемента
		    $('#map').next('.point').remove();
		    $('#map').after($('<div />').addClass('point'));
		    // Удаляем существующий div 'point' и создаем другой 
		    $('.point')
		    .html(paths[arr[this.id]].name)
		    .prepend($('<a />').attr('href', '#').addClass('close').text('Закрыть'))
		    // выводим список при нажатии
		    .css({
		        left: point.x+(point.width/2)-80,
		        top: point.y+(point.height/2)-20
		    })
		    // где всплывает окно
		    .fadeIn();
		});
		// Oбработкa события click для кнопки закрытия
		$('.point').find('.close').live('click', function(){
		    var t = $(this),
		        parent = t.parent('.point');
		     
		    parent.fadeOut(function(){
		        parent.remove();
		    });
		    return false;
		}); 
    }
});


Вопрос. Как мне вывести в это всплывающее окно не одно значение, а задыный зарание список наименований оформленных как ссылка.
Как я понимаю вывод будет выполняться в этом блоке:
$('.point')
   .html(paths[arr[this.id]].name)
   .prepend($('<a />').attr('href', '#').addClass('close').text('Закрыть'))


Вобщем у меня банально не хватает знаний на реализацию этой идеи и я обратился к Вам. Все что я мог почерпнул из уроков, примеров, рабочих сайтов. Зарание благодарю за помощь. Спасибо.

Последний раз редактировалось plumkin, 27.12.2013 в 11:54.
Ответить с цитированием