我设法获得箭头,滚动mouseenter
上div的溢出来工作。问题是脚本不仅不会在mouseleave
停止,而且会阻止手动滚动div对面。
JS
function scroll_right() {
var elmnt = document.getElementsByClassName("thumbnails")[0];
elmnt.scrollLeft += 50;
var timer = setInterval(scroll_right, 300);
}
function kill() {
clearInterval(timer)
}
箭头
<img class="arrow"
onmouseenter="scroll_right()"
onmouseleave="kill()"
src="https://image.flaticon.com/icons/svg/126/126490.svg">
我的想法是scroll_right
函数在mouseenter
上被触发,其内部的timer
在mouseleave
上被停用。
答案 0 :(得分:4)
您只需创建一个全局计时器变量,该变量将存储setInterval()值,以便您可以使用它来停止setInterval运行。
var timer = undefined;
function scroll_right() {
var elmnt = document.getElementsByClassName("thumbnails")[0];
elmnt.scrollLeft += 50;
timer && clearInterval(timer);
timer = setInterval(scroll_right, 300);
}
function kill() {
timer && clearInterval(timer)
}
---------这是html代码
<img class="arrow"
onmouseenter="scroll_right()"
onmouseleave="kill()"
src="https://image.flaticon.com/icons/svg/126/126490.svg">
答案 1 :(得分:1)
每次运行scroll_right
函数时都会设置计时器。一段时间后,有一段时间会有无限多的计时器运行。您可以尝试使用setTimeout
功能而不是下面的功能。此外,计时器的范围仅限于代码中的功能。
var timer = undefined;
function scroll_right() {
var elmnt = document.getElementsByClassName("thumbnails")[0];
elmnt.scrollLeft += 50;
if (!timer) {
timer = setInterval(scroll_right, 300);
}
}
function kill() {
if (timer) {
clearInterval(timer);
timer = undefined;
}
}
&#13;
<div class="thumbnails" onmouseenter="scroll_right()" onmouseleave="kill()" style="width:150px;overflow:auto">
<img class="arrow" src="https://image.flaticon.com/icons/svg/126/126490.svg" width="500px">
</div>
&#13;
答案 2 :(得分:0)
您需要声明函数外部的定时器变量以供其他函数使用 用以下代码替换你的JS:
var timer;
function scroll_right() {
var elmnt = document.getElementsByClassName("thumbnails")[0];
elmnt.scrollLeft += 50;
timer = setInterval(scroll_right, 300);
}
function kill() {
clearInterval(timer)
}