PDA

Просмотр полной версии : List component. Глюки при использовании verticalScrollPosition


Андрей911
13.10.2011, 15:07
Сделал список с использованием компонента List. В нем 187 строчек, на экран умещаются 9 из них.
Сделал 2 кнопки для постраничной перемотки этого списка вверх и вниз. На 9 строчек сразу.

Например для кнопки вниз код такой
list - это List() из fl.controls.List

list_down.addEventListener(MouseEvent.CLICK,scrollToIndexListDown);

function scrollToIndexListDown(e:MouseEvent){
var lScroll:int=list.verticalScrollPosition+Math.floor(list.height/list.rowHeight);
if(lScroll>=list.length) lScroll=list.length-1;
list.scrollToIndex(lScroll);
trace(lScroll);

}


Вот что выводит скрипт при работе

9
14
114
187

ТО есть первые 2 нажатия список прокручивается так как и задумано, а потом скачком на 100 рядов сразу.
Помогите разобраться в чем дело.

Genzo
13.10.2011, 15:12
verticalScrollPosition : Number
Определяет или задает значение, показывающее положение вертикальной полосы прокрутки на панели прокрутки (в пикселах).

length : uint
[только для чтения] Определяет число элементов, предоставляемых поставщиком данных.

Вы сравниваете пиксели с кол-вом элементов , надеюсь разберетесь

Андрей911
13.10.2011, 15:16
Ага спасибо. А я то думал verticalScrollPosition это позиция строчки. Значит будем пересчитывать.

Добавлено через 22 минуты
Сейчас попробовал выводить следующие значения, при прокрутку списка

trace(list.verticalScrollPosition); //0 при минимальной прокрутке и 4605 при максимальной в конец
trace(list.height);// выводит 195 высота в пикселах

Так что verticalScrollPosition это не экранные пиксели 100%, а что то другое

Подумал может это высота списка если его развернуть так чтобы видны были все записи, то есть
list.verticalScrollPosition (максимальная)=list.rowHeight*число рядов
Но это тоже оказалось не верно.
4605/list.rowHeight=230.25, а не 195

fljot
14.10.2011, 06:16
Если list "развернуть так чтобы видны были все записи", то его высота будет (4605 + 195)

mayakwd
14.10.2011, 08:39
height определяет высоту самого контейнера, а не списка.
чтобы получить максимальную позицию по вертикали необходимо обратиться к свойству maxVerticalScrollPosition (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/fl/containers/BaseScrollPane.html#maxHorizontalScrollPosition)