Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Непонятное поведение полосы прокрутки в контейнере (https://javascript.ru/forum/dom-window/11980-neponyatnoe-povedenie-polosy-prokrutki-v-kontejjnere.html)

mouse_web 24.09.2010 12:14

Непонятное поведение полосы прокрутки в контейнере
 
Здравствуйте!
Проблема заключается в следующем. Есть контейнер с текстом, ему задан стиль overflow:auto. Текст заведомо больше размера контейнера, поэтому появляется прокрутка. Если прокрутить текст вниз прокруткой и перевести курсор на текст, то прокрутка вернется на самый верх.

В Firefox и IE7 такого не происходит. Все остальные браузеры, включая IE8, некорректно отрабатывают.

Как устранить это досадное недоразумение?
Помогите, пожалуйста!

Код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<style>
.block { position:absolute; display:none; width:120px; height:100px; overflow:auto; background-color:#fff; border:1px solid #000; }
.block a { display:block; padding:3px; background-color:#fff; }
.block a:hover { background-color:silver; }
</style>
<script>
function open_close(w) {
   document.getElementById('block').style.display = w ? 'block' : 'none';
}
</script>
</head>
<body>

<div id=block class=block onmouseover="open_close(1)" onmouseout="open_close()"><a href="">Ссылка 1</a><a href="">Ссылка 1</a><a href="">Ссылка 1</a><a href="">Ссылка 1</a><a href="">Ссылка 1</a><a href="">Ссылка 1</a><a href="">Ссылка 1</a><a href="">Ссылка 1</a><a href="">Ссылка 1</a><a href="">Ссылка 1</a><a href="">Ссылка 1</a><a href="">Ссылка 1</a><a href="">Ссылка 1</a><a href="">Ссылка 1</a></div><a href="javascript:open_close(1)">открыть блок</a>

</body>
</html>


События onmouseover и onmouseout обязательны. Когда курсор на контейнере он должен быть инициализирован, когда курсор уходит с контейнера, он должен закрываться.

Kolyaj 24.09.2010 12:19

События mouseover/mouseout всплывают с внутренних элементов.

mouse_web 24.09.2010 12:56

Тоесть получается, что с каждого внутреннего элемента происходит инициализация блока open_close(1) и прокрутка поднимается наверх?
Тогда как это устранить?

Kolyaj 24.09.2010 12:59

Проверять источник события.

mouse_web 24.09.2010 13:09

А можно по подробнее или ссылочку на пример кода. Не совсем понимаю как это.

Kolyaj 24.09.2010 13:12

http://javascript.ru/tutorial/events...nye-s-sobytiem

mouse_web 24.09.2010 16:40

Все же не удается перехватить источник. Т.к. если наводить курсор на полосу прокрутки блока то срабатывают onmouseout и onmouseover, и окно закрывается.

рони 26.09.2010 07:08

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
<style type="text/css">
.block { position:absolute; display:none; width:120px; height:100px; overflow:auto; background-color:#fff; border:1px solid #000; }
.block a { display:block; padding:3px; background-color:#fff; }
.block a:hover { background-color:silver; }
</style>
<script type="text/javascript">
function open_close() {
    document.getElementById("block").style.display = "block";
    document.onmousemove = function (a) {
        a = a || window.event;
        a = (a.target || a.srcElement).tagName.toLowerCase();
        if (a == "body" || a == "html") {
            document.getElementById("block").style.display = "none";
            document.onmousemove = null
        }
    }
};
</script>
<title></title>
</head>
<body>
<div id="block" class="block" >
    <a href="">Ссылка 1</a><a href="">Ссылка 1</a>
    <a href="">Ссылка 1</a><a href="">Ссылка 1</a>
    <a href="">Ссылка 1</a><a href="">Ссылка 1</a>
    <a href="">Ссылка 1</a><a href="">Ссылка 1</a>
    <a href="">Ссылка 1</a><a href="">Ссылка 1</a>
    <a href="">Ссылка 1</a><a href="">Ссылка 1</a>
    <a href="">Ссылка 1</a><a href="">Ссылка 1</a>
  </div>
<a href="javascript:open_close()" >открыть блок</a>
</body>
</html>

mouse_web 26.09.2010 13:08

Спасибо! Очень помогло в решении проблемы.

MikhailGirshberg 27.09.2010 11:55

Не все браузеры под виндой справились
 
FF, GC, Opera - без вопросов
IE8 - вообще пример не запустился (возможно, проблема с запуском примеров);
Safari - не работает ссылка "открыть блок"


Часовой пояс GMT +3, время: 04:26.