AS3でフルFlashサイトでの固定配置(リキッドレイアウト)を実装する
特にフルFlashサイトなどでは、ブラウザのサイズを変更しても、フッターを下につけたままにしたい、ボタンを中央にキープしたいなどといった場合があります。Webではリキッドレイアウトといいますが、このように、さまざまなサイズのブラウザでも体裁を保ちたいといった要望がFlashにも求められることが多くなりました。
そこで、任意のムービークリップにクラス「SampleMc01」が設定してあることを前提に、ActionScript3で固定配置するさまざまなサンプルをまとめたいと思います。
まず、ムービークリップを配置するステージをフルFlashにして、ステージの基準点を左上に設定したとします。
import flash.display.StageScaleMode; import flash.display.StageAlign;
stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT;
左上に固定配置する
SampleMc01の中で、以下のように位置を指定します。
public class SampleMc01 extends MovieClip {
this.x = 0;
this.y = 0;
}
左下に固定配置する
画面のリサイズがあった場合に、底辺についてゆくようにイベントリスナーを設定します。yは底辺からの距離ですね。
public class SampleMc01 extends MovieClip {
this.x = 0;
this.y = stage.stageHeight - y;
stage.addEventListener(Event.RESIZE, keeplayout);
}
private function keeplayout(e:Event):void {
this.y = stage.stageHeight - y;
}
右下に固定配置する
同様にしてx軸にもついても右端についていくようにイベントリスナーに追加します。
public class SampleMc01 extends MovieClip {
this.x = stage.stageWidth - x;
this.y = stage.stageHeight - y;
stage.addEventListener(Event.RESIZE, keeplayout);
}
private function keeplayout(e:Event):void {
this.x = stage.stageWidth - x;
this.y = stage.stageHeight - y;
}
中央に固定配置する
中央からx, yの距離に固定配置する場合は、それぞれ「stage.stageWidth / 2 – x」、「stage.stageHeight / 2 – y」とすればよいですね。
public class SampleMc01 extends MovieClip {
this.x = stage.stageWidth / 2;
this.y = stage.stageHeight / 2;
stage.addEventListener(Event.RESIZE, keeplayout);
}
private function keeplayout(e:Event):void {
this.x = stage.stageWidth / 2;
this.y = stage.stageHeight / 2;
}
フッターエリアの幅をリキッドレイアウトにする(幅いっぱい)
底辺からの位置を保持しつつ、ブラウザの幅に合わせてオブジェクトの幅を更新します。
public class SampleMc01 extends MovieClip {
this.x = 0;
this.y = stage.stageHeight;
this.width = stage.stageWidth;
stage.addEventListener(Event.RESIZE, keeplayout);
}
private function keeplayout(e:Event):void {
this.y = stage.stageHeight;
this.width = stage.stageWidth;
}
フッターエリアの幅をリキッドレイアウトにする(中央・同比率幅)
ムービークリップのオブジェクトを中央揃えにした場合です。フッターエリア幅をブラウザ幅の80%で保持します。
少し複雑ですが、イメージできますでしょうか。。。
public class SampleMc01 extends MovieClip {
this.x = stage.stageWidth / 2;
this.y = stage.stageHeight;
this.width = stage.stageWidth * 0.8;
stage.addEventListener(Event.RESIZE, keeplayout);
}
private function keeplayout(e:Event):void {
this.x = stage.stageWidth / 2;
this.y = stage.stageHeight;
this.width = stage.stageWidth * 0.8;
}
これらの組み合わせにより、ほとんどのリキッドレイアウトの要件に対応できます。
コメントする