Deff,
Ничего вычислять не надо, все координаты и так есть в ареа, мы просто забираем их в текстовый массив, делим сплитом на цифровые переменные (я назвал этот массив coords). Если канвас совпадает по размеру с картой, то никаких проблем, координаты арии и будут координатами канваса. function draw(canvas, coords, lineColor, fullColor) { ctx = canvas.getContext("2d"); ctx.strokeStyle = lineColor; ctx.fillStyle = fullColor; ctx.lineWidth = 1; ctx.beginPath(); ctx.moveTo(coords[0], coords[1]); for (var i = 2; i < coords.length; i = i + 2) { ctx.lineTo(coords[i], coords[i + 1]); } ctx.stroke(); if (fullColor != null) { ctx.fill(); } ctx.closePath(); } Просто и функционально) (Делал интерактивную карту России) |
Цитата:
Хотя имхо картинкой не сложнее, и чище *часто по пойнтерам в coords более грубый край, нежели реально в самой картинке Карты, поэтому есть ограничения по плавности краёв. Картинка может сгладить эти края и вдобавок, каждой области можно всунуть отмасштабированную в меньшем размере, с увеличением при клике(где уже видны: города - заводы улицы и .т.д) Вообще занимался впихиванием фреймом гугол-карты в области |
Deff,
Нууу... Тут как сказать, я бы не сказл что Ваш вриант лучше, большое количество картинок увеличивает вес сайта, он дольше грузится, необходимо догружать картинки, чтобы они не мигали при первом наведении (если они дисплей нун). И нужно делать кучу картинок. С другой стороны канвас медленно работает в ИЕ (и то только со скриптом) и т.д. Каждый делает так как ему удобнее, мне было удобнее так ;) |
Цитата:
У Deff'a карта отличная, почти то что нужно, но комментарий там просто текст, а не блок с элементами =( надеюсь до меня дойдет, как все это делать =( |
например так:
<div class='labels'> <div class='label label1'>...</div> <div class='label label2'>...</div> <div class='label label3'>...</div> <div class='label label4'>...</div> </div> <map> <area class='area label1' coords='...' /> <area class='area label2' coords='...' /> <area class='area label3' coords='...' /> <area class='area label4' coords='...' /> </map> Тогда скрипт можно немного оптимизировать, чтобы пошустрее бегал: var map = $('map'), labels = $('.labels'); map.find('.area').hover(function() {//наведение на область var class; //Объявляем переменную "class" class = $(this).attr('class');//записали в переменную класс арии (class = "area lebel1") class = class.replace('area ', '');//Удалили из переменной класс арии (class = "lebel1") labels.find('.' + class).css('display', 'block');//показали метку }, function () {//потеря наведения на арию labels.find('.label').each(function() {//цикл по всем элементам с классом label $(this).css('display', 'none');//скрываем все метки }) }) Разница в том, что когда мы создали переменные мы сделали ссылки на конкретные элементы в документе и ищем area и label не во всем документе а в конкретных местах. |
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> <style> .area { margin: 50px; width: 150px; height: 100px; background-color: rgb(255, 222, 173); } .label { background-color: rgb(250, 240, 230); width: 40px; height: 20px; position: absolute; margin: -20px -10px 0 0; display:none; } </style> <div class='area'></div> <div class='label'></div> <script> function muve(e) { $('.label').css({ 'left' : e.pageX + 5, 'top' : e.pageY + 5 }) } $('.area').hover(function(e) { $(document).bind('mousemove', muve); $('.label').css({ 'display' : 'block', 'left' : e.pageX, 'top' : e.pageY }) }, function() { $(document).unbind('mousemove', muve); $('.label').css('display', 'none'); }) </script> Это должно навести вас на мысли как сделать подвижную метку. Будут вопросы - пишите! |
Часовой пояс GMT +3, время: 15:30. |