mouseenter 上的 setInterval 和 mouseleave 上的 clear interval
setInterval on mouseenter and clear interval on mouseleave
我正在使用 setInterval 创建一个在 mouseenter 上开始的 diy 幻灯片,使用本教程:
https://www.amideveloper.com/how-to-start-slideshow-on-hover-image-in-jquery/
效果很好,但我希望使用 clearInterval 使幻灯片在鼠标离开时停止。
我不知道我做错了什么我的间隔没有被清除并且幻灯片不会停止...
这是我的代码:
JQUERY
$(".fadeInOut > div:gt(0)").hide();
function change_div() {
$(".fadeInOut > div:first").fadeOut(0).next().fadeIn(0).end().appendTo(".fadeInOut");
}
$(".fadeInOut").mouseenter(function(){
myVar = setInterval(change_div, 600);
change_div();
});
$(".fadeInOut").mouseleave(function(){
clearInterval(myVar);
});
HTML
<div class="fadeInOut">
<div><img src="https://www.amideveloper.com/wp-content/themes/amideveloper/slide/slider-1.jpg"></div>
<div><img src="https://www.amideveloper.com/wp-content/themes/amideveloper/slide/slider-2.jpg"></div>
<div><img src="https://www.amideveloper.com/wp-content/themes/amideveloper/slide/slider-3.jpg"></div>
</div>
CSS
.fadeInOut > div {
position: absolute;
}
这里有一个 link 到 jsfidlle:
https://jsfiddle.net/0ysg3r67/
任何帮助将不胜感激
var myVar;
$(".fadeInOut").mouseenter(function(){
clearInterval(myVar);
myVar = setInterval(change_div, 600);
change_div();
});
您的幻灯片切换导致鼠标输入重新触发,从而创建多个间隔。为防止这种情况,请尝试在创建新间隔之前清除间隔。
作为替代方案,您可以简单地标记可见的幻灯片,而不是在幻灯片中移动,并使用它来知道接下来应该显示哪张幻灯片。这似乎解决了 Firefox 反复触发鼠标输入的问题。
var myVar;
var $slides = $('.fadeInOut > div');
$(".fadeInOut > div:not(.current)").hide();
function change_div() {
var $current = $slides.filter('.current');
var $next = ($current.next().length ? $current.next() : $slides.first());
$current.fadeOut(0).removeClass('current');
$next.addClass('current').fadeIn(0);
}
$(".fadeInOut").mouseenter(function(){
console.log('start');
myVar = setInterval(change_div, 600);
change_div();
});
$(".fadeInOut").mouseleave(function(){
console.log('stop');
clearInterval(myVar);
});
.fadeInOut > div {
position: absolute;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="fadeInOut">
<div class="current"><img src="https://www.amideveloper.com/wp-content/themes/amideveloper/slide/slider-1.jpg"></div>
<div><img src="https://www.amideveloper.com/wp-content/themes/amideveloper/slide/slider-2.jpg"></div>
<div><img src="https://www.amideveloper.com/wp-content/themes/amideveloper/slide/slider-3.jpg"></div>
</div>
我正在使用 setInterval 创建一个在 mouseenter 上开始的 diy 幻灯片,使用本教程: https://www.amideveloper.com/how-to-start-slideshow-on-hover-image-in-jquery/
效果很好,但我希望使用 clearInterval 使幻灯片在鼠标离开时停止。
我不知道我做错了什么我的间隔没有被清除并且幻灯片不会停止...
这是我的代码:
JQUERY
$(".fadeInOut > div:gt(0)").hide();
function change_div() {
$(".fadeInOut > div:first").fadeOut(0).next().fadeIn(0).end().appendTo(".fadeInOut");
}
$(".fadeInOut").mouseenter(function(){
myVar = setInterval(change_div, 600);
change_div();
});
$(".fadeInOut").mouseleave(function(){
clearInterval(myVar);
});
HTML
<div class="fadeInOut">
<div><img src="https://www.amideveloper.com/wp-content/themes/amideveloper/slide/slider-1.jpg"></div>
<div><img src="https://www.amideveloper.com/wp-content/themes/amideveloper/slide/slider-2.jpg"></div>
<div><img src="https://www.amideveloper.com/wp-content/themes/amideveloper/slide/slider-3.jpg"></div>
</div>
CSS
.fadeInOut > div {
position: absolute;
}
这里有一个 link 到 jsfidlle:
https://jsfiddle.net/0ysg3r67/
任何帮助将不胜感激
var myVar;
$(".fadeInOut").mouseenter(function(){
clearInterval(myVar);
myVar = setInterval(change_div, 600);
change_div();
});
您的幻灯片切换导致鼠标输入重新触发,从而创建多个间隔。为防止这种情况,请尝试在创建新间隔之前清除间隔。
作为替代方案,您可以简单地标记可见的幻灯片,而不是在幻灯片中移动,并使用它来知道接下来应该显示哪张幻灯片。这似乎解决了 Firefox 反复触发鼠标输入的问题。
var myVar;
var $slides = $('.fadeInOut > div');
$(".fadeInOut > div:not(.current)").hide();
function change_div() {
var $current = $slides.filter('.current');
var $next = ($current.next().length ? $current.next() : $slides.first());
$current.fadeOut(0).removeClass('current');
$next.addClass('current').fadeIn(0);
}
$(".fadeInOut").mouseenter(function(){
console.log('start');
myVar = setInterval(change_div, 600);
change_div();
});
$(".fadeInOut").mouseleave(function(){
console.log('stop');
clearInterval(myVar);
});
.fadeInOut > div {
position: absolute;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="fadeInOut">
<div class="current"><img src="https://www.amideveloper.com/wp-content/themes/amideveloper/slide/slider-1.jpg"></div>
<div><img src="https://www.amideveloper.com/wp-content/themes/amideveloper/slide/slider-2.jpg"></div>
<div><img src="https://www.amideveloper.com/wp-content/themes/amideveloper/slide/slider-3.jpg"></div>
</div>