Gostaria de acionar o scrollIntoView na rolagem da roda do mouse. Isso funciona quando clico em um botão, mas parece que durante a rolagem não (mesmo que eu restrinja apenas acontecer um, como no exemplo abaixo)
document.getElementById('next').addEventListener('click', function() {
var target = document.getElementById('target')
target.scrollIntoView({
behavior: "smooth",
block: 'nearest'
});
})
var scrollActive
window.addEventListener("wheel", event => {
const delta = Math.sign(event.deltaY);
if (!scrollActive) {
scrollActive = true;
if (delta == 1) {
console.info(delta);
var target = document.getElementById('target')
target.scrollIntoView({
behavior: "smooth",
block: 'nearest'
});
}
}
});
.a {
width: 50px;
height: 250px;
border: 1px solid #444;
margin: 20px;
}
<a id="next" href="#">play next</a>
<div class="a">1</div>
<div class="a">2</div>
<div class="a">3</div>
<div class="a">4</div>
<div class="a" id="target">5</div>
<div class="a">6</div>
<div class="a">7</div>
Você deve cancelar o evento
mousewheel
, mas precisa adicioná-lo{ passive: false }
ao anexar o ouvinte do evento.