1

我有一些具体的情况。

有点击动作,之后我添加了一些类。在第一次点击时我没有这门课,我想从第一个条件做一些事情,当我在我的按钮上的 700 毫秒间隔中间快速点击第二次时,我需要做其他事情取决于我的课程'v 之前追加。所以我这样做:

btn.live('click', function(e){
    block.addClass('animation_time');
    setTimeout(function(){
        block.removeClass('animation_time')
    }, 700);
    if (!block.hasClass('animation_time')){
        // do something
    } else {
        setTimeout(function(){
            // do something
        }, 350);
    }
});

在这之后我有 CSS 动画,我需要在另一个开始之前允许其中一个,所以这就是我添加这个时间线条件的方式。当我需要检查这个元素和附加类时,有什么不对?谢谢帮助。

4

2 回答 2

2

您需要在检查他的存在后追加新类,否则 block.hasClass('animation_time')将始终为真。

btn.live('click', function(e){
    if (block.hasClass('animation_time')){
        // do double click action
    } else {
        setTimeout(function(){
            if (!block.hasClass('animation_time')) {
                // do single click action
            }
        }, 700);
    }
    block.addClass('animation_time');
    setTimeout(function(){
        block.removeClass('animation_time')
    }, 700);
});
于 2013-01-24T08:39:27.673 回答
1

您需要缓存 setTimeout 函数结果,以便能够在第二次单击时清除超时:

<input id="btn" type="button" value="Click Me" />
<div class="block">Odio platea! Nec elementum massa elit augue mus ut. Sed tristique dolor,
    rhoncus aliquet urna? Parturient urna scelerisque, adipiscing amet montes
    eu a egestas in, odio est odio, platea nisi enim egestas ac. Scelerisque
    tempor augue scelerisque lectus porttitor! Augue?
</div>

var fastSndClickTimeout = null;
$("#btn").on("click", function () {
    if (fastSndClickTimeout != null) {
        clearTimeout(fastSndClickTimeout);
        fastSndClickTimeout = null;
        $(".block").css("background-color", "green");
    } else {
        fastSndClickTimeout = setTimeout(function () {
            $(".block").css("background-color", "red");
            fastSndClickTimeout = null;
        }, 700);
    }
});
于 2013-01-24T08:50:41.803 回答