やってること
- スタート
- 赤いボックスを下に移動
- 赤いボックスを右に移動
- 赤いボックスを上に移動
- 赤いボックスを左に移動
処理開始前とかjQuery.animateのcompleteでログを出力してもいいんだけど、ここすらもDeferredで出力させてみた
<style type="text/css"> #testOuter{ width:100%; height:700px; position:relative; } #testLog{ border:1px solid #cfcfcf; background-color:#fff; height:140px; overflow-y:scroll; } #testBox{ width:300px; height:250px; background-color:#f00; position: absolute; top:200px; left:0px; } </style> <div id="testOuter"> <div id="testLog"></div> <div id="testBox"></div> </div> <script type="text/javascript"> var log = function() { var $log = $( '#testLog' ); return function( s ) { $log.html( $log.html() + s + '<br>' ); } }(); ( function() { log( 'Start' ); return new $.Deferred().resolve().promise(); } )() .then( function() { log( 'animate down' ); return new $.Deferred().resolve().promise(); } ) .then( function() { var dfd = new $.Deferred; $( '#testBox' ).animate( {'top':'460px'}, 3000, function() { return dfd.resolve(); } ); return dfd.promise(); } ) .then( function() { log( ' -> animated down' ); return new $.Deferred().resolve().promise(); } ) .then( function() { log( 'animate right' ); return new $.Deferred().resolve().promise(); } ) .then( function() { var dfd = new $.Deferred; $( '#testBox' ).animate( {'left':'140px'}, 3000, function() { return dfd.resolve(); } ); return dfd.promise(); } ) .then( function() { log( ' -> animated right' ); return new $.Deferred().resolve().promise(); } ) .then( function() { log( 'animate up' ); return new $.Deferred().resolve().promise(); } ) .then( function() { var dfd = new $.Deferred; $( '#testBox' ).animate( {'top':'220px'}, 5000, function() { return dfd.resolve(); } ); return dfd.promise(); } ) .then( function() { log( ' -> animated up' ); return new $.Deferred().resolve().promise(); } ) .then( function() { log( 'animate left' ); return new $.Deferred().resolve().promise(); } ) .then( function() { var dfd = new $.Deferred; $( '#testBox' ).animate( {'left':'10px'}, 3000, function() { return dfd.resolve(); } ); return dfd.promise(); } ) .then( function() { log( ' -> animated left' ); return new $.Deferred().resolve().promise(); } ) .then( function() { log( 'Fin' ); return new $.Deferred().resolve().promise(); } ) ; </script>
0 件のコメント:
コメントを投稿