Форум 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)
-   -   ScrollPane, как отловить scrollDrag? (http://www.flasher.ru/forum/showthread.php?t=95800)

BorisL 16.05.2007 17:41

Здравствуйте,
столкнулся с проблемой: не могу разобраться как отловить начало/конец "таскания" контента в скроллпейне.

Заранее спасибо.

Неужели никто не сталкивался?:)

Может быть непонятно объяснил проблему:
есть scrollPane и есть необходимость отслеживать, когда пользователь проматывает содержимое.
Таких возможностей у пользователя две:
1. Использование скроллбаров, ловится без проблем, через:
Код:

on(scroll) {
    //...
}

2. Таскание контента мышью, при scrollDrag=true.
Дак вот вопрос как раз в том, как определить то, что пользователь потащил контент мышью?

Заранее спасибо;)

etc 17.05.2007 12:18

ScrollPane какой? v2, v3, flex?

BorisL 17.05.2007 12:40

Цитата:

Сообщение от __etc
ScrollPane какой? v2, v3, flex?

Простите, не уточнил, scrollPane v2

etc 17.05.2007 13:00

Документацию читать нынче не модно?
http://livedocs.adobe.com/flash/9.0/main/00003452.html

Почему нельзя проверять при scroll значение scrollDrag?

BorisL 17.05.2007 14:44

Цитата:

Сообщение от __etc
Документацию читать нынче не модно?
http://livedocs.adobe.com/flash/9.0/main/00003452.html

Читал, но боюсь, что здесь не указано как выявить начало перетаскивания контента мышкой за сам контент.
Цитата:

Сообщение от __etc
Почему нельзя проверять при scroll значение scrollDrag?

Можно, но зачем? Оно итак известно — "true".
Вопрос в том, как перехватить начало/конец "таскания за контент"

etc 17.05.2007 14:59

Хак:

Код:

sp.scrollDrag = true;
sp.spContentHolder.onPress = function() {
        this._parent.dispatchEvent({type:'dragStart'});
        this._parent.startDragLoop();
}
sp.spContentHolder.onRelease = sp.spContentHolder.onReleaseOutside = function() {
        this._parent.dispatchEvent({type:'dragEnd'});
        delete this.onMouseMove;
}

sp — ScrollPane. Появляются два новых события dragStart и dragEnd :D
После этого кода лучше не трогать scrollDrag.

BorisL 17.05.2007 15:57

Спасибо, попробовал, но вот такая кострукция:
Код:

main_pane.scrollDrag = true;
main_pane.spContentHolder.onPress = function() {
        this._parent.dispatchEvent({type:'dragStart'});
        this._parent.startDragLoop();
}
main_pane.spContentHolder.onRelease = main_pane.spContentHolder.onReleaseOutside = function() {
        this._parent.dispatchEvent({type:'dragEnd'});
        delete this.onMouseMove;
}

scrollListenter=new Object();
scrollListenter.dragEnd=function() {
trace("smth");
}

main_pane.addEventListener("dragEnd", scrollListenter);

не работает, равно как и просто на скроллпейне
Код:

on (dragEnd) {
        trace("bla");
}


etc 17.05.2007 21:17

Гм, ну тогда соберите нерабочий пример, я поправлю.

BorisL 18.05.2007 13:44

Спасибо, __etc,
начал собирать неработающий вариант и в нем все заработало, хотя в старом по прежнему тишина:)
В старом варианте не отрабатывается сам клик мышью, то есть код:
Код:

main_pane.spContentHolder.onRelease = main_pane.spContentHolder.onReleaseOutside = function() {
        trace("bla");
}

не к чему не приводит. Стоит просто копипастом перенести scrollPane и этот код в новый файл — все начинает работать... не могу разобраться почему может быть так...

BorisL 18.05.2007 14:05

Разобрался: просто scrollPane не успевал подгрузиться.
__etc, спасибо большое.

BorisL 22.05.2007 16:58

Новая проблема, но так как тесно связано с предложенным здесь решением продолжим здесь.

__etc, после предложенного вами решения все кнопки в контенте скроллпейна становятся неактивны, видимо из-за того, что после задйствования onRelease для spContentHolder его активная область перекрыла весь контент.

Создал файл, в котором видно проблему, но не могу прикрепить файл, надеюсь понятно объяснил.

BorisL 22.05.2007 17:13

В исходнике проилюстрирована проблема: сколлПейн хакнут вышеописанным спопобом и можно отловить драгЕнд, но при этом кнопка в контенте неактивна. Если закоментировать хак, то кнопка заработает, но соответственно драгЕнд умрет.

Прикрепить файл не получается, даю ссылку на исходник в архиве (60кб).

etc 22.05.2007 22:26

Собственно, scrollDrag = true и отрубает все, что внутри ScrollPane. Хак тут непричем.

BorisL 23.05.2007 12:14

Цитата:

Сообщение от __etc
Собственно, scrollDrag = true и отрубает все, что внутри ScrollPane. Хак тут непричем.

Не совсем так. Если сделать scrollDrag = false, но оставить хак, наблюдается тот же эффект.
То есть заменить код в исходнике на:

Код:

//main_pane.scrollDrag=true;
main_pane.content.onPress = function() {
        this._parent.dispatchEvent({type:'dragStart'});
        this._parent.startDragLoop();
}
main_pane.content.onRelease = main_pane.spContentHolder.onReleaseOutside = function() {
        this._parent.dispatchEvent({type:'dragEnd'});
        delete this.onMouseMove;
}

scrollListenter=new Object();
scrollListenter.dragEnd=function() {
        trace("Меня потаскали!");
}
main_pane.addEventListener("dragEnd", scrollListenter);


etc 23.05.2007 13:29

Ну естесственно. Либо мы имеем возможность драга, либо кликать по контенту.
Можно переписать на onMouseDown + hitTest, но это фиговый вариант.

BorisL 23.05.2007 14:17

Цитата:

Сообщение от __etc
Ну естесственно. Либо мы имеем возможность драга, либо кликать по контенту.

Ага, дошел к тому же выводу... Причем scrollPane 1 позволяет иметь кликабельные элементы в контенте при scrollDrag.

Цитата:

Сообщение от __etc
Можно переписать на onMouseDown + hitTest, но это фиговый вариант.

Уточните пожалуйста как (куда копать?) и почему фиговый?:)

etc 23.05.2007 15:24

Потому что координаты мыши плавают. А куда копать, я написал же — onMouseDown и hitTest :)

BorisL 23.05.2007 15:55

Цитата:

Сообщение от __etc
Потому что координаты мыши плавают. А куда копать, я написал же — onMouseDown и hitTest :)

Уже, разобрался, спасибо.
c mc.hitTest(_xmouse,_ymouse) вполне корректно работает.


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

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