Вы можете просто инвертировать порядок, в котором вы вызываете эти методы.
function search() {
document.getElementById("searchbox").focus();
document.getElementById("books").scrollIntoView({behavior: 'smooth'});
};
document.getElementById("btn").onclick = search;
#books {
margin-top: 300vh;
}
<button id="btn">search</button>
<input id="searchbox" value="#searchbox">
<div id="books">Some books</div>
Что происходит, так это то, что при вызове Element.focus()
ваш браузер автоматически прокручивает этот элемент. При этом он отменит предыдущий вызов scrollIntoView
. Инвертируя порядок вызовов, scrollIntoView
отменяет прокрутку focus
, что вам и нужно.