Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Мышь над скролбаром


Автор: Smak 26.2.2007, 23:26
Пишу себе чат. Проблемма со скролом.
Скролл опускается вниз каждые 300 милискунд. При попытке поднять его вверх он естественно практически сразу опускает скролл вниз, тем самым не позволяет просмотреть прошлые сообщения.

Есть:
Код

function scroller(obj)
{
    obj.scrollTop=obj.scrollHeight;
}

setInterval('scroller(document.getElementById(\"res\"))',300);


Я так понимаю надо: 
Код

function scroller(obj)
{
     if (мышь не над скролом) obj.scrollTop=obj.scrollHeight;
}

setInterval('scroller(document.getElementById("res"))',300);

res - это div в котором и есть текст

Собственно как определить находится мышь над скролом или нет?

ЗЫ: почему-то setInterval('',300); с меньшем интервалом времени работать не хочет.

Автор: AKS 27.2.2007, 10:58
Smak, можно попытаться сделать так:
Код

function doScroll(aObj) {
    if (!aObj.onMouseOvered)
        aObj.scrollTop = aObj.scrollHeight;
    setTimeout(function () { doScroll(aObj); }, 1000);
}

где св-во onMouseOvered (говорит само за себя) будет менять значения true/false. Для этого нужно на блок "повесить" обработчики событий onmouseover/onmouseout.

Автор: Smak 27.2.2007, 11:55
Цитата(AKS @  27.2.2007,  15:58 Найти цитируемый пост)
Для этого нужно на блок "повесить" обработчики событий onmouseover/onmouseout.

дык в этом вопрос и заключается. как собственно представить этот обработчик?

Автор: 12345c 27.2.2007, 13:55
Специально скроллбар никаким событием не выделяется. Но относится к документу. Поэтому нужно ловить d.body.onmousemove и анализировать положение в окне (свойство в event). Сложными вычислениями определяем, где она находится. ("Сложность" в том, чтобы прежде узнать ширину и наличие скролла другими измерениями.)

(Другие измерения, предупрежу вопрос, - сделать объект с width=100% и bottom:0, взять координаты, сравнить с размерами окна. Определится, есть ли скроллбары и их ширина. Немного по-разному этот объект (div) ведёт себя в разных браузерах, так что настройка на полдня обеспечена.)

Добавлено @ 14:00 
Да, но по задаче, такого не надо. Достаточно просто узнать, что мышь правее какой-то границы, и отключить скролл. Или отключить, пока мышь нажата. Или (лучше) включать только тогда, когда юзер сам подвёл скролл к нижней границе (вычисляется разностью scrollTop, offsetHeight и чего-то там ещё).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)