原版鼠标悬停循环功能 Javascript
Loop Function on Mouseover in Vanilla Javascript
我正在尝试创建图像轮播,并希望在用户将鼠标悬停在 div 的左侧和右侧时水平滚动。我有两个“不可见的” divs 用于左右控件,并给了它们 eventListeners:
right.addEventListener("mouseover", goRight)
function goRight() {
document.getElementById('images').scrollLeft += 20;
}
left.addEventListener("mouseover", goLeft)
function goLeft() {
document.getElementById('images').scrollLeft -= 20;
}
当我将鼠标悬停在它们上面时,它会滚动一次,但我希望它一直滚动直到我鼠标移开。当我悬停在控件上时,如何使 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);
您可以创建一个布尔值,当用户将鼠标悬停在元素上时,该值将 'true'。
// 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);
当然你也必须对左侧做同样的事情。
我正在尝试创建图像轮播,并希望在用户将鼠标悬停在 div 的左侧和右侧时水平滚动。我有两个“不可见的” divs 用于左右控件,并给了它们 eventListeners:
right.addEventListener("mouseover", goRight)
function goRight() {
document.getElementById('images').scrollLeft += 20;
}
left.addEventListener("mouseover", goLeft)
function goLeft() {
document.getElementById('images').scrollLeft -= 20;
}
当我将鼠标悬停在它们上面时,它会滚动一次,但我希望它一直滚动直到我鼠标移开。当我悬停在控件上时,如何使 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);
您可以创建一个布尔值,当用户将鼠标悬停在元素上时,该值将 'true'。
// 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);
当然你也必须对左侧做同样的事情。