Я пытаюсь установить свойство scrollTop
некоторого элемента DOM программным способом, и у меня странное поведение, которое нарушает мои тесты в какой-то конкретной среде.Я создал минимальное репро ( ссылка )
HTML
<div id=viewport><div id=content></div></div>
CSS
#viewport {
overflow-y: auto;
height: 20px;
}
#content {
height: 150px;
}
JS
const viewport = document.getElementById("viewport");
viewport.scrollTop = 75;
console.log(viewport.scrollTop);
Результат скрипта не работает на Chrome 69.0.3497.100 , работающем на Win 10 Pro .Это 74.4000015258789
вместо 75
.Он работает правильно на той же версии Chrome на Mac и даже на Win 10 Home под управлением VirtualBox. Firefox и Edge также не имеют такой проблемы.
Я знаю, это выглядит очень странно, но что это может быть?Кто-нибудь может подтвердить эту проблему?И можно ли это как-то исправить, чтобы убедиться, что результат присваивания scrollTop
именно тот, который я хочу?
Обновление .Благодаря @khajjit я смог воспроизвести проблему на своем компьютере Mac и получил 74.66666412353516
при 75% уменьшении и 150% увеличении. 80% дает 75
, 90% - 74.44444274902344
, 110% -- 74.54545593261719
и т. Д. (Я обновил демо , чтобы показать таблицу результатов).Так что проблема не относится к ОС.Но похоже, что проблема только в Chrome.Firefox и Edge возвращают 75 в любом масштабе.
Обновление 2 .Масштабирование разрешения экрана на уровне ОС также влияет на ситуацию.Это был случай Win 10 Pro, описанный выше;масштабирование ОС составило 125%.
Таким образом, практическая часть вопроса заключается в том, как преодолеть проблемы с округлением в Chrome, чтобы точно установить scrollTop
?
Обновление 3 .Chromium Dev подтвердил, что это ошибка :
Эта проблема связана с тем, что Chrome не полностью поддерживает дробное смещение прокрутки.
Так что, если кто-тоЕсли вы заинтересованы в решении этой проблемы, перейдите по ссылке и отметьте проблему на конце Chromium.