Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как определить что курсор на скроллере (http://www.flasher.ru/forum/showthread.php?t=124890)

johannes 12.05.2009 02:19

Как определить что курсор на скроллере
 
Делаю чат на flash (AS2). Прикрутил стандартный скроллер к динамическому текстовому полю. При появлении нового сообщения весь чат скроллится до самого низа
Код AS1/AS2:

chat_txt.scroll = chat_txt.maxscroll;

надо сделать чтобы когда курсор находится на скроллере (т.е. пользователь прокручивает чат вверх чтобы прочесть прежние сообщения) в этот момент maxscroll не срабатывал. Ни одно событие применимое к UIScrollbar не смог применить. Есть какие-то решения?

mooncar 12.05.2009 02:35

Может быть заносить значение scroll в переменную и делать моментальный откат после срабатывания механизма компонента? Сделать это для пользователей незаметным.
Мне тоже предстоит скоро решить эту задачу.

johannes 12.05.2009 16:05

Цитата:

Сообщение от mooncar (Сообщение 819140)
Может быть заносить значение scroll в переменную и делать моментальный откат после срабатывания механизма компонента? Сделать это для пользователей незаметным.
Мне тоже предстоит скоро решить эту задачу.

не покатит...
Есть еще у кого какие варианты?

Добавлено через 3 часа 12 минут
Вобщем пока придумал такое решение: вычислил координаты области скроллбара и если курсор находится в пределах этих координат, то чат не скроллится автоматически при появлении нового сообщения :D:D

Kuruki 12.05.2009 20:17

Код AS1/AS2:

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 минут
Цитата:

Сообщение от Kuruki (Сообщение 819304)
Код AS1/AS2:

var srollFlag:Boolean = true;
...
if(srollFlag) chat_txt.scroll = chat_txt.maxscroll;
...
sbar.onMouseDown = function(){
        srollFlag = false;
}
sbar.onMouseUp = function(){
        srollFlag = true;
}


хм.. этот код действует не только на нажатие скроллера, а на нажатие мыши в любом месте флешки :(

mooncar 12.05.2009 21:12

Цитата:

Сообщение от Kuruki (Сообщение 819304)
Код AS1/AS2:

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. Есть какоето решение вопроса? Очень надо

silin 16.05.2009 01:14

к ранее обсуждавшемуся варианту: может быть как-то так
Код AS1/AS2:

sbar.onMouseDown = function(){
        srollFlag = !this.hitTest(_root._xmouse,_root._ymouse);
}


mooncar 16.05.2009 02:25

Ползунок находится внутри компонента.


Часовой пояс GMT +4, время: 10:39.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.