Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   события update для скроллеров (http://www.flasher.ru/forum/showthread.php?t=163935)

in4core 12.08.2011 12:55

события update для скроллеров
 
Таков вот вопрос. Скроллер по маус-мув делает обновление контента ( тащит по y ) - все стандартно.
Интересует как лучше повесить событие апдейта , когда маус мув не используется, а именно -
При изменении внутренности контента.
Тоесть например, прокрутили мы до середины контента, нажали кнопочку и сменили чайлды контента - нужен апдейт, или же никуда не крутили, но контент стал меньше маски ( скролл теперь не нужен ) - нужен апдейт на это.
По логике нужно создать какое то событие типа евент.CHANGE - для контента? Но при каком случае туда писать? Вариант с изменением кол-ва чайлдов отпадает, это ясно.

Bgg 12.08.2011 13:00

Слушать ENTER_FRAME у контейнера в котором лежит контент и при изменении размеров делать то, что нужно.

in4core 12.08.2011 13:03

Событие фрейма очень мне не нравится, зачем обновлять постоянно счетчик, когда с ним вообще не работают? нафига эти лишние нагрузки.

Bgg 12.08.2011 13:12

Какой ещё счетчик? ENTER_FRAME шлется всегда и везде. Какая ещё нагрузка? На проверку условия из двух параметров?
Код AS3:

private function enterFrameHandler(event:Event):void{
        if(_contentHeight < _container.height || _contentHeight > _container.height){
                _contentHeight = _container.height;
                //меняем скролл.
        }
}

Ну или таймер, если у вас страх перед ENTER_FRAME, но это имхо уже велосипед.

dimarik 12.08.2011 13:16

ENTER_FRAME однозначно.

DaFive 12.08.2011 13:17

Ну если так хочется без ентер-фрейма - ты знаешь когда и где может произойти смена состояния контейнера. Диспатч событие по клику или по чему там еще.

derhab 12.08.2011 16:48

Цитата:

Сообщение от in4core (Сообщение 1020783)
Тоесть например, прокрутили мы до середины контента, нажали кнопочку и сменили чайлды контента - нужен апдейт, или же никуда не крутили, но контент стал меньше маски ( скролл теперь не нужен ) - нужен апдейт на это.
По логике нужно создать какое то событие типа евент.CHANGE - для контента?

слушайте событие Event.ADDED и Event.REMOVED у контейнера контента, проверяйте и меняйте. ENTER_FRAME тут избыточен

Bgg 12.08.2011 16:53

Цитата:

Сообщение от derhab (Сообщение 1020910)
слушайте событие Event.ADDED и Event.REMOVED у контейнера контента, проверяйте и меняйте. ENTER_FRAME тут избыточен

А если в контейнере будет текст?

derhab 12.08.2011 16:57

для текста есть соответствующее событие change
любое изменение в контенте всегда можно отследить именно в момент изменения, нет никакой необходимости проверять состояние контента в каждом кадре

etc 12.08.2011 16:59

derhab, да оно не всплывает. Не говоря уже о простом движении элементов.
Лично я за событие RESIZE.

derhab 12.08.2011 17:01

Цитата:

Сообщение от etc (Сообщение 1020915)
derhab, да оно не всплывает. Не говоря уже о простом движении элементов.
Лично я за событие RESIZE.

что не всплывает?
с движением да, сложнее

Bgg 12.08.2011 17:04

Цитата:

Сообщение от derhab (Сообщение 1020914)
для текста есть соответствующее событие change
любое изменение в контенте всегда можно отследить именно в момент изменения, нет никакой необходимости проверять состояние контента в каждом кадре

А размеры Sprite? А анимация? Собственные классы тоже специально для скролла должны содержать события Change?

Что страшного в ENTER_FRAME? Сто лет назад написал скролл который который принимает Любой визуальный контент, и имеет обработчик ENTER_FRAME. Из проекта в проект пользуюсь им ничего не меняя.

etc 12.08.2011 17:10

derhab, не всплывает CHANGE.

derhab 12.08.2011 17:16

Цитата:

А размеры Sprite? А анимация? Собственные классы тоже специально для скролла должны содержать события Change?
я говорил о том случае если контент это просто текст. В случае с ADDED и REMOVED тоже предполагалось отслеживать изменения тольео при добавлении или удалении..
С анимациями внутри, если меняется размер контента при этом, то конечно то что я предложил не катит.

Цитата:

Что страшного в ENTER_FRAME?
да ничего страшного))
просто в данном случае избыточно, я уже написал...

etc 12.08.2011 17:26

derhab, сорри, событие оказалось всплывающим. Кошмар.

derhab 12.08.2011 17:31

да, вот я тоже смотрю и думаю.. )
etc, а как тут RESIZE может помочь? Оно ж при изменении размеров Stage рассылается

dimarik 12.08.2011 17:35

Он про кастомный говорит.

derhab 12.08.2011 17:37

Цитата:

Сообщение от dimarik (Сообщение 1020926)
Он про кастомный говорит.

а..ясно

dimarik 12.08.2011 17:38

Я отказался от Event.ADDED и Event.REMOVED. Уж очень накладно получается. Шлют их из кроны все кому не лень. А про ENTER_FRAME была шутка.

derhab 12.08.2011 17:40

Цитата:

Сообщение от dimarik (Сообщение 1020931)
А про ENTER_FRAME была шутка.

я так и подумал

Добавлено через 8 минут
Цитата:

Сообщение от dimarik (Сообщение 1020931)
Я отказался от Event.ADDED и Event.REMOVED. Уж очень накладно получается. Шлют их из кроны все кому не лень.

а вот тут не понял..
если я подписываю объект(контейнер куда будут добавляться дети) на Event.ADDED, то событие срабатывает в 2-х случаях, когда сам контейнер добавлен на сцену и когда в него добавляются дети. В обработчике нужно только исключить первый вариант. То же самое с Event.REMOVED.
Или я чего-то не понял?

fljot 12.08.2011 23:03

Никакой панацеи нет, надо разрабатывать свою архитектуру. Посмотри, как это сделано во флексе. Нужено решение один раз и навсегда — надо городить архитектуру аля флекс. Для конкретного случая — придётся что-то хардкодить-жёсткозавязывать, т.е. учитывать как изменяется контент "вручную". Насчёт ENTER_FRAME это явно подкололи.

dimarik 12.08.2011 23:48

Цитата:

Сообщение от derhab (Сообщение 1020934)
если я подписываю объект(контейнер куда будут добавляться дети) на Event.ADDED, то событие срабатывает в 2-х случаях, когда сам контейнер добавлен на сцену и когда в него добавляются дети. В обработчике нужно только исключить первый вариант. То же самое с Event.REMOVED.
Или я чего-то не понял?

Не только дети, но и другие потомки. Добавили вы мувиклип, а там два кадра с разными детками. Вот они и шлют каждый фрейм событие ADDED и REMOVED.

Добавлено через 51 секунду
Событие всплывающее.

etc 15.08.2011 13:59

Делать универсальный скроллер на всё и вся с отслеживанием изменения размеров контента по ENTER_FRAME не самая удачная затея. Такой скроллер подойдёт чайникам, например.

in4core 15.08.2011 15:40

Да это понятно, значит ресайз будет тру


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

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