OSDN Git Service

Modify the initialize method
[sie/sie.git] / org / w3c / dom / smil.js
index 5542e26..fd398ec 100644 (file)
@@ -58,6 +58,17 @@ base("$frame").mix ( {
   pauseAnimation: function() {\r
     this.isPaused = true;\r
   },\r
+  \r
+  /*後述のinitializeメソッドで使うオブジェクトリスト*/\r
+  objList: [],\r
+  \r
+  /*オブジェクトの初期化処理*/\r
+  initialize: function() {\r
+    var list = this.objList;\r
+    for (var i=0;i<list.length;++i) {\r
+      list[i].initialize();\r
+    }\r
+  },\r
 \r
   /*setFrame メソッド\r
    * フレーム数を数値num まで進めるか、戻す*/\r
@@ -1391,19 +1402,31 @@ base("$calcMode").up("$attribute").mix( {
   to: "",\r
   \r
   \r
-  /*後述のinitilizeメソッドで使う要素リスト\r
-   * getElementsByTagNameNSã\83¡ã\82½ã\83\83ã\83\89ã\81®è¿\94ã\82\8aå\80¤ã\81®å\85¥å\8a\9bを想定*/\r
+  /*後述のinitializeメソッドで使う要素リスト\r
+   * getElementsByTagNameNSã\83¡ã\82½ã\83\83ã\83\89ã\81®è¿\94ã\82\8aå\80¤ã\82\92Arrayå\8c\96ã\81\97ã\81\9fã\81\93ã\81¨を想定*/\r
   elementList: [],\r
   \r
-  /*initilize メソッド\r
+  /*何番目からelementListを処理しているかの数値*/\r
+  numberOfElemList: 0,\r
+  \r
+  /*initialize メソッド\r
    * 要素リストを初期化させる\r
    * 初期化処理を分散させるために使う*/\r
-  initilize: function() {\r
+  initialize: function() {\r
     var eles = this.elementList;\r
-    for (var i=0;i<eles.length;++i) {\r
-      this.up().init(eles.item(i));\r
+    if (!eles || !eles.length) {\r
+      return;\r
     }\r
-    eles = void 0;\r
+    var length = this.numberOfElemList+50;\r
+    for (var i=length-50; i<length; ++i) {\r
+      if (eles.length <= i) {\r
+        this.elementList = null;\r
+        return;\r
+      }\r
+      this.up().init(eles[i]);\r
+    }\r
+    this.numberOfElemList += 50;\r
+    eles = length = void 0;\r
   },\r
    \r
   /*initメソッドで使われるアニメーション関数*/\r
@@ -2082,10 +2105,11 @@ base("$getDocument").mix ( function() {
     /*文書からアニメーション関連要素を取り出して、オブジェクトを初期化*/\r
     function getElement (svgDoc) {\r
         var $set = base("$calcMode").$attribute.$setElement,\r
-            $animate = $set.$animateElement;\r
+            $animate = $set.$animateElement,\r
+            frame = base("$frame");\r
         init($set, "set");\r
         init($animate, "animate");\r
-        init($animate, "animateColor");\r
+        init($animate.up(), "animateColor");\r
         init($animate.$animateTransformElement, "animateTransform");\r
         init($animate.$animateTransformElement.$motionElement, "animateMotion");\r
           /*リンクのハッシュ読み取りで、ハイパーリンクのイベント処理\r
@@ -2098,13 +2122,15 @@ base("$getDocument").mix ( function() {
              var hash = svgDoc.defaultView.location.hash.slice(1);\r
              svgDoc.getElementById(hash).beginElement();\r
            });\r
-  \r
         function init (obj, name) {\r
-          var eles = svgDoc.getElementsByTagNameNS(svgns, name)\r
-          for (var i=0;i<eles.length;++i) {\r
-            obj.up().init(eles.item(i));\r
+          /*あとでframe.initializeメソッドで呼び出すために準備しておく*/\r
+          var elist = svgDoc.getElementsByTagNameNS(svgns, name);\r
+          obj.numberOfElemList = 0;\r
+          if (elist.length > 0) {\r
+            obj.elementList = elist;\r
+            frame.objList.push(obj);\r
           }\r
-          eles = obj = void 0;\r
+          elist = obj = void 0;\r
         };\r
     };\r
   }\r
@@ -2128,6 +2154,7 @@ base("$getDocument").mix ( function() {
             if (!this.isPaused) {\r
               frame++;\r
               try {\r
+                this.initialize();\r
                 this.setFrame(frame);\r
               } catch(e) {\r
               }\r
@@ -2142,6 +2169,7 @@ base("$getDocument").mix ( function() {
           var $f = base("$frame");\r
           return function () {\r
             frame++;\r
+            $f.initialize();\r
             $f.setFrame(frame);\r
           };\r
         })(-1), 1 );\r