Всплывающее окно
Частенько хочется чтобы при наведении мыши на элемент рядом отображался блок с подробной информацией или элементами интерфейса позволяющими что-то поменять. Никаких велосипедов тут нет, просто небольшая памятка в помощь.
Итак, у нас есть елемент 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
);
|
лайба не актуальная
Это памятка, как человек не должен писать код! Вначале добавляем элемент и уже потом начинаем менять свойства css, да? Памятка, как сделать код не кроссбраузерным. Где attachEvent? Какой смысл указывать смещение в пунктах и почему координаты смещения нельзя достать из родителя? Да, это не велосипед, но и не памятка. Это неудачный костыль.
< Вначале добавляем элемент и уже потом начинаем менять свойства css, да?
Можно поподробней, как правильно сделать, менять свойства и потом добавлять элемент?
Насчет того почему не надо менять свойства css после создания элемента - догадываюсь что так браузеру прийдется отрисовывать элемент дважды. Или есть еще что-то? На самом деле, почему?
attachEvent отсутствует потому что этот код должен донести идею, а не служить для копипаста. В противном случае будет загромождение кода.
Какой смысл указывать смещение в пунктах и почему координаты смещения нельзя достать из родителя? А смысл в том что смещение может быть задано в CSS файле.
Отправить комментарий
Приветствуются комментарии:Для остальных вопросов и обсуждений есть форум.