Google Maps API・マイマップの使い方・活用法をご紹介しています。

別関数化案:Animating Symbols|Google Maps JavaScript API|Google Developers

さて基本的なアニメーションシンボルのサンプルソースから、
より見やすくメンテナンスしやすい書き方はないものかと、
無名関数を普通の関数に置き換えて、window.setInterval()で呼び出す処理。
別の関数に置き換えようとなった場合の案としての動作をご紹介します。

なお、本投稿は以下からの続きです。

別関数化案:Animating Symbols

上記リンク先でGoogle Developers提示のサンプルソースの動作確認をしました。
その際に出てきた無名関数による処理は、

window.setInterval()の第一パラメータに処理として無名関数を渡し、
第二パラメータでインターバル実行間隔(msec)を指定します。

結果、「window.setInterval(function() {...}, 20);」と、
無名関数の処理が長々と書かれた後、第二パラメータがくるという形になります。

そこで、無名関数をよりすっきりさせるべく、別関数化を試しています。

無名から別関数化定義へ

無名関数で定義している部分を別関数にすると、
インターバル処理自体の呼び出しはすっきりとします。
以下のような記述です。

ただし、var g_count = 0;部分を、
関数の外部に記述しグローバル化する逃げを使っています。

そして「window.setInterval(wrap, 20, p_line);」の第三パラメータに対して、
「function wrap(w_line){}」に渡すパラメータ(p_line)を指定しています。

単純に関数化と言っても、実際動作するように記述するのは面倒なものです。
しかも、このままではIEでは動作しないと言う互換性の問題も残ります。(後述)


上記のサンプルは以下で表示しています。

window.setInterval(wrap, 20, line);の第三パラメータにより、 インターバル呼び出しを行いたい関数に対して渡すパラメータ指定は、 IEでは動作しません。 これはリファレンスにも明記されています。 その為、無名関数から関数を呼び出す形に書き直しても、 IEを対象外とするデグレードの問題が残ってしまいます。

概要 一定の遅延間隔を置いて関数を繰り返し呼び出します。 構文

ここで、

  • intervalIDclearInterval に渡すことのできる固有のインターバル ID です。
  • func は繰り返し呼びたい関数です。
  • もう一つの構文の code は、繰り返し呼び出したいソースコードの文字列です。
  • delay は、setInterval()funcを呼び出す前に待つべき時間です。ミリ秒(1/1000 秒)単位で指定します 。

最初の構文で関数にパラメータを付加したものは、Internet Explorer では動作しないので注意してください。

(引用) window.setInterval – Web API インターフェイス | MDN

 

このままでは、元から提示されていた無名関数による処理を、
壊しデグレードさせただけになってしまっています。

別関数化すらできていないと言う状況です。
さらにグローバル変数まで増やし、いいことは全くありません。

そこで次に無名関数を関数リテラルとして記述し、
関数の入れ子構造を適用する案です。

 


公開日:

コンテンツ
すべて展開 | すべて省略