Home > 技術 > jQueryのanimateメソッドの使い方

jQueryのanimateメソッドの使い方

jQueryで作る Ajaxアプリケーション
jQueryで作る Ajaxアプリケーションを読んでてanimateメソッドについて細かく書かれていたので遊んでみました。
(本当はjQueryのソースを追ってたのですが、なんか難しくて挫折してたので本当に助かります!)

前にjQueryのtoggleメソッドって気持ちいいでtoggleメソッドの使い方なんかを紹介しましたが、このメソッドも内部的にanimeteメソッドを呼んでいます。

toggle : function (fn, fn2) {
    return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ? this._toggle.apply(this, arguments) : fn ? this.animate( {
        height : "toggle", width : "toggle", opacity : "toggle";
    }
    , fn, fn2) : this.each(function () {
        jQuery(this)[jQuery(this).is(":hidden") ? "show" : "hide"]();
    }
    );
}
, 

animeteメソッドのシグネチャー

animeteメソッドのシグネチャーは

こんな感じで、

animate : function (prop, speed, easing, callback)

いったい何ものかと言うと、

prop
CSSプロパティを連想配列でいっきに渡せます
speed
名前のとおりアニメーションのスピードです
easing
アニメーション方法を指定できます。プラグインなどを使う場合にはここの文字列を変更するみたいです。デフォルトでは"linear"が指定されています
callback
アニメーション完了時に呼び出したいコールバック関数を指定できます

この4つのメソッドを渡すことによっていろいろなアニメーションをさせることができるのです。
なんか意外と簡単そうです。

アニメーションを順番に行う

アニメーションを順番に行う場合は、単純にanimateメソッドを何回か呼び出すだけです。

$("#btn1").click(function () {
    $("#hoge").animate( {
        width : "200px", height : "200px";
    }
    , "slow", function () {
    }
    ).animate( {
        fontSize : "30px";
    }
    , "slow", function () {
        $(this).text("文字もおっきくなった");
    }
    );
}
);

アニメーションを順番に設定すると、queueというキュー領域に保存されて順番に実行される仕組みです。
(だからshowとかhideとかのメソッドを呼ぶと、ちゃんとshowされてからhideになっていたんですね。)

しかもこのqueueはちゃんとElementオブジェクトごとに保存されるようなので、別々のdivタグに設定されたアニメーションはちゃんと別々のqueueに保存されています。
まぁ当たり前といえば当たり前なんですけどね。

アニメーションをいっきに行う

こっちも順番に行う場合と同じでanimateメソッドを何回か呼び出します。
ただし、さっきと違うのは第2引数に直接durationを指定しているのではなく、連想配列にしています。
そしてqueueプロパティに対してfalseを設定しています。falseにすることによってアニメーションが同時に実行されるようです。

$("#btn2").click(function () {
    $("#hoge").text("ほれほれ~")// queueをfalseにするとアニメーションが同時進行になる
    .animate( {
        width : "200px", height : "200px";
    }
    , {
        queue : false, duration : "slow", easing : "linear", complete : function () {
            $(this).text("同時にアニメーションしてるよ");
        }
    }
    ).animate( {
        fontSize : "30px";
    }
    , "slow", function () {
    }
    );
}
);

callback関数の指定もcompleteプロパティに対して渡してます。ここも順番にアニメーションするときとは違いますね。

実際にアニメーションしてみる

簡単なサンプルになります。上記で説明している内容を一応網羅しているので何かの参考になれば幸いです。
(というか自分用のメモになっていますw)


      


※hoverしてもアニメーションします。

実際のソースコード

$(function () {
    // init
    $("#hoge").text("hogehoge").css( {
        "border" : "1px solid", "width" : "200px", "height" : "200px", "backgroundColor" : "#888";
    }
    );
    // アニメーションを順番に行う
    $("#btn1").click(function () {
        $("#hoge").animate( {
            width : "400px", height : "400px";
        }
        , "slow", function () {
        }
        ).animate( {
            fontSize : "30px";
        }
        , "slow", function () {
            $(this).text("文字もおっきくなった");
        }
        );
    }
    );
    // アニメーションをいっきに行う
    $("#btn2").click(function () {
        $("#hoge").text("ほれほれ~")// queueをfalseにするとアニメーションが同時進行になる
        .animate( {
            width : "400px", height : "400px";
        }
        , {
            queue : false, duration : "slow", easing : "linear", complete : function () {
                $(this).text("同時にアニメーションしてるよ");
            }
        }
        ).animate( {
            fontSize : "30px";
        }
        , "slow", function () {
        }
        );
    }
    );
    // show
    $("#btn3").click(function () {
        $("#hoge").text("show~~").show(1000);
    }
    );
    // hide
    $("#btn4").click(function () {
        $("#hoge").text("hide~~").hide(1000);
    }
    );
    // fadeOut
    $("#btn5").click(function () {
        $("#hoge").text("fadeOut~~").fadeOut(1000);
    }
    );
    // fadeIn
    $("#btn6").click(function () {
        $("#hoge").text("fadeIn~~").fadeIn(1000);
    }
    );
    // hoverしたときのイベント
    $("#hoge").css( {
        "opacity" : "0.5";
    }
    ).hover(// 乗っかったとき
    function (ev) {
        $(this).css( {
            "cursor" : "pointer";
        }
        ).animate( {
            width : "400px", height : "400px", "opacity" : "1";
        }
        , "slow", function () {
            $(this).text("hoverした");
        }
        );
    }
    , // 離れたとき
    function (ev) {
        $(this).css( {
            "cursor" : "default";
        }
        ).animate( {
            width : "200px", height : "200px", "opacity" : "0.5";
        }
        , "slow", function () {
            $(this).text("hoverしてない");
        }
        );
    }
    );
    // いったんクリアー
    $("#bClear").click(function () {
        $("#hoge").text("hogehoge").css( {
            "border" : "1px solid", "width" : "200px", "height" : "200px", "backgroundColor" : "#888", "fontSize" : "16px";
        }
        );
    }
    );
}
);

【関連する記事】

Comments:0

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Remember personal info

Trackback:0

TrackBack URL for this entry
http://hisasann.com/cgi-bin/mt/mt-tb.cgi/1064
Listed below are links to weblogs that reference
jQueryのanimateメソッドの使い方 from HouseTect, JavaScripter Blog

Home > 技術 > jQueryのanimateメソッドの使い方

Tag cloud
Categories
月別アーカイブ
このブログについて
author:hisasann

description:フリーランスで仕事しているプログラマーです。
最近はJavaScript、Rails、Java(Struts+Spring)なんかをいろいろといじっています。
今やってみたいのはFlashやActionScriptかな。
また誕生して半年になる子供の成長を見守るパパでもあります。

日々の日記 :

他に運営しているブログ:

利用しているWebサービス :
最近のコメント
Powered by
Powered by
Movable Type 3.35

Page Top