Интерактивный примерlet isHovering = false;
let intervalId = null;
targetElement.addEventListener('mouseenter', () => {
isHovering = true;
intervalId = setInterval(() => {
if (!isHovering) {
clearInterval(intervalId);
return;
}
row.scrollBy(/* params */);
}, 16)
});
targetElement.addEventListener('mouseleave', () => {
isHovering = false;
if (intervalId) {
clearInterval(intervalId);
}
});
Можно обойтись и меньшим кодом:
let intervalId = null;
targetElement.addEventListener('mouseenter', () => {
intervalId = setInterval(() => {
row.scrollBy(/* params */);
}, 16)
});
targetElement.addEventListener('mouseleave', () => clearInterval(intervalId));
Но этот вариант мне не очень нравится своей неявностью.