繁体   English   中英

在原版 Javascript 鼠标悬停时循环 Function

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM