[英]Loop Function on Mouseover in Vanilla Javascript
我正在尝试创建一个图像轮播,并希望在用户将鼠标悬停在 div 的左侧和右侧时水平滚动。 我为左右控件设置了两个“不可见”的 div,并为它们提供了 eventListener:
right.addEventListener("mouseover", goRight)
function goRight() {
document.getElementById('images').scrollLeft += 20;
}
left.addEventListener("mouseover", goLeft)
function goLeft() {
document.getElementById('images').scrollLeft -= 20;
}
当我 hover 在它们上方时,它会滚动一次,但我希望它不断滚动,直到鼠标移出。 当我悬停在控件上时,如何使 goRight()/goLeft() 循环?
一种解决方案是使用setInterval()
方法,该方法应在mouseout
上取消。 您可以存储间隔 id 并在mouseout
上使用clearInterval()
:
const delay = 100;
let intervalId;
function goLeft() {
intervalId = setInterval(
() => (document.getElementById('images').scrollLeft -= 20),
delay,
);
}
function goRight() {
intervalId = setInterval(
() => (document.getElementById('images').scrollLeft += 20),
delay,
);
}
function stopScrolling() {
clearInterval(intervalId);
}
left.addEventListener('mouseover', goLeft);
left.addEventListener('mouseout', stopScrolling);
right.addEventListener('mouseover', goRight);
right.addEventListener('mouseout', stopScrolling);
您可以创建一个 Boolean,当用户将鼠标悬停在元素上时,该 Boolean 将为“真”。
// for the right side:
let mouseOverRight = false;
right.addEventListener("mouseenter", function(){
mouseOverRight = true;
});
right.addEventListener("mouseleave", function(){
mouseOverRight = false;
});
然后使用间隔,将延迟更改为您想要的任何速度
window.setInterval(function(){
if (mouseOverRight)
/// Scroll logic here
}, 300);
然后当然你必须对左侧做同样的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.