Проблема с window.scrollBy в браузерах IOS

Я написал функцию плавной прокрутки javascript, чтобы обеспечить навигацию на одностраничной странице. Код в основном похож на тот, что внизу.

Функция вызывается с количеством пикселей для прокрутки, которое затем делится на 30 шагов, а затем прокручивается в цикле, пока число не будет достигнуто. Таким образом, я попробовал оба варианта зацикливания с setTimeout и requestAnimationFrame.

Он почти идеально работает во всех настольных браузерах, а также на моем телефоне Android, однако Safari и Chrome на устройствах IOS не могут достичь нужной точки. Тестирование с оповещением на каждой итерации показало, что все значения рассчитываются правильно, однако фактическое количество прокрутки не совпадает, в результате чего остановка прокрутки находится в неправильном положении.

Я не могу предоставить демонстрацию, так как это коммерческое приложение в разработке, также я попытался создать упрощенный jsfiddle, но на самом деле это не показывает ошибку, поэтому проблема должна быть связана с чем-то другим (вероятно, фиксированная позиция css, минимальная высота 100vh, обработчики событий прокрутки...?).

Я определенно думаю, что это странное поведение, и другие должны были заметить его раньше. Может ли кто-нибудь дать мне подсказку, что делать?

function scrollstep(dist) {
    var n = Math.floor(dist / 30 * (1 - Math.abs(scrstp_dist / dist - 0.5)));
    if (Math.abs(scrstp_dist + n) < Math.abs(dist)) {
        scrstp_dist+=   n;
    // alert(n);
        w.scrollBy(0, n);
        w.requestAnimationFrame( function(timestamp) { scrollstep(dist); } );
    } else {
        w.scrollBy(0, dist - scrstp_dist);
    }
}

person RK234    schedule 16.01.2020    source источник
comment
У меня похожие проблемы с window.scrollBy, который без проблем работает на настольном хроме, но на Android мешает прокрутке пользователя (когда это разовое событие без какого-либо слушателя). Ничего не могу найти, я собираюсь отключить его для мобильных устройств   -  person GWorking    schedule 23.01.2020
comment
В конце концов я принял эту альтернативу stackoverflow.com/questions/42261524/   -  person GWorking    schedule 23.01.2020
comment
Кстати, я использую взлом флажка, поэтому коллега пришел к выводу, что iOS пытается прокрутить до (скрытого) элемента ввода в то же время, когда должна произойти прокрутка. Но до сих пор не знаю, как это остановить. Измененный jsfiddle   -  person RK234    schedule 27.01.2020
comment
Оказывается, ios пытается сохранить скрытые входы на экране, у которых была фиксированная позиция и скрытая видимость. Теперь, когда я добавил правило left -1000px, входные данные игнорируются и достигается цель прокрутки.   -  person RK234    schedule 30.01.2020