jQuery . when( deferreds )

jQuery API の jQuery . when( deferreds ) は、deferredsに指定した、1つ以上の繰延オブジェクト、または、プレーンなJavaScriptオブジェクトに基づいて、コールバック関数を実行するメソッド。

引数

deferreds

1つ以上の繰延オブジェクト、または、プレーンなJavaScriptオブジェクト。

戻り値

Promise

繰延オブジェクトのメソッドのサブセット。

記述方法

jQuery . when( 繰延オブジェクト )
jQuery . when( 繰延オブジェクト, 繰延オブジェクト, 繰延オブジェクト )

記述例

jQuery
    . when( jQuery . get( 'sampleA.js' ), jQuery . get( 'sampleB.js' ) )
    . then(
        function() {
            jQuery( '#sample' ) . text( '成功' );
        },
        function() {
            jQuery( '#sample' ) . text( '失敗' );
        }
    );

GETメソッドのHTTPリクエストで、「sampleA.js」と「sampleB.js」を読み込む。成功すると、idが「sample」の要素に「成功」と表示する。失敗すると、idが「sample」の要素に「失敗」と表示する。

jQuery
    . when( jQuery( '#sample-animation' ) . fadeTo( 5000, 0.25 ) )
    . done(
        function() {
            jQuery( '#sample' ) . text( '完了' );
        }
    );

idが「sample-animation」である要素の不透明度を25%に変更するアニメーションを実行する。アニメーションが終了すると、idが「sample」の要素に「完了」と表示する。

実装例(サンプル)


実装例(サンプル)の動作について

  • 「実行」ボタンをクリックすると、赤色のボックス要素の不透明度を100%から25%に変更、青色のボックス要素の不透明度を25%から100%に変更する、5秒間のアニメーションを、実行する。

  • アニメーションが終了すると、「実行」ボタンの右横に、「完了」というテキストを追加する。

  • 「実行」ボタンのテキストを「戻す」というテキストに変更する。

  • 「戻す」ボタンを、クリックすると、元に戻す。

実装例(サンプル)のソースコード

JavaScript

<script>
<!--
jQuery( function() {
    var effectA = function () {
        jQuery( '#jquery-sample-animation-a' ) . fadeTo( 5000, 0.25 );
        return jQuery( '#jquery-sample-animation-a' ) . promise();
    };
    var effectB = function () {
        jQuery( '#jquery-sample-animation-b' ) . fadeTo( 5000, 1 );
        return jQuery( '#jquery-sample-animation-b' ) . promise();
    };
    jQuery( '#jquery-sample-button' ) . toggle(
        function() {
            jQuery( this ) . prop( 'disabled', true );
            setTimeout( function() {
                jQuery( '#jquery-sample-button' ) . text( '戻す' );
                jQuery( '#jquery-sample-button' ) . prop( 'disabled', false );
            }, 5000 );
            jQuery
                . when( effectA(), effectB() )
                . done(
                    function() {
                        jQuery( '#jquery-sample-message' ) . append( '完了' );
                    }
                );
        },
        function() {
            jQuery( '#jquery-sample-button' ) . prop( 'disabled', true );
            jQuery( '#jquery-sample-message' ) . text( '' );
            jQuery( '#jquery-sample-animation-a' ) . fadeTo( 500, 1 );
            jQuery( '#jquery-sample-animation-b' ) . fadeTo( 500, 0.25 );
            setTimeout( function() {
                jQuery( '#jquery-sample-button' ) . text( '実行' );
                jQuery( '#jquery-sample-button' ) . prop( 'disabled', false );
            }, 500 );
        }
    );
} );
// -->
</script>

CSS

<style type="text/css">
<!--
#jquery-sample {
    margin: 10px;
}
#jquery-sample-message {
    margin: 0px 0px 0px 10px;
}
#jquery-sample-animation-a {
    float: left;
    margin: 10px;
    padding: 10px;
    height: 100px;
    width: 200px;
    background-color: red;
    border: 1px solid gray;
    border-radius: 10px;
}
#jquery-sample-animation-b {
    float: left;
    margin: 10px;
    padding: 10px;
    height: 100px;
    width: 200px;
    opacity: 0.25;
    background-color: blue;
    border: 1px solid gray;
    border-radius: 10px;
}
-->
</style>

HTML

<div id="jquery-sample">
    <p>
        <button id="jquery-sample-button">実行</button>
        <span id="jquery-sample-message"></span>
    </p>
    <div id="jquery-sample-animation-a"></div>
    <div id="jquery-sample-animation-b"></div>
    <br style="clear: left;" />
</div>

スポンサード リンク

カテゴリー: API, Core, JavaScript, jQuery, 繰延オブジェクト タグ: パーマリンク