Как создать <DIV> рядом с курсором?
Необходимо с помощью javascript как можно проще создать <DIV>text</DIV> рядом с курсором, который следовал бы за ним.
Получить координаты курсора можно например через clientX/clientY или pageX/pageY. Дам толчок... Допустим при наведении на ссылку (onmouseover) див появляется по координатам курсора: x = clientX + 20; y = clientY + 20;и исчезает после убирания курсора с ссылки (onmouseout) А как нарисовать сам див? |
var div = document.createElement('div');
div.style.position = 'absolute';
div.style.left = x; // Координаты дива X и Y не забываем указать еденицы измерения,
div.style.top = y; // например 40px или 20%
div.style.background = 'red'; // Див с красной заливкой ))
div.appendChild(document.createTextNode('Я обычный текст')); // Добавим текст в див
document.body.appendChild(div); // Добавим наш див на страницу
DOM: работа с HTML-страницей Координаты элемента на странице Основы javascript Рекомендую изучить основы языка |
Дружище, ты не представляешь, как выручаешь меня, я уже 2 ночи не сплю, а ты меня спас :thanks:
|
Появился другой вопрос. А как теперь удалить созданный див? А то я его создаю при наведении на ссылку, но нужно чтобы он еще и удалялся после отвода курсора со ссылки. Вот мой код:
<html>
<head>
<script type="text/javascript">
window.onload = function () {
var arayLink = document.getElementsByTagName('a'),
totalLink = arayLink.length;
while (totalLink--) {
arayLink[totalLink].addEventListener('mouseover', havejpg, false);
}
function havejpg (e) {
var div = document.createElement('div');
if (e.target.href.match(/jpg$/)) { //Проверяем, что в имени файла по ссылке расширение .jpg
// alert('Ссылка содержит буквы jpg');
x = e.clientX;
y = e.clientY;
div.style.position = 'absolute';
div.style.left = x + 20; // Координаты дива X и Y не забываем указать еденицы измерения,
div.style.top = y + 20; // например 40px или 20%
div.style.background = 'green'; // Див с зеленой заливкой ))
div.appendChild(document.createTextNode('Я обычный текст')); // Добавим текст в див
document.body.appendChild(div);
}
// else {
// alert('Ссылка не содержит буквы jpg');
// }
}
}
</script>
</head>
<body>
<a href="img.jpg"> Ссылка 1 </a><br />
<a href="my.txt"> Ссылка 2 </a><br />
<a href="here.mp3"> Ссылка 3 </a><br />
<a href="you.jpg"> Ссылка 4 </a><br />
<a href="i.png"> Ссылка 5 </a><br />
</body>
</html>
|
<html>
<head>
<script type="text/javascript">
window.onload = function () {
var arayLink = document.getElementsByTagName('a'),
totalLink = arayLink.length;
while (totalLink--) {
arayLink[totalLink].addEventListener('mouseover', havejpg, false);
}
function havejpg (e) {
var div = document.createElement('div');
if (e.target.href.match(/jpg$/)) { //Проверяем, что в имени файла по ссылке расширение .jpg
// alert('Ссылка содержит буквы jpg');
x = e.clientX;
y = e.clientY;
div.style.position = 'absolute';
div.style.left = x + 20; // Координаты дива X и Y не забываем указать еденицы измерения,
div.style.top = y + 20; // например 40px или 20%
div.style.background = 'green'; // Див с зеленой заливкой ))
div.appendChild(document.createTextNode('Я обычный текст')); // Добавим текст в див
document.body.appendChild(div);
// Функция удаляет новый див
function deleteDiv () {
document.body.removeChild(div); // Удаление дива
// Удаляем обработчик события "уход курсора с элемента" текущей ссылки
e.target.removeEventListener('mouseout', deleteDiv, false);
}
// Добавим обработчик события "уход курсора с элемента" текущей ссылки, будет вызвана функцыя deleteDiv
e.target.addEventListener('mouseout', deleteDiv, false);
}
// else {
// alert('Ссылка не содержит буквы jpg');
// }
}
}
</script>
</head>
<body>
<a href="img.jpg"> Ссылка 1 </a><br />
<a href="my.txt"> Ссылка 2 </a><br />
<a href="here.mp3"> Ссылка 3 </a><br />
<a href="you.jpg"> Ссылка 4 </a><br />
<a href="i.png"> Ссылка 5 </a><br />
</body>
</html>
|
Magneto,
Любопытно одно, почему это еще и работает... ведь дивак ты создаешь внутри функции havejpg причем не в глобальном пространстве. И при этом функция deleteDiv где-то его находит... странно однако. |
devote Может показаться что функции работают следующим образом, когда функции нужно сделать
чтото с переменной то она попробует найти эту переменную внутри себя, внутри своей области видимости и если она не находит нужную переменную то она обращается к глобальной области видимости. Но это не так. На самом деле функции при поиске нужных переменных просто поднимаются вверх по областям видимости родительских функций (ох загнул :)) К примеру код:
var a = 'Я глобальная переменная A';
var b = 'Я глобальная переменная B';
function first () {
var a = 'Я переменная A обьявленная в функции first';
function second () {
alert(a);
alert(b);
}
second();
}
first();
При запуске функции second первому алерту нужна переменная А но ее нету внутри функции, поэтому функция попробует найти эту переменную в родительской функции, тоесть в функции first. Здесь эта переменная есть. А при запуске второго алерта функция попробует найти переменную B в родительской функции(first) но там ее нету, поэтому нужно подниматься еще выше, а выше глобальная область видимости. Поэтому сколько у функции есть родительских функций, столько она и будет подниматься в поисках нужно переменной. Это очень похоже на всплытие событий. |
Magneto,
Я вкурсе как работает scope речь не об этом... речь о том что я не обратил внимания на то что функция deleteDiv находиться внутри havejpg... Вот щас внимательнее посмотрел и увидел... Сорри, моя невнимательность породила мой вопрос. |
А можно как-нибудь сделать, чтобы div еще и следовал за курсором? Навожу на ссылку, появляется, но если водить по ссылке, он остается на месте, а нужно сделать чтобы и двигался тоже.
В идеале будет даже сделать это условие опционально. Что-то вроде:
function check()
{
if checkbox.checked = true {следовать за курсором}
else {не следовать, но все равно появляться}
}
|
| Часовой пояс GMT +3, время: 11:45. |