带有点击事件的jquery动画

Posted

技术标签:

【中文标题】带有点击事件的jquery动画【英文标题】:jquery animation with click event 【发布时间】:2017-01-19 17:17:40 【问题描述】:

我想在动画中绑定一个点击事件,下面的代码是成功的,但是addscore()函数会做多次,如何解决?

function moveObstacle(target,distance)
        target.removeClass('animated bounce');
        target.animate( left: distance ,
            duration: 10000,
            progress: function(now, fx)
                $(this).addClass('animated bounce');
                $(this).click(function()
                    $(this).hide();
                    addscore();
                );
            
        ); 

    


function addscore()
        score2++;
        if(score2 == 10)
            score1++; score2 = 0;
        
        $('.scoreNum').eq(0).html(score1);
        $('.scoreNum').eq(1).html(score2);
    

【问题讨论】:

每次触发进度回调时,您都在绑定一个新的点击事件,这是为什么呢?! 我只想要在动画期间单击图像会添加分数的东西 【参考方案1】:

一个选项是在进度函数之外分配点击事件处理程序并检查:animated

不清楚为什么需要“动画弹跳”类,所以留下了这个,但问题似乎不需要 - 你可以用它来检查是否动画。

还添加了完成:时间到时隐藏目标的动作。

function moveObstacle(target,distance)
    target.removeClass('animated bounce');
    target.click(function() 
        if ($(this).is(":animated")) 
            $(this).hide();
            addscore();
        );
    );
    target.animate( left: distance ,
        duration: 10000,
        progress: function(now, fx)
            $(this).addClass('animated bounce');
        ,
        complete: function() 
            $(this).hide();
        
    ); 

另一种方法是在点击开始时分配点击并在停止时将其移除:

function moveObstacle(target,distance)
    target.removeClass('animated bounce');
    target.click(function() 
        $(this).hide();
        addscore();
    );
    target.animate( left: distance ,
        duration: 10000,
        progress: function(now, fx)
            $(this).addClass('animated bounce');
        ,
        complete: function() 
            target.off("click");
        
    ); 

【讨论】:

【参考方案2】:

您可以使用 bind() 和 unbind() 方法简单地解决它。如下所述更改您的代码。

$(this).unbind('click').bind('click'function()
    $(this).hide();
    addscore();
);

【讨论】:

我真的不明白为什么 OP 会在进度回调中设置它 是的,对,我也在等待你在评论中提出的问题的答案。但无论如何这是一个解决方案。【参考方案3】:

您可以使用 'off' 和 'on' 函数来绑定和取消绑定您的事件:

$(this).off('click').on('click', function()
    $(this).hide();
    addscore();
);

另一种方法是仅在动画开始时绑定事件(A.Wolff 建议)

 target.animate(
   left: distance
 , 
   duration: 10000,
   start: function(fx) 
     $(this).click(function() 
       $(this).hide();
       addscore();
     );
   ,
   progress: function(now, fx) 
     $(this).addClass('animated bounce');
   
 );

【讨论】:

这只是关于错误代码逻辑的解决方法。至少 OP 应该使用start 而不是progress。最好只委托点击事件

以上是关于带有点击事件的jquery动画的主要内容,如果未能解决你的问题,请参考以下文章

jquery在动画div上的多次点击事件

用于一页引导设计的 JQuery/CSS 事件/动画。 (点击和滚动)

jQuery:绑定和取消绑定实时点击事件

点击事件不会在动画图像视图上触发

jQuery的事件,动画效果等

jquery怎么打开本地图片预览,点击确定后上传