Вопрос по jquery, html, javascript – Определите, какая область на карте (imageMap) была нажата с помощью JavaScript (или jQuery)

10

Я пишу макет (используя HTML, JS / jQuery) и CSS для клиента, который включает в себя наличие одного изображения (интерфейса) с приложенной к нему картой. По причинам, которые я не объясню, когда щелкают определенную область, выполняется действие, которое включает в себя анимацию, затем изменение изображения.src (похоже, что он перемещается между интерфейсами), а затем я применяю другое изображение к изображению (возможно, я должен сказать,<img> тег)

Клиент просил об этом, я знаю, что это похоже на безумие, но у меня нет никаких инструментов макета для выполнения анимации и т. Д., И т. Д.

Я заметил шаблон и мог бы реорганизовать свой код, чтобы его было легче расширять и поддерживать. Однако мне было интересно, скажем, у меня есть следующий HTML:

<img src="claas_ipad3.jpg" USEMAP="#claas_ipad3" width="1130" height="871" alt="" border="0" id="mainPage">
    <map name="claas_ipad3">
      <area shape="rect" coords="181,249,255,341" href=""  alt="" id="Contacts">
      <area shape="rect" coords="345,251,454,341" href=""  alt="" id="Appointments">
      <area shape="rect" coords="533,256,576,311" href=""  alt="" id="Maps">
      <area shape="rect" coords="686,255,785,344" href=""  alt="" id="Tasks">
      <area shape="rect" coords="835,246,973,348" href=""  alt="" id="Products">
      <area shape="rect" coords="176,412,278,513" href=""  alt="" id="Reports">
      <area shape="rect" coords="330,411,457,513" href=""  alt="" id="PriceTable">
      <area shape="rect" coords="502,399,637,518" href=""  alt="" id="SalesCycle">
      <area shape="rect" coords="677,398,808,519" href=""  alt="" id="MetaData">
      <area shape="rect" coords="844,408,970,510" href=""  alt="" id="Settings">
      <area shape="rect" coords="173,545,283,662" href=""  alt="" id="Vids">
      <area shape="rect" coords="328,558,461,652" href=""  alt="" id="Web">
      <area shape="rect" coords="491,559,626,666" href=""  alt="" id="Files">
    </map>

Могу ли я определить с помощью JavaScript или jQuery, была ли нажата область? Тогда я мог бы идентифицировать идентификатор и выполнить правильные действия. То, что у меня сейчас есть, это много разных условий, как ...

 $("#Contacts").click(function(event){
            event.preventDefault();

            // okay lets show the contacts interface
            $("#mainPage").fadeOut(300, function(){
                $(this).attr('src','claas_ipad3_1.jpg').bind('onreadystatechange load', function(){
                    if (this.complete){
                        $(this).fadeIn(300);
                        $(this).attr('USEMAP','#claas_ipad_1');
                    }
                    });
                });
            });

Однако, если я знаю, в какой области щелкнули (путем определения идентификатора), я могу применить значения массива к общей функции, а не привязывать ее к областям карты.

Я думал, что смогу определить идентификатор того, на что нажали что-то вроде этого:

$(this).live('click', function () {
    alert($(this).attr('id')); 
});

однако это повлияет на всю мою страницу, что не является проблемой, но я знаю, что это не сработает.

Извините, если я не объяснил себя хорошо или моя формулировка плохая. Я могу расширить или перефразировать при желании.

Спасибо

UPDATE

Я решил это, если я приложу идентификатор к карте, используя следующее вернет идентификатор

 $("#Map1 area").click( function () {
        alert($(this).attr('id')); // this
    });

Ваш Ответ

1   ответ
9

Я думаю, что самым простым будет этот:

$("map[name=claas_ipad3] area").live('click', function () {
    alert($(this).attr('id')); 
});

Обратите внимание, что в jQuery 1.7 метод .live () устарел, и вы должны использовать .on () для присоединения обработчиков событий:

$("map[name=claas_ipad3] area").on('click', function () {
    alert($(this).attr('id')); 
});
Это даже лучше, чем я придумал (см. Обновление) Mike Sav
Замечания:.live() был заменен на.on() in jQuery 1.7 =>

Похожие вопросы