サンプルダウンロード
PDRファイル・CSFファイル在中
「search.zip」 2.54 KB (2,608 バイト)
省スペース検索窓 作成方法解説
ParaDraw Ver.0.3a4 で作成した絵を,Suzuka Ver.0.7.2 で動作させています。
Flash はファイルの中に空間のみならず時間を持っているので,その時間によって空間を補うことができます。
時間を活用すれば,かなりな省スペース化ができますね。
スプライトインスタンスとテキストフィールドインスタンスの階層構造は次のようになっています。
_root
├ sMC3 (スプライト MSN)
├ sMC2 (スプライト Yahoo!)
├ sMC1 (スプライト Google)
└ w
(テキストフィールド)
_root のタイムラインの フレーム1
のスクリプトは,次のように書いています。
スクリプトが存在するのはここだけです。
// 変数 my_n の初期値を設定
var my_n = 0; // 検索ボタンの動くのスピードの設定
var spd = 1/6; //
テキストフィールドの初期値 w.text = "< 検索語入力 >";
// 変数 flag の値を false に設定
var flag = false;
//
w.onSetFocus = function() {
// flag が false であれば
if(!flag){
// テキストフィールドを初期化
w.text = "";
// flag を true にする
flag = true;
}
};
// 検索ボタンの座標を指定する配列の作成
var xArr = new Array();
xArr[0] = [105, 110, 115];
xArr[1] = [30, 110, 115];
xArr[2] = [30, 35, 115];
xArr[3] = [30, 35, 40];
xArr[4] = [30, 55, 80];
// 検索ボタンをそれぞれの座標に向けて徐々に動かす
_root.onEnterFrame = function() {
for (i=1; i<=3; i++) {
_root["sMC"+i]._x += (xArr[my_n][i-1]-_root["sMC"+i]._x)*spd;
}
};
// 検索ボタンのロールオーバー・アウト時の動作定義
for (i=1; i<=3; i++) {
// 各ボタンに固有値 n を設定
_root["sMC"+i].n = i;
// ロールオーバーで my_n に固有値を代入
_root["sMC"+i].onRollOver = function() {
my_n = this.n;
};
// ロールアウトで my_n に 0 を代入
_root["sMC"+i].onRollOut = function() {
my_n = 0;
};
// ドラッグアウトした時はとロールアウト同じく
_root["sMC"+i].onDragOut = _root["sMC"+i].onRollOut;
}
// 検索ボタンのクリック時の動作定義
_root.sMC1.onRelease=function(){
getURL("http://www.google.co.jp/search?q="+escape(_root.w.text),"_blank");
};
_root.sMC2.onRelease=function(){
getURL("http://search.yahoo.co.jp/search?p="+escape(_root.w.text),"_blank");
};
_root.sMC3.onRelease=function(){
getURL("http://search.msn.co.jp/results.aspx?q="+escape(_root.w.text),"_blank");
};
//
// Enterキーを押したときにボタンを出す
// キー監視用インスタンスの作成
var myKey = new Object();
// 何かキーが押されたときの動作定義
myKey.onKeyDown = function() {
// キーコードが13であれば
if (Key.getCode() == 13) {
// 変数 my_n に 4 を代入
my_n = 4;
}
};
// myKey をキークラスのリスナーに登録
Key.addListener(myKey);
|
最初の方は,テキストフィールドの初期値を与えておいて,そのテキストフィールドがフォーカスを与えられたとき(onSetFocus),テキストフィールドを空にするという,比較的どうでも良いことが書いてあります。
中ほどが重要ポイントです。
「Google」や「Yahoo!」や「MSN」のスプライトにロールオーバーしたとき,変数
「my_n」 の値を変えてやります。
その 「my_n」 の値によって,
// 検索ボタンの座標を指定する配列の作成
var xArr = new Array();
xArr[0] =
[105, 110, 115];
xArr[1] = [30, 110, 115];
xArr[2] = [30,
35, 115];
xArr[3] = [30, 35, 40];
xArr[4] = [30, 55,
80];
この2次元配列から各スプライトの x座標 をセレクトして,
// 検索ボタンをそれぞれの座標に向けて徐々に動かす
_root.onEnterFrame = function()
{
for (i=1; i<=3; i++) {
_root["sMC"+i]._x +=
(xArr[my_n][i-1]-_root["sMC"+i]._x)*spd;
}
};
によって,各スプライトインスタンスをセレクトした x座標
に徐々に近付けるという動きをさせています。
絶対に2次元配列を用意しなければならないことはありませんが,データをシンプルに扱うために用意しています。
次に,「Google」や「Yahoo!」や「MSN」のスプライトをクリックしたときの動作定義を書いています。
「MSN」の例↓。
_root.sMC3.onRelease=function(){
getURL("http://search.msn.co.jp/results.aspx?q="+escape(_root.w.text),"_blank");
};
各サーチエンジンに渡す引数部分に代入する文字列は escape関数 を使って w.text
の値をエスケープしています。
エスケープさせなくても良いエンジンもありましたが,一応共通してエスケープさせてみました。
|