2016-04-12 63 views
2

Im在jQuery中建立一个.clicktoggle函数,对于我的生活我无法得到.stop的效果,基本上我不想它会一遍又一遍地播放点击混搭。防止JQuery的.click切换功能运行反复多余的点击

我想要它被应用的功能,所以它的自我包含,这就是我卡住的地方。

JS fiddle link

(function($) { 
    $.fn.clickToggle = function(func1, func2) { 
    var funcs = [func1, func2]; 
    this.data('toggleclicked', 0); 
    this.click(function() { 
     var data = $(this).data(); 
     var tc = data.toggleclicked; 
     $.proxy(funcs[tc], this)(); 
     data.toggleclicked = (tc + 1) % 2; 
    }); 
    return this; 
    }; 
}(jQuery)); 

$('div').clickToggle(function() { 
    $('.testsubject').fadeOut(500); 
}, function() { 
    $('.testsubject').fadeIn(500); 
}); 

<div class="clickme">click me fast</div> 
<div class="testsubject">how do i stop it playing over and over if you click alot</div> 

切换。点击好像人很多东西会用,所以我想这可能是有用的在这里提出它

+0

这是否意味着您想要在淡入淡出过程中忽略所有点击? – 4castle

回答

2
var clicked = false; 
var doing = false; 

$(".clickme").click(function(e) { 
    if (doing) { 
    return; 
    } else { 
    doing = true; 
    } 
    doing = true; 
    clicked = !clicked; 
    if (clicked) { 
    $('.testsubject').fadeOut(700, function() { 
     doing = false 
    }); 
    } else { 
     $('.testsubject').fadeIn(700, function() { 
     doing = false; 
    }); 
    } 
}); 

这个例子是一个简单的切换只允许你当它没有做任何事情点击。我在IRC上解释过,但作为一个例子,这个函数只在doing设置为false时才会运行,只有在fadeIn()fadeOut的回调函数thingymajigger之后设置。

+0

这与我的回答有什么不同? – 4castle

+0

@ 4castle你的一个只适用于淡入淡出? – Timothy

+0

这是一个...它使用完全相同的回调和一切。 – 4castle

1

通过增加检查到布尔变量fadeInProgress,如果fadeInProgressfalse,则可以选择仅排队动画。然后它将该值设置为true并执行动画。动画完成后,将值设置为false

var fadeInProgress = false; 
$('div').clickToggle(function() { 
    if (!fadeInProgress) { 
    fadeInProgress = true; 
    $('.testsubject').fadeOut(700, function(){fadeInProgress = false;}); 
    } 
}, function() { 
    if (!fadeInProgress) { 
    fadeInProgress = true; 
    $('.testsubject').fadeIn(700, function(){fadeInProgress = false;}); 
    } 
});