Как реализовать выделение области при наведении курсора?

Статус
В этой теме нельзя размещать новые ответы.
Не совсем понял, что делать с первой частью кода. Пробовал и так и так, карта просто пропадает. Объясните, пожалуйста подробнее.

Еще вопрос. Как реализовать, чтобы у разных областей были разные цвета. Т.е. есть области, где есть представительство, тут все правильно. А если в области нет представительства, каким образом исправить код, чтобы они отображались другим цветом или были не кликабельными? Нужен какой-то дополнительный параметр для их идентификации? Буду благодарен за ответ.
 
Сейчас не могу вам подсказать, так как занят по своей работе. Чуть позже я отредактирую этот пост, а вы пока все-таки посмотрите в сторону jQuery — там многие вещи решены намного лучше и надежнее, чем я вам на коленке соберу.
 
полный код уже не помню, т.к. делал подобное достаточно давно, но общий смысл в абсолютном позиционировании
т.е. для каждой области делается отдельный блок, которому с помощью
HTML:
position:absolute;
left:значение;
top:значение;
задаются координаты - таким образом блоки "перекрывают" друг друга
ну а изменение цвета - это всего лишь изменение картинки на другую...
 
Сейчас не могу вам подсказать, так как занят по своей работе. Чуть позже я отредактирую этот пост, а вы пока все-таки посмотрите в сторону jQuery — там многие вещи решены намного лучше и надежнее, чем я вам на коленке соберу.

В сторону jQuery смотрел. Но готового решения там нет, а переделать под себя почему-то не удалось. Лучше всего пока отображается решение предложенное вами. Заранее благодарен за помощь.
 
Что-то не получается отредактировать предыдущий пост, видимо, из-за давности, потому пишу так.
У меня по работе возникла похожая задача, и я после экспериментов пришел к выводу, что все-таки лучше использовать растровую графику, а не векторную. Потому вот вам (смотрите аттач) другое решение, а теперь о том, как оно работает:
HTML:
<div id="page">
    <div id="map">
        <div class="obl_image" id="kievskaya">
            <a href="#" class="pointer" rel="kievskaya_desc"></a>
        </div>
    </div>
    <div id="descriptions">
        <div class="description" id="kievskaya_desc">
            <h2>Заголовок</h2>
            <p>Описание</p>
        </div>
    </div>
</div>
В этом примере я оставил только одну область, чтобы было понятнее. Как видите, для самой карты у нас есть родительский блок (div id="map"), который содержит другие блоки (class="obl_image" id="kievskaya"). Атрибут class мы используем потому, что некоторые свойства у всех областей будут одинаковыми, и чтобы не писать их по двадцать раз, мы в css их запишем одним правилом:
Код:
.obl_image {
    position: absolute;
    background-color: transparent;
    background-position: top left;
    background-repeat: no-repeat;
}
А атрибут id мы используем уже для точных правил для каждой области (фоновый рисунок ведь разных у всех областей).
В каждом блоке есть еще гиперссылка с указанным атрибутом rel. Это значение связывает эту ссылку с описанием представительств области:
Код:
<a href="#" class="pointer" rel="[COLOR='DarkRed']kievskaya_desc[/COLOR]"></a>
<div class="description" id="[COLOR='DarkRed']kievskaya_desc[/COLOR]">
При помощи jQuery мы будем подгружать нужное описание при нажатии на нужную ссылку.
С его же помощью при наведении на ссылку мы дописываем блоку с областью класс hovered, а при нажатии — clicked. Каждый из этих классов изменяет фоновое изображение блока. (по уму нужно было бы сделать это все на спрайтах, но у меня не было времени считать сдвиги background-position, так как у меня и так ушло 40 минут на расстановку картинок областей и ссылок по местам).
Собственно, это все. Если вам нужна карта других размеров, вам нужно будет нарезать картинки областей и переписать css под новые размеры. Для нарезки я пользовался inkscape, а саму карту нашел в интернетах (на википедии, кажется). Открыл карту в inkscape, она оказалась уже поделенной на области, так что дальше оставалось только экспортировать области в растр в формате png с прозрачностью.
Преимущества у метода те же: весь текст постоянно находится на странице (в отличии от flash). Плюс, в отличии от векторного варианта, вы можете теперь раскрасить области как хотите (можете все в один цвет, как в моем примере, можете проявить художественный вкус и окрасить все области разными цветами, а то и вообще залить текстурой).
Если в какой-то области у вас нет представительства, просто уберите ссылку внутри блока с этой областью: (<a href="#" class="pointer" rel="kievskaya_desc"></a>).
В архиве в папке images есть изображения для трех состояний каждой области: inactive, hover, click. Можете сделать еще одно состояние, чтобы красить области без ваших представительств в свой собственный цвет (с CSS разберетесь, там ничего сложного).
P.S.: карта какая-то эмо-подобная получилась.
 

Вложения

  • map.rar
    269,6 KB · Просмотры: 24
Так может кто нибудь подсказать готовое решение на jQuery. Чтобы при наведении на картинку выводился увеличенный её прототип, а при расфокусировке убирался.
 
Eihwaz, все работает, спасибо. Возникла правда одна проблема - при нажатии на выделенную область (именно при нажатии, а не наведении) - страницу прокручивало наверх. А карта расположена внизу страницы. Но проблема была решена путем замены
на
href="javascript:void(0);"
.
В остальном - все просто отлично! :)
 
Ага, только смотрите, я в примере, кажется, забыл Закарпатскую область, пользователи могут не понять, если что :)
P.S.: Кстати, там в примере три состояния каждой области, хотя в общем, можно обойтись двумя: при наведении и нажатии. А сам фоновый рисунок карты в таком случае будет заменять "неактивное" состояние.
И еще одно: я попробовал, можно безболезненно заменить png областей на gif'ы — в качестве почти ничего не теряете благодаря фоновому рисунку карты, зато весит меньше.
 
Пользуюсь этим скриптом. Очень богатый функционал и кроссобраузерность... И документация приличная.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху