2017-02-12 88 views
0
var start = $('#start_img'); 

start.on('click', function(){ 
    var piano = $('.piano'); 
    piano.each(function(index){ 
     $(this).hide().delay(700 * index).fadeIn(700*index); 
     start.off('click'); 
    }) 

}); 

你可以看到,我已经使用了start.off(“点击”)方法,从一旦它被称为再次停止运行的事件监听器。但事情是,我只想让事件侦听器在事件运行期间关闭。以便在事件仍在运行时不能再次调用它。但一旦事件结束,我希望它再次成为'可调用'的。有谁知道如何做到这一点?暂时停止功能的jQuery

这样做的其他方式(也不工作)。有人能帮我一下吗。另一个现在很清楚。

var start = $('#start_img'); 



    start.on('click', function() { 
     var q = 0; 
     var piano = $('.piano'); 
     if (q === 1) { 
     return; // don't do animations 
     } 
     else{ 
     piano.each(function(index) { 
     q = 1; 
     $(this).hide() 
       .delay(700 * index) 
       .fadeIn(700 * index, function() { 
        // remove from each instance when animation completes 
        q = 0 
       }); 

     });} 

    }); 
+0

直到淡出完成 – user7548524

回答

2

你可以切换上的有源元件类以及,然后你可以检查这个类,而不是是否存在

start.on('click', function() { 
    var piano = $('.piano'); 
    if (piano.hasClass('active')) { 
    return; // don't do animations 
    } 
    piano.each(function(index) { 
    $(this).addClass('active') 
      .hide() 
      .delay(700 * index) 
      .fadeIn(700 * index, function() { 
       // remove from each instance when animation completes 
       $(this).removeClass('active') 
      }); 

    }); 

}); 
+0

感谢您的回答。我也在考虑使用名为q的变量来执行此操作的另一种方式,但它不起作用。你能向我解释为什么?我将把这个例子编辑成我最初的问题。 – user7548524

+0

,因为有多个元素,它会被第一个元素改变,而其他元素仍然是活动的 – charlietfl

0

对于只有一个对象做任何事情,你可以使用全局变量对于这一点,在我的情况,我将使用isRunning

var start = $('#start_img'); 
var isRunning = false; 

start.on('click', function(){ 
    if (!isRunning){ 
     isRunning = true; 
     var piano = $('.piano'); 
     piano.each(function(index){ 
      $(this).hide().delay(700 * index).fadeIn(700*index, function(){ 
       isRunning = false; 
      }); 
      start.off('click'); 
     }); 
    } 
}); 

这样,你的应用程序不应该运行的代码,直到isRunning == false,后应该发生10完成。

语法:

.fadeIn([duration] [,complete]); 
.fadeIn(options); 
.fadeIn([duration] [,easing] [,complete]); 

对于两个或多个对象,Charlietfl的答案应该很好地工作。

+0

第一个完成动画将会设置'isRunning' false ...但其他元素仍然会运行 – charlietfl