Как сделать так, чтобы onmouseout учитывал увеличившийся размер контейнера?
Возьмём вот такой код:
<span id="one" onmouseover="AddString()" onmouseout="RemoveString()">Pervaya Stroka
<span id="two" style="display:block"></span>
</span>
<script>
function AddString() {
document.getElementById("two").innerHTML = 'VtorayaStroka';
}
function RemoveString() {
document.getElementById("two").innerHTML = '';
}
</script>
Когда наводишь мышкой на "Pervaya Stroka", скрипт добавляет вторую строку. Когда уводишь курсор с первой строки, вторая строка исчезает. Надо: Когда наводишь мышкой на "Pervaya Stroka", скрипт добавляет вторую строку. Когда уводишь курсор с первой строки В ЛЮБОЕ МЕСТО, КРОМЕ ВТОРОЙ СТРОКИ, вторая строка исчезает. Если честно, текущих знаний мне не хватило, чтобы это реализовать. Что я пробовал:
<span id="one" onmouseover="AddString()">Pervaya Stroka
<span id="two" style="display:block"></span>
</span>
<script>
function AddString() {
var element = document.getElementById("one");
element.removeEventListener("mouseover", AddString);
document.getElementById("two").innerHTML = 'VtorayaStroka';
element.addEventListener("mouseout", RemoveString, true);
}
function RemoveString() {
var element = document.getElementById("two");
element.removeEventListener("mouseout", RemoveString);
element.innerHTML = '';
element.addEventListener("mousever", AddString, true);
}
</script>
с расчётом на то, что если удалить ивент и сразу его добавить, то скрипт пересчитает высоту контейнера. Ан-нет - результат тот же. Как добиться нужного результата? |
jaroslav.tavgen,
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
#one:hover+#two,#two:hover {
display: block;
}
#two{
display: none;
}
</style>
</head>
<body>
<span id="one">Pervaya Stroka</span>
<span id="two">VtorayaStroka</span>
</body>
</html>
|
Рони, то же самое. При наведении с первой строки на вторую, вторая строка исчезает
(нужно тестировать, сделав большой зум в браузере и медленно двигая мышку, иначе в какой-то момент действительно почему-то курсор "проскочит" и вторая строка сохранится - от чего это зависит, я пока не понимаю) |
jaroslav.tavgen,
:)
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
#one:hover+#two,#two:hover {
height: 30px;
transition-delay: 0s;
}
#two{
transition-delay: .3s;
display: block;
height: 0px;
overflow: hidden;
}
</style>
</head>
<body>
<span id="one">Pervaya Stroka</span>
<span id="two">VtorayaStroka</span>
</body>
</html>
|
рони, спасибо! Выглядит рабочим вариантом.
|
рони, а есть вариант, при котором бы скрипт так же сработал при втором span, находящемся внутри первого? И чтобы было не средствами CSS, а средствами javascript?
Дело в том, что в реальном приложении второй span заполняется аяксовским запросом каждый раз при наведении мыши, а если делать 2 span'a не вложенными 1 в другой, то там нарушается расположение объектов... Мне явно надо подучить CSS, чтобы лучше контроллировать такие моменты, но хотелось бы эту конкретную проблему решить побыстрее... |
Цитата:
|
Цитата:
|
Нет, рано переходить на CSS.
Я не понимаю, какого РОЖНА вот этот код не работает?!
<span id="one" onmouseover="AddString()">Pervaya Stroka
<span id="two" style="display:block"></span>
</span>
<script>
function AddString() {
var element = document.getElementById("one");
element.removeEventListener("mouseover", AddString);
document.getElementById("two").innerHTML = 'VtorayaStroka';
element.addEventListener("mouseout", RemoveString, true);
}
function RemoveString() {
var element = document.getElementById("two");
element.removeEventListener("mouseout", RemoveString);
element.innerHTML = '';
element.addEventListener("mousever", AddString, true);
}
</script>
Смотрите, есть контейнер. После наведения мыши ВЫСОТА КОНТЕЙНЕРА УВЕЛИЧИВАЕТСЯ. _ПОСЛЕ_ этого добавляется ивент "mouseout", который должен учитывать контейнер в НОВОМ состоянии (он вообще не должен "знать", каким он был первоначально). Нет же, когда наводишь мышкой в то место, куда увеличился контейнер - он исчезает. Как это может быть?! Тут логики же никакой. Дело в скорости загрузки? Объект не успел обновить данные? Кэш работает? Или что? Объясните, пожалуйста. |
jaroslav.tavgen,
строка 30 |
| Часовой пояс GMT +3, время: 04:05. |