在动画期间取消绑定点击和鼠标悬停事件

时间:2013-08-22 05:24:12

标签: jquery html

如何取消绑定点击和鼠标悬停事件,直到动画完成并在之后绑定它们?

6 个答案:

答案 0 :(得分:1)

如果要在一段时间内禁用链接,则使用类更容易,更快捷。看下面:

$('link').click(function(event){
  if(event.hasClass('disabled'))
    return;
  else{
    event.animate(/*some args*/ , function(){   // call back function
      event.removeClass('disabled');
    });
  }
});

你只需要为.disabled添加一个css以禁用链接!

这段代码比使用unbind更快,因为它没有开销。

答案 1 :(得分:0)

当动画开始使用时:

$('#foo').unbind();              //unbinds all
$('#foo').unbind('click');       //only click event
$('#foo').unbind('mouseover');   //only mouseover event

然后在事件完成后绑定事件......

这是一个小提琴: http://jsfiddle.net/YmJzt/2/

小提琴的基础是:

function aClick() { alert("YAY! I'm working") }

$("#animateBtn").click(function () {
    //First Unbind
    $("#theone").unbind('click', aClick).text("Does nothing...");

    //Then Animate
    $("#block").animate({
        width: "70%",
        opacity: 0.4,
        marginLeft: "0.6in",
        fontSize: "3em",
        borderWidth: "10px"
    }, 1500,
    //On animation complete bind back... 
    function () {$("#theone").click(aClick).text("Can Click!");}
   );
});

答案 2 :(得分:0)

请参阅.unbind()

你可以解除像

这样的事件
$("p").unbind("click,mouseover");

删除,直到动画完成

$( "#clickme" ).click(function() {
  $( "#book" ).animate({
    opacity: 0.25,
    left: "+=50",
    height: "toggle"
  }, 5000, function() {
     $("p").unbind("click,mouseover");// herer unbind done  
  });

$("p").bind("click,mouseover");// here bind again  
    });

答案 3 :(得分:0)

$('#clickme').unbind('click').unbind('mouseover');
$( "#book" ).animate({
            opacity: 0.25,
            left: "+=50",
            height: "toggle"
        }, 5000, function() {
             $('#clickme').bind('click', click_function).bind('mouseover', mouseover_function)
        });  
$( "#clickme" ).click(click_function);
function click_function(){
     //do something
}
function mouseover_function(){
     //do something
}

这将解除动画之前元素的点击,并在完成动画的回调中重新绑定它

答案 4 :(得分:0)

不要取消绑定事件处理程序。只需在动画开启时设置一个标志,并在完成后重置它。现在在那些事件处理程序中,检查是否设置了该标志,如果是,则返回false,否则让处理程序执行。

答案 5 :(得分:-1)

您可以使用is(:animated)检查动画当前是否正在运行。

$('element').click(function(){

     if($(this).is(':animated')){

         // the element is currently animated

     }else{

         // the element is not being animated

     }

})

如果您要停止当前正在运行的动画,可以使用stop()。使用stop(true, true),如果动画当前正在元素上运行,则会停止,并跳转到结尾。