Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 06.02.2013, 17:19
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

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();
        }


Просто и функционально) (Делал интерактивную карту России)

Последний раз редактировалось tsigel, 06.02.2013 в 17:22.
Ответить с цитированием
  #22 (permalink)  
Старый 06.02.2013, 17:27
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от tsigel
Если канвас совпадает по размеру с картой, то никаких проблем, координаты арии и будут координатами канваса.
Тогда - ясно
Хотя имхо картинкой не сложнее, и чище *часто по пойнтерам в coords более грубый край, нежели реально в самой картинке Карты, поэтому есть ограничения по плавности краёв. Картинка может сгладить эти края и вдобавок, каждой области можно всунуть отмасштабированную в меньшем размере, с увеличением при клике(где уже видны: города - заводы улицы и .т.д)
Вообще занимался впихиванием фреймом гугол-карты в области

Последний раз редактировалось Deff, 06.02.2013 в 18:17.
Ответить с цитированием
  #23 (permalink)  
Старый 06.02.2013, 17:37
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Deff,
Нууу... Тут как сказать, я бы не сказл что Ваш вриант лучше, большое количество картинок увеличивает вес сайта, он дольше грузится, необходимо догружать картинки, чтобы они не мигали при первом наведении (если они дисплей нун). И нужно делать кучу картинок.

С другой стороны канвас медленно работает в ИЕ (и то только со скриптом) и т.д.

Каждый делает так как ему удобнее, мне было удобнее так
Ответить с цитированием
  #24 (permalink)  
Старый 06.02.2013, 19:30
Новичок на форуме
Отправить личное сообщение для madwizard Посмотреть профиль Найти все сообщения от madwizard
 
Регистрация: 05.02.2013
Сообщений: 5

Сообщение от tsigel Посмотреть сообщение
Для того чтобы отображать комментарии в карте с использованием area Вам надо научиться связывать элементы. Это можно делать с помощью data() или можно сделать просто и наглядно.

Добавляем арии и метке одинаковый класс (например <area class='area lebel1' /> будет соответствовать метке <label class='label label1'></label>), тогда мы можем написать:
$('.area').hover(function() {//наведение на область
  var class; //Объявляем переменную "class"
  class = $(this).attr('class');//записали в переменную класс арии (class = "area lebel1")
  class = class.replace('area ', '');//Удалили из переменной класс арии (class = "lebel1")
  $('.' + class).css('display', 'block');//показали метку
 }, function () {//потеря наведения на арию
  $('.label').each(function() {//цикл по всем элементам с классом label
    $(this).css('display', 'none');//скрываем все метки
  })
})


Конечно можно намного короче, постарался разжевать каждый шаг. Надеюсь что у вас остается понимание кода.
Создали карту, написали скрипт, а куда саму верстку комментария девать?

У Deff'a карта отличная, почти то что нужно, но комментарий там просто текст, а не блок с элементами =( надеюсь до меня дойдет, как все это делать =(

Последний раз редактировалось madwizard, 06.02.2013 в 22:47.
Ответить с цитированием
  #25 (permalink)  
Старый 07.02.2013, 10:07
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

например так:
<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 не во всем документе а в конкретных местах.

Последний раз редактировалось tsigel, 07.02.2013 в 10:15.
Ответить с цитированием
  #26 (permalink)  
Старый 07.02.2013, 10:32
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

<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>


Это должно навести вас на мысли как сделать подвижную метку. Будут вопросы - пишите!

Последний раз редактировалось tsigel, 07.02.2013 в 11:53.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интерактивная карта мира на jQuery - замена события при клике jacob0013 jQuery 2 28.05.2013 13:30
Интерактивная карта мира с регионами photos-masters Общие вопросы Javascript 3 29.11.2012 17:11
Интерактивная карта ТРЦ MadGest Мобильный JavaScript 1 28.04.2012 15:36
Интерактивная карта (оцените простенький скрипт) rgl Ваши сайты и скрипты 3 09.03.2011 13:42
Интерактивная карта метро goldmember Элементы интерфейса 0 09.03.2010 13:30