1

特定の状況があります。

クラスを追加した後、クリックアクションがあります。最初のクリックで私はこのクラスを持っていなかったので、最初の状態から何かをしたいのですが、ボタンで700ミリ秒の間隔の途中で2回目に高速クリックすると、クラスに応じて何か他のことをする必要があります。 '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アニメーションがあり、そのうちの1つを許可する必要があり、次の開始前に、このタイムライン条件を追加しています。この要素をチェックしてクラスを追加する必要がある場合、正しくないことは何ですか?ヘルプのためのThx。

4

2 に答える 2

2

彼の存在を確認した後、新しいクラスを追加する必要があります。そうしない と、block.hasClass('animation_time')常にtrueになります。

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

2回目のクリックでタイムアウトをクリアできるようにするには、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 に答える