C, PHP, VB, .NET

Дневникът на Филип Петров


* Imagemap

Публикувано на 01 септември 2009 в раздел ХHTML.

Идеята за imagemap идва от прехода между дизайн към конкретна реализация на уеб сайт. В миналото, когато не са били налични средства за динамични обекти като Flash или Java, е било проблем създаването на „красиви“ сайтове. Често дизайнерите са давали проекти на програмистите, които не е било възможно да бъдат осъществени. Това е честа ситуация, при която художник рисува скица на важен елемент на сайта, който трябва да стане динамичен. Оказва се, че не винаги техниката на „рязане“ на картинката на части и поставянето на отделните парчета в таблица е достатъчно. Например може да се наложи да направим бутони със сложни форми – нещо неосъществимо от досегашните статии, понеже картинките винаги се вмъкват като правоъгълници.

Най-общо казано imagemap е една картинка, върху която има множество от области, които сме направили връзки. С други думи ако посочите с мишката върху точно определен обект от картинката, то ще забележите, че този обект всъщност се явява образно казано бутон за натискане.

Нека разгледаме следната картинка:

България

Да речем, че желаем да направим така, че посочвайки вътре в очертанията на София да направим връзка към страница в wikipedia. Отначало трябва да се научим да определяме координати вътре в картинката. Ще го демонстрираме как това става елементарно с MSPaint. Посочете в долният ляв ъгъл на контура на София с мишката и погледнете в долния десен ъгъл:

Взимане на координати

Всичко което трябва да направите е да запишете последователно двойките числа по контура. Между всеки две точки свързването ще бъде по права линия. Ето как би изглеждала една стравнително подробна разбивка по контура на София:

118,162, 113,162, 107,152, 105,160, 86,145, 86,137, 76,128, 96,119, 119,121, 120,130, 112,137

Контурът е винаги затворен. Това се получава като от последната точка винаги се свързва с първата. Ето как ще създадем въпросната картинка с контур около София (няма проблем да използвате както img, така и object таг за вмъкване на картинка):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="bg">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
		<title>ImageMap example</title>
	</head>
	<body>
<div>
<map id="areas" name="areas">
<area title="Sofia"
 shape="poly"
 coords="118,162,113,162,107,152,105,160,86,145,86,137,76,128,96,119,119,121,120,130,112,137"
 href="http://en.wikipedia.org/wiki/Sofia" alt="Sofia" />
<area
 title="Default"
 shape="default"
 alt="Default" />
</map>
<object usemap="#areas"
	data="https://www.cphpvb.net/wp-content/uploads/2009/09/bulgaria.PNG"
	alt="Bulgaria"
	type="image/png"
/>
</div>
</body>
</html>

Резултат:

Sofia Default

Bulgaria

Забележка: В стандарта XHTML 1.1 атрибут „name“ на таг <map> НЕ съществува. Ние обаче сме принудени да го сложим, защото Mozilla Firefox не работи без него. Аналогичен проблем е и със стойността на атрибут „usemap“ в <object> – правилният запис би трябвало да без #, но за съжаление нито един браузър все още не се е съобразил с изискването. Освен това обръщаме специално внимание, че всички координати като стойност на „coord“ трябва да са зададени на един ред – в противен случай Internet Explorer „няма да се справи със задачата“. Надяваме се тези проблеми да бъдат изчистени в бъдеще.

Възможно е да използваме и готови обекти. Вместо poly можем да използваме rect (приема за координати две точки – горен ляв и долен десен ъгъл на правоъгълник) или circ (приема три числа – координати на центъра и радиус на окръжност в пискели). Няма да се спираме подробно на тях.

Естествено няма никакъв проблем да имаме повече от една област. Просто вътре в таг „map“ трябва да добавите нов таг „area“. По-специален от всички е таг „area“ с shape „default“. Буквално преведено означава „област по подразбиране“, но дефакто е цялата картинка като правоъгълник.

За финал ще споменем, че въпреки, че imagemap е стар и все по-рядко използван похват, той все пак е изключително удобен поради липсата от нужда от каквито и да е допълнителни разширения за браузъра. Освен това кодът е изключително кратък и затова желаната функционалност се зарежда изключително бързо без да се хаби трафик или процесорно време. Затова когато функционалността е достатъчна бихме ви насърчили да използвате именно imagemap пред другите по-тежки алтернативи.

 



5 коментара


  1. Да, слоевете при CSS са много удобни и гъвкави. Надявам се да стигна дотам :)

    Предполагам нямаш предвид „прави ъгли“ а просто „ъгли“, защото в imagemap ъглите не са задължително прави. Не се заяждам – просто малка корекция.

  2. Nikola Petkov Katsarov каза:

    От много време не съм ги ползвал, но мисля че в Dreamwaver или Front Page имаше възможност да си рисуваш imagemap-а и то създава автоматично сорса.
    Новите технологии в уеб разработката позволяват чрез css да се създаде слой, който не е с прави ъгли. За съжаление не съм го пробвал и не бих се задълбочавал в тази тема :)

  3. Mila каза:

    Айде сега му направи и hover…
    M-)

  4. Да, най-лесно се прави в Dreamwaver. В Property Bar-a има два инструмента (за правоъгълни форми и полигони), които вършат перфектна работа – след създаване на полето за селекцията може да се редактира с лекота. Ето и един пример за вече съществуваща карта на България направена на този принцип с Dreamwaver (страничката ще се използва от учениците в 4 клас в часовете по Информационни технологии):

    http://iti.izkustva.net/bg-oblasti/

  5. Така е – визуалните редактори са изключително улеснение. Въпреки това учениците трябва да знаят „какво се случва зад сцената“.

Добави коментар

Адресът на електронната поща няма да се публикува


*