Прокрутка колесиком мыши в приложении, содержащем список искр - PullRequest
1 голос
/ 18 марта 2011

У меня есть приложение, отображающее список spark.List.Каждый элемент моего списка должен быть видимым (без вертикальной прокрутки).

Мне нужно, чтобы мое приложение было прокручиваемым в веб-браузере, поэтому я добавил скроллер, содержащий все мои компоненты.Когда окно браузера слишком мало для размещения всего моего приложения, появляется scrollBar.

Мое приложение выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="100%"  height="100%" >

     <fx:Declarations>
     </fx:Declarations>

    <s:Scroller id="myScroller" width="100%" height="100%">
      <s:VGroup >
        <s:Label text="toto1"/>
        <s:List>
            <s:dataProvider>
                <s:ArrayCollection>
                    <fx:String>item1</fx:String>
                    <fx:String>item2</fx:String>
                    <fx:String>item3</fx:String>
                    <fx:String>item4</fx:String>
                    <fx:String>item5</fx:String>
                </s:ArrayCollection>
            </s:dataProvider>
        </s:List>
        <s:Label text="toto2"/>
    </s:VGroup>
</s:Scroller>
</s:Application>

Моя проблема связана с событием колеса мыши.

  • Когда я прокручиваю курсор мыши за пределы списка, все работает нормально.

  • Когда я прокручиваю курсор мыши над списком, ничего не происходит.

Похоже, что событие mousewheel остановлено списком, даже если в списке нет полосы прокрутки.

Кто-нибудь знает, как решить эту проблему?

Ответы [ 3 ]

1 голос
/ 18 марта 2011

Я заметил, что скроллер виновен в захвате событий колесика мыши, даже если он не виден / не активен.

  1. Лучшим вариантом было бы, чтобы Adobe исправила эту проблему в SDK
  2. Следующим лучшим вариантом будет изменение класса скроллера, чтобы он не захватывал события колесика мыши
  3. Быстрое и грязное исправление для списка, где «Каждый элемент моего списка должен быть видимым (без вертикальной прокрутки)». это сделать быстрый повторный скин. Класс ListSkin.mxml по умолчанию немного велик для вставки сюда, так что это бит, который вам нужно изменить (примечание: я удалил комментарии):

.

<s:Scroller left="0" top="0" right="0" bottom="0" id="scroller" minViewportInset="1" hasFocusableChildren="false">
        <s:DataGroup id="dataGroup" itemRenderer="spark.skins.spark.DefaultItemRenderer">
             <s:layout>
                <s:VerticalLayout gap="0" horizontalAlign="contentJustify" requestedMinRowCount="5" />
            </s:layout>
        </s:DataGroup>
    </s:Scroller>

Просто скопируйте и вставьте весь класс в новый скин и избавьтесь от (удалите) этого Сколлера. Вы должны быть готовы, если вы теперь примените этот скин к списку в его определении или CSS.

* Вам также нужно будет удалить 4 ссылки на скроллер, которые я вижу в строках 42,45,89,95. Скроллер SkinPart не требуется классом List.

0 голосов
/ 09 июля 2013

Я нашел здесь приемлемый обходной путь: flexache

Английский ужасен, но я просто добавил ID на свой скроллер mainScroller и группу внутри него mainVGroup,и добавил обработчик событий на колесике мыши скроллера:

            mainScroller.addEventListener(MouseEvent.MOUSE_WHEEL,
               function scroller1_mouseWheelHandler(event:MouseEvent):void{
                   //calculate the new position 
                   mainVGroup.verticalScrollPosition+=(event.delta*-20);            
                   //stop the event’s bubbling
                   event.stopPropagation();
               }
           ,true);

Он не идеален (все еще немного заикается), но он подходит моей цели.

0 голосов
/ 18 марта 2011

Я внимательно посмотрел код SDK и думаю, что это ошибка. Где-то есть фрагмент кода, который не проверяет, показывает ли полоса прокрутки и выполняет «protectDefault ()» в событии, не давая ему всплыть на родительский сколлер.

Вы, вероятно, должны сообщить об ошибке на bugs.adobe.com/flex.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...