Проблема заключается в том, что шапка браузера в мобильных версиях динамична выезжает/заезжает, поэтому и происходит весь этот без предел.
Решил перейти на position: sticky, в принципе основные браузеры проверенные мной, даже на старом телефоне адроид 4.4 прекрасно работают, не говоря о современных гаджетах.
javascript раз уже написал, оставлю его исключительно для IE11, остальные десктопные браузеры нормально работают.
Вопрос закрываю.
---------------------------------------------------
Спустя 2 дня:
Реализовать что-то с помощью position sticky, к сожалению так и не удалось. Все дело, в том что он работает не так как я предполагал, а именно если указать "top: 0", то блок будет находится вверху (не перематываясь), пока есть свободное пространство внизу его родителя, потом он прокручивается вверх. Но вот "bottom: 0" работает не так как я предполагал, я думал, что блок "промотается" вниз, а далее будет ждать когда закончится свободное пространство родителя. Но это не верно! Bottom работает схематично так:
<родитель>
<блок_пустышка></блок_пустышка>
<блок_стики></блок_стики>
</родитель>
блок_стики проматывается как и предполагалось вниз, но не до конца родителя, а до конца блока_пустышки, при этом он находится над блоком пустышкой.
Когда высота блока_пустышки заканчивается, то он подцепляется к нему паровозиком и улетает вверх, даже не дождавшись когда закончится свободное пространство родителя. Если блока_пустышки нет, то блок_стики будет cверху, точно также как, если бы свойство "position: sticky" ему не задавали бы совсем.
Попробовал скрипт
leafo.net/sticky-kit но на мобильных браузерах он ведет себя очень плохо, при скроле страницы, плавность отсутствует, и из-за плавающей шапки браузера, все те же проблемы, что и с моим скриптом.
Вывод сделал такой, что верну свой скрипт на десктопные браузеры, а на все мобильные просто забью.
Мой скрипт:
https://codepen.io/workcode/pen/RqwpzM
Пример "position: sticky":
https://codepen.io/workcode/pen/JeYaOx