前回の記事で書いたように、Edge のアクションが呼び出されると、引数に "アクションの定義されているシンボル" のインスタンスが渡されます。
function(sym, e) { // ここに必要な処理を記述する }
ここで、具体的な例を確認しておきます。
例えば、MySymbol というシンボルのインスタンス MyInstance をステージ直下に配置して、MyInstance にアクションを定義した場合を考えます。
この場合、定義されたアクションは、ステージの定義の一部です (ステージもシンボルの 1 種でしたね)。 MySymbol の定義には含まれません。 従って、アクションの引数の sym が指すシンボルのインスタンスは、ステージ (stage) ということになります。
ちょっと紛らわしいでしょうか? AS3 であれば、あるオブジェクトにイベントリスナを追加したとき、リスナにはそのオブジェクトの親オブジェクトが渡される、に近い状況です。
アクション内部では、sym すなわちシンボルのインスタンスを使って、様々な制御ができます。今回は sym から利用できる API をご紹介します。
要素の取得と削除
まず、sym を使うと、シンボルのインスタンス内の要素を取得できます。以下のシンタックスを使います。
sym.$("要素名")
これにより取得されるのは jQuery のオブジェクトです。そのため、jQuery の API を直接利用できます。
例えば、下は、MyText という要素の HTML コンテンツを置き換える例です。
sym.$("MyText").html("新しい文章");
jQuery のオブジェクトではなくて、実際の HTML 要素にアクセスしたい場合は、以下のように記述します。
sym.$("要素名")[0]
ところで、sym には要素のセレクタを取得するためのメソッドも用意されています。
sym.lookupSelector("要素名")
これを使うと、上の例は以下のように書き直すことができます。
$(sym.lookupSelector("MyText")).html("新しい文章");
インスタンス内の要素を、jQuery のオブジェクトではなくて、Edge のシンボルとして取得したい場合もあると思います。そんな時に使えるメソッドもいくつか用意されています。
sym.getSymbol("要素名") sym.getChildSymbols()
getSymbol() は、指定したインスタンス名を持つシンボルを探します。getChildSymbols() は、sym の直接の子であるシンボルのインスタンス全ての配列を返します。
ここで取得するのはシンボルのインスタンスなので、これまで紹介したような API が使えます。
例えば、
sym.getSymbol("MyInstance").$("MyChildInstance").hide();
上の例は、MyInstance という名前のインスタンスを取得して、その内部の要素 MyChildInstance を非表示に設定しています。
シンボルのインスタンスを削除する時は deleteSymbol() メソッドを使います。一緒に、関連する DOM 要素も削除されます。 (シンボルのインスタンスには DIV 要素が関連付けられています)
sym.deleteSymbol(options)
属性の設定
以下は、シンボルの属性を取得または設定するメソッドです。これらを使って、イベント発生時にシンボルの属性を操作できます。
sym.getParameter("属性名") sym.setParameter("属性名", 属性値)
getParameter() は 属性が見つからないと undefined を返します。どちらの関数も、'属性名' は文字列で指定します。setParameter() の '属性値' に渡す値の型は任意です。
タイムラインの制御
sym を使って、シンボルのタイムラインの制御も行えます。
sym.play(position) sym.playReverse(position) sym.stop(position)
上から順に、再生、逆再生、停止、を指示するメソッドです。どのメソッドも、引数には、数字 (単位はミリ秒) か文字列 (タイムライン上のラベル) を指定できます。
play() と playReverse() は指定された位置から再生を開始します。stop() は指定された位置で再生を停止します。引数を指定しない場合、メソッドを呼んだ時点の再生位置が、引数の代わりに使われます。
(タイムラインへのラベルの追加は ctrl-L キー、ラベルの削除はラベル選択後に delete キーです)
autoPlay 属性が false のシンボルのインスタンスは、再生を開始させるのに play() ではなくて play(0) の指定が必要な場合があるようです。これが使用かどうかは不明です。
再生が完了した状態で play() または playReverse() を引数無しで呼ぶと、play() はタイムラインの最初から、playReverse() はタイムラインの最後から再生を行います。
下は、タイムラインの属性を取得するメソッドです。
sym.getPosition() sym.getDuration() sym.isPlaying() sym.isPlayDirectionReverse()
上から順に、現在の再生位置、タイムライン全体の長さ、タイムラインを再生中か、タイムラインを逆方向に再生中か、を返します。
コメントする