Javascript 如果另一个函数未完成,则执行函数

Javascript 如果另一个函数未完成,则执行函数,javascript,jquery,Javascript,Jquery,我在创建暂停悬停的滑块时遇到问题,因为我在鼠标关闭时再次执行动画功能,如果我快速地将鼠标滑过它(从而多次调用该函数),它开始播放,我希望这样,只有在其他函数完成时才调用该函数,否则它根本不会调用(以避免队列累积和混乱的动画) 最简单/最好的方法是什么 $(document).ready(function() { //get variables var slide_width = $('.slider_container').width(); var number_of_slides

我在创建暂停悬停的滑块时遇到问题,因为我在鼠标关闭时再次执行动画功能,如果我快速地将鼠标滑过它(从而多次调用该函数),它开始播放,我希望这样,只有在其他函数完成时才调用该函数,否则它根本不会调用(以避免队列累积和混乱的动画)

最简单/最好的方法是什么

$(document).ready(function() {

//get variables
var slide_width      = $('.slider_container').width();
var number_of_slides = $('.slider_container .slide').length;
var slider_width = slide_width*number_of_slides;

//set element dimensions
$('.slide').width(slide_width);
$('.slider').width(slider_width);

var n = 1;

$('.slider_container').hover(function() { 
//Mouse on
    n = 0;
    $('.slider').stop(true, false);
}, function() {
//Mouse off
    n = 1;
    if (fnct == 0) sliderLoop();
});

//Called in Slide Loop
function animateSlider() {
        $('.slider').delay(3000).animate({ marginLeft: -(slide_width * i) }, function() {
            i++;
            sliderLoop();
        });


}

var i = 0;

var fnct = 0

//Called in Doc Load
function sliderLoop() {
    fnct = 1
    if(n == 1) {
        if (i < number_of_slides) {
            animateSlider();
        }
        else
        {
            i = 0;
            sliderLoop();
        }
    }
    fnct = 0
}

sliderLoop();


});
$(文档).ready(函数(){
//获取变量
var slide_width=$('.slider_container').width();
var number_of_slides=$('.slider_container.slide')。长度;
变量滑块宽度=滑块宽度*滑块数量;
//设置元素维度
$('.slide').width(slide_width);
$('.slider').width(slider_width);
var n=1;
$('.slider_container')。悬停(函数(){
//滑鼠
n=0;
$('.slider').stop(真、假);
},函数(){
//滑落
n=1;
如果(fnct==0)sliderLoop();
});
//在幻灯片循环中调用
函数animateSlider(){
$('.slider')。延迟(3000)。动画({marginLeft:-(slide_width*i)},函数(){
i++;
sliderLoop();
});
}
var i=0;
变量fnct=0
//在文档加载中调用
函数sliderLoop(){
fnct=1
如果(n==1){
如果(i<幻灯片的数量){
animateSlider();
}
其他的
{
i=0;
sliderLoop();
}
}
fnct=0
}
sliderLoop();
});

滑块正常工作正常,但如果我快速地将鼠标移开移开,滑块就会开始快速地来回摇晃……几个小时以来,我一直在试图找到解决方案。

以下是修复它的方法,很有魅力

$(document).ready(function() {

//get variables
var slide_width = $('.slider_container').width();
var number_of_slides = $('.slider_container .slide').length;
var slider_width = slide_width*number_of_slides;

//set element dimensions
$('.slide').width(slide_width);
$('.slider').width(slider_width);

var n = 1;
var t = 0;
$('.slider_container').hover(function() { 
    clearInterval(t);
    }, function() {
    t = setInterval(sliderLoop,3000);
});

var marginSize = i = 1;
var fnctcmp = 0;


//Called in Doc Load
function sliderLoop() {
if (i < number_of_slides) {
marginSize = -(slide_width * i++);
}
else
{
marginSize = i = 1;
}

$('.slider').animate({ marginLeft: marginSize });   
}


t = setInterval(sliderLoop,3000);

});
$(文档).ready(函数(){
//获取变量
var slide_width=$('.slider_container').width();
var number_of_slides=$('.slider_container.slide')。长度;
变量滑块宽度=滑块宽度*滑块数量;
//设置元素维度
$('.slide').width(slide_width);
$('.slider').width(slider_width);
var n=1;
var t=0;
$('.slider_container')。悬停(函数(){
净间隔(t);
},函数(){
t=设置间隔(滑块环,3000);
});
var marginSize=i=1;
var-fnctcmp=0;
//在文档加载中调用
函数sliderLoop(){
如果(i<幻灯片的数量){
边缘大小=-(滑动宽度*i++);
}
其他的
{
marginSize=i=1;
}
$('.slider').animate({marginLeft:marginSize});
}
t=设置间隔(滑块环,3000);
});

听起来您需要在动画调用中添加
.stop(true)
。你能展示你的代码吗?stop可以杀死动画,但不是我相信的全部功能?再给我一秒钟,我会发布我的代码。
function animateSlider(){$('.slider')。delay(3000)。stop(true)。animate({marginLeft:-(slide_width*i)},function(){i++;sliderLoop();}
将stop与delay结合使用似乎可以完全消除延迟