Javascript.RU

Всплывающее окно

Частенько хочется чтобы при наведении мыши на элемент рядом отображался блок с подробной информацией или элементами интерфейса позволяющими что-то поменять. Никаких велосипедов тут нет, просто небольшая памятка в помощь.

Итак, у нас есть елемент node при наведении на который вплотную справа должен отображаться элемент popupNode.

node.appendChild(popupNode);
popupNode.style.display = "none";
popupNode.style.position = "absolute";

node.addEventListener(
    "mouseover",
    function() {
        popupNode.style.display = "block";
    },
    false
);

node.addEventListener(
    "mouseout",
    function() {
        popupNode.style.display = "none";
    },
    false
);

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

node.appendChild(popupNode);
popupNode.style.display = "none";
popupNode.style.position = "absolute";
popupNode.style.left = "20pt";
popupNode.style.top = "-20pt";

node.addEventListener(
    "mouseover",
    function() {
        popupNode.style.display = "block";
    },
    false
);

node.addEventListener(
    "mouseout",
    function() {
        popupNode.style.display = "none";
    },
    false
);

И мы видим свое окно непонятно где. Почему? Потому что смещение вычислялось не относительно node а относительно первого родителя со свойством position не равным static. Можно пойти длинным путем и вычислить точные координаты node, а можно просто добавить еще один элемент.

var tempNode = document.createElement("div");
tempNode.style.position = "absolute";
tempNode.appendChild(popupNode);

node.appendChild(tempNode);
popupNode.style.display = "none";
popupNode.style.position = "absolute";
popupNode.style.left = "20pt";
popupNode.style.top = "-20pt";

node.addEventListener(
    "mouseover",
    function() {
        popupNode.style.display = "block";
    },
    false
);

node.addEventListener(
    "mouseout",
    function() {
        popupNode.style.display = "none";
    },
    false
);
-1

Автор: Гость (не зарегистрирован), дата: 14 июня, 2011 - 17:22
#permalink

лайба не актуальная


Автор: I-zone, дата: 16 июня, 2011 - 09:07
#permalink

Это памятка, как человек не должен писать код! Вначале добавляем элемент и уже потом начинаем менять свойства css, да? Памятка, как сделать код не кроссбраузерным. Где attachEvent? Какой смысл указывать смещение в пунктах и почему координаты смещения нельзя достать из родителя? Да, это не велосипед, но и не памятка. Это неудачный костыль.


Автор: majahead, дата: 21 июня, 2011 - 12:24
#permalink

< Вначале добавляем элемент и уже потом начинаем менять свойства css, да?
Можно поподробней, как правильно сделать, менять свойства и потом добавлять элемент?


Автор: DrunkenStranger, дата: 27 июня, 2011 - 12:53
#permalink

Насчет того почему не надо менять свойства css после создания элемента - догадываюсь что так браузеру прийдется отрисовывать элемент дважды. Или есть еще что-то? На самом деле, почему?

attachEvent отсутствует потому что этот код должен донести идею, а не служить для копипаста. В противном случае будет загромождение кода.

Какой смысл указывать смещение в пунктах и почему координаты смещения нельзя достать из родителя? А смысл в том что смещение может быть задано в CSS файле.


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
11 + 9 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Другие записи этого автора
Больше записей нет. Прокомментируйте эту запись - может быть, тогда он что-нибудь еще хорошее напишет ;)
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Популярные таги
Последние комментарии
Последние темы на форуме
Forum