Посчитать текущее положение скроллера

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

Есть скроллер. В нем есть айтемы. Размер каждого айтема 1045 пикселей, а еще у них расстояние между 110. Итого от центра одного айтема до центра другого 1155 пикселей. Еще у них есть y (который тоже считается от центра). Итого это выглядит так:

Позиции скроллера, при которых соответствующая локация становится по центру, вычислены опытным путем. Как это сделать формулой - не представляю. Я уверена, должно быть какое-то решение, ведь в том же хаксе и экшен-скрипте скроллеры тоже были геморройные, но все же с ними можно было нормальное что-то сделать. А тут - никак. Возможно, у меня и правда глаз настолько замылился, что я тупо не вижу простейшее решение.

Пока что у меня существует такое:

позиция = 1 - модуль(Y текущей локации) / высоту всего скроллера

Плюс если элемент первый или последний, там не катит такое условие, они у меня отдельно выставляются на 1 и 0 соответственно. Но они-то работают. А вот остальное - нет.

может глупый вопрос - чего 0.8 и 0.2, а не 0.75 и 0.25? Тогда просто обратно-пропорциональная зависимость, а так нет простой зависимости

Прибавляем снизу и сверху 110/2=55 имеем 5 одинаковых интервалов и плюс опустить 1045/2/5715=0٫091426
Получаем формулу
=i*1155/(5715+110)-1045/2/5715

Откуда имеем что центры у вас должны быть на позициях
0.70
0.50
0.30
0.10
-0.09

Если скрол у вас считается не от нижнего угла, а от центра экрана.
0.5+(i-2)*1155/(5715+110)
0.90
0.70
0.50
0.30
0.10

А вот откуда у вас 0.8 и 0.2 взялось я не пойму видимо что’то не учли или ошибка при подборе.

Пусть экран 1080х1024 тогда высота 1024
Тогда высота листа 5715
а высота скрола
(5715-1024)=4691

=i*1155/4691+(1024-1155)/2/1024
0.92
0.67
0.42
0.18
-0.06

А если от центра а не от угла
=0.5+(i-2)*1155/4691
0.99
0.75
0.5
0.25
0.008

Нет, не глупый. Сама не понимаю, почему так. То есть когда высота скроллера(*) 800, то все правильно: 0.25, 0.5, 0.75. Когда высота 1167, то происходит эта хрень с 0.2, 0.5, 0.8. В принципе, можно оба скроллера привести к высоте 800. Но тогда на весь экран будет помешаться лишь одна локация и крошечные огрызки соседних, а это не красиво.

    • под высотой скроллера я подразумеваю высоту в окне. В общем, не ту, которая 5715.

Повесила на скроллер обработчик, который в консоли выводит текущую позицию скроллера. Потом запустила и скроллила. Когда локация была по центру, смотрела данные. Вот оттуда и взялось. А откуда оно берется у скроллера - мне не понятно.

Вот пруфы.

Я вот что думаю… Если позиции меняются из-за высоты скроллера(*), может, как-то его высоту подшаманить?

Всееее, вопрос решен :partying_face:

А то я уже петлю намыливала.

Всем спасибо!

1 лайк