防止onClick事件多次发生(jQuery)

时间:2013-06-05 20:30:05

标签: jquery animation callback

我刚开始使用jQuery和Web开发,所以,请原谅任何天真的错误。我正在尝试使用一个导致动画发生的按钮。也就是说,这个动画只是从左到右移动一个'h2'标题然后再移回(并且平滑地改变颜色)。

我使用以下代码时遇到的问题是,如果用户多次点击该按钮,则会导致该按钮继续通过转向点。我了解到这是一个异步问题,并尝试在动画调用中使用回调函数来重新启用按钮功能。

如您所见,我通过设置queue:false变量解决了这个问题。由于我还是新手,有没有一种简单的方法可以做到这一点?

感谢您的帮助!

var toTheRight = true;
$('#animation').click(function () {
    var header = $('h2')[0].style.left.toString();
    var headerNum;
    if (header.length < 5) {
        headerNum = 0;
    }
    else {
        headerNum = +(header.substring(0, header.length - 2));
    }
    if (headerNum >= 450) {
        toTheRight = false;
        $('h2').css("background-color", "green");
    }
    if (headerNum < 100) {
        toTheRight = true;
        $('h2').css("background-color", "orange");
    }
    var modified;
    var stringified;
    if (toTheRight) {
        modified = Math.round((headerNum + 100) / 100) * 100;
        strigified = modified + "px";
        $('h2').animate({
            "font-size": "3em",
            "width": "50%",
            "left": stringified
        }, { queue: false, duration: 1000 });
    }
    else {
        modified = Math.round((headerNum - 100) / 100) * 100;
        stringified = modified + "px";
        $('h2').animate({
            "font-size": "3em",
            "width": "50%",
            "left": stringified
        }, { queue: false, duration: 1000 });
    }
});

1 个答案:

答案 0 :(得分:5)

你可以将你的函数包装成if:

$('#animation').click(function () {
    if(!$('h2').is(':animated')){
         //your function
    }
})

修改

正如烤所说,你可以这样做:

$('#animation').click(function () {
    if($('h2').is(':animated')) return;
    //your function
})