Просмотр полной версии : Как определить что курсор на скроллере
johannes
12.05.2009, 02:19
Делаю чат на flash (AS2). Прикрутил стандартный скроллер к динамическому текстовому полю. При появлении нового сообщения весь чат скроллится до самого низа
chat_txt.scroll = chat_txt.maxscroll;
надо сделать чтобы когда курсор находится на скроллере (т.е. пользователь прокручивает чат вверх чтобы прочесть прежние сообщения) в этот момент maxscroll не срабатывал. Ни одно событие применимое к UIScrollbar не смог применить. Есть какие-то решения?
Может быть заносить значение scroll в переменную и делать моментальный откат после срабатывания механизма компонента? Сделать это для пользователей незаметным.
Мне тоже предстоит скоро решить эту задачу.
johannes
12.05.2009, 16:05
Может быть заносить значение scroll в переменную и делать моментальный откат после срабатывания механизма компонента? Сделать это для пользователей незаметным.
Мне тоже предстоит скоро решить эту задачу.
не покатит...
Есть еще у кого какие варианты?
Добавлено через 3 часа 12 минут
Вобщем пока придумал такое решение: вычислил координаты области скроллбара и если курсор находится в пределах этих координат, то чат не скроллится автоматически при появлении нового сообщения :D:D
var srollFlag:Boolean = true;
...
if(srollFlag) chat_txt.scroll = chat_txt.maxscroll;
...
sbar.onMouseDown = function(){
srollFlag = false;
}
sbar.onMouseUp = function(){
srollFlag = true;
}
johannes
12.05.2009, 20:35
спасибо! сейчас попробую!
Добавлено через 25 минут
var srollFlag:Boolean = true;
...
if(srollFlag) chat_txt.scroll = chat_txt.maxscroll;
...
sbar.onMouseDown = function(){
srollFlag = false;
}
sbar.onMouseUp = function(){
srollFlag = true;
}
хм.. этот код действует не только на нажатие скроллера, а на нажатие мыши в любом месте флешки :(
var srollFlag:Boolean = true;
...
if(srollFlag) chat_txt.scroll = chat_txt.maxscroll;
...
sbar.onMouseDown = function(){
srollFlag = false;
}
sbar.onMouseUp = function(){
srollFlag = true;
}
Это я еще нынче ночью придумал - не годится.
По сути у компонента вообще до отпускания ползунка нужно убивать привязку к целевому полю, иначе не только вниз уйдет текст, но и размер ползунка будет меняться.
А после отпускания ползунка - делать для него заново привязку через selectTraget() и возможно, делать update() (в AS3 эти методы, как я понял, существуют для UIScrollBar).
Потом начал потрошить сам компонент на предмет привязки активации к ползунку.
Надо в этом направлении работать. В AS3 у UIScrollBar есть полно унаследованных методов, там список на целый экран, а вот для AS2 в старой книжке для MX2004 (другой лит-ры у меня нет) упоминаются только, что UIScrollBar порождает события "scrolled", "complited" и еще два-три, связанные с загрузкой целевого поля, - все не то.
Нужна либо дока нормальная, где описаны всевозможные структуры компонентов а-ля mx.controls.SimpleButton либо совет кого поопытнее. В общем, с компонентами я пока не дружу, а вот кто-то еще может подскажет.
johannes
16.05.2009, 01:07
up. Есть какоето решение вопроса? Очень надо
к ранее обсуждавшемуся варианту: может быть как-то так
sbar.onMouseDown = function(){
srollFlag = !this.hitTest(_root._xmouse,_root._ymouse);
}
Ползунок находится внутри компонента.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.