timelines: [],\r
\r
/*開始フレーム数の候補。アニメーションの開始条件となる\r
- * 単位はフレーム数であって、秒数ではない*/\r
- begin: 0,\r
+ * 単位はフレーム数であって、秒数ではない\r
+ * なお、初期値については、開始フレームが負の値を考慮しているため*/\r
+ begin: -Number.MAX_VALUE,\r
\r
/*活動継続時間 (Active Duration)のフレーム数。アニメーションの継続条件となる\r
* 単位はフレーム数であって、秒数ではない*/\r
/*setFrame メソッド\r
* フレーム数を数値num まで進めるか、戻す*/\r
setFrame: function( /*number*/ num) {\r
- if((num < this.begin) || (num >= (this.begin+this.activeTime))) {\r
- return;\r
- }\r
this.currentFrame = num;\r
var timelines = this.timelines;\r
for (var i=0;i<timelines.length;++i) {\r
},\r
\r
/*引数に渡された時刻リストの中から、現在フレームf以下の、最大値を求めるメソッド\r
- * -1を返したときはリストの中にf以下の値がないことを示す*/\r
+ * Number.MIN_VALUEの値を返したときはリストの中にf以下の値がないことを示す*/\r
getMaxList: function (f, list) {\r
- var maxTime = -1; /*時刻の最大値*/\r
+ var maxTime = -Number.MAX_VALUE; /*時刻の最大値*/\r
while( list ) {\r
var v = list.value;\r
- /*f以下の開始リスト値のうち、最大値をstartTimeに代入*/\r
+ /*f以下の開始リスト値のうち、最大値をmaxTimeに代入*/\r
if ( (v <= f)\r
&& (maxTime <= v) ) {\r
maxTime = v;\r
* 現在フレーム数 f より大きい数値は、更新できる条件と無関係なので、除外しておく\r
* だから、f以下の値の中から、最大値を探して、\r
* それをbeginプロパティの値cacheBeginと比較する*/\r
- var startTime = this.getMaxList(f, this.beginList),\r
- endTime = this.getMaxList(f, this.endList),\r
+ var startTime = this.getMaxList(f, this.beginList);\r
+ if (startTime === -Number.MAX_VALUE) {\r
+ (state > post) && (this.state = begin);\r
+ return this;\r
+ }\r
+ var endTime = this.getMaxList(f, this.endList),\r
isWait = (state === wait),\r
cacheBegin = this.begin;\r
if ( !startTime && isWait) {\r
- /*開始時刻が0ならば、アニメーションを開始*/\r
+ /*開始時刻が0ならば、アニメーションを開始\r
+ * ただし、アニメが終了した後のPOSTWAITING状態の時には作動させない*/\r
this.begin = 0;\r
this.state = begin;\r
} else if ( isWait || (state === post) ) {\r
var id = __step(),\r
idstop = function() {\r
/*アニメーションを中止する関数*/\r
- window.cancelAnimationRequest && cancelAnimationRequest(id);\r
+ window.cancelAnimationFrame && cancelAnimationFrame(id);\r
};\r
base("$frame").on("pauseAnimation", idstop);\r
window.addEventListener("unload", idstop);\r
handle: null\r
};\r
(function(frame) {\r
- var $frame = base("$frame"),\r
- _cancel = cancel; /*cancelのエイリアス*/\r
- _cancel.handle = requestAnimationFrame(step);\r
- function step() {\r
- if (!$frame.isPaused) {\r
+ var _cancel = cancel; /*cancelのエイリアス*/\r
+ var step = function () {\r
+ if (!this.isPaused) {\r
frame++;\r
try {\r
- $frame.setFrame(frame);\r
+ this.setFrame(frame);\r
} catch(e) {\r
}\r
_cancel.handle = requestAnimationFrame(step);\r
}\r
- };\r
+ }.bind(base("$frame"));\r
+ _cancel.handle = requestAnimationFrame(step);\r
})(-1);\r
return cancel;\r
} else {\r