svnno****@sourc*****
svnno****@sourc*****
2011年 6月 16日 (木) 23:22:28 JST
Revision: 2772 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2772 Author: dhrname Date: 2011-06-16 23:22:28 +0900 (Thu, 16 Jun 2011) Log Message: ----------- animteMotion要素の実装を改良して、バグの修正を開始 Modified Paths: -------------- branches/08x/080/org/w3c/dom/svg.js Modified: branches/08x/080/org/w3c/dom/svg.js =================================================================== --- branches/08x/080/org/w3c/dom/svg.js 2011-06-14 11:31:16 UTC (rev 2771) +++ branches/08x/080/org/w3c/dom/svg.js 2011-06-16 14:22:28 UTC (rev 2772) @@ -5435,8 +5435,27 @@ d = null; } }, false); + this.addEventListener("DOMNodeInserted", function(evt){ + if (evt.eventPhase === /*Event.BUBBLING_PHASE*/ 3) { + return; //強制終了させる + } + var tar = evt.target; + tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt){ + var vlist = [], + ti; + if (tar._values) { + for (var i=0, tav=tar._values, tvli=tav.length;i<tvli;++i) { + ti = tav[i]; + ti = ti.split(","); + vlist[i] = [+ti[0], +ti[1]]; + } + tar._valueList = vlist; + } + }, false); + }, false); this.addEventListener("beginEvent", function(evt) { - var tar = evt.target, trans = tar.targetElement.transform; + var tar = evt.target, + trans = tar.targetElement.transform; /*アニメーション中に変化すべき値をanimValプロパティに入力して、 *baseValと同じような値に設定。 */ @@ -5446,15 +5465,17 @@ } trans.animVal.appendItem(tar.ownerDocument.documentElement.createSVGTransform()); tar._frame = function() { - var _tar = tar, tpn = _tar._path; - if (!!tpn) { //path属性が指定されていた場合、tpnは属性値となる - var tgsd = _tar.getSimpleDuration(); - if (tgsd === 0) { - tgsd = null; - return; - } - var st = (tpn.getTotalLength() / tgsd) * _tar.getCurrentTime() / 125 * 0.8; - var p = tpn.getPointAtLength(st), trans = _tar.targetElement.transform; + var _tar = tar, + tpn = _tar._path, + tgsd = _tar.getSimpleDuration(); + if (tgsd === 0) { + tgsd = null; + return; + } + if (tpn) { //path属性が指定されていた場合、tpnは属性値となる + var st = (tpn.getTotalLength() / tgsd) * _tar.getCurrentTime() / 125 * 0.8, + p = tpn.getPointAtLength(st), + trans = _tar.targetElement.transform; p = p.matrixTransform(_tar.targetElement.getScreenCTM()); trans.animVal.getItem(trans.animVal.numberOfItems-1).setTranslate(p.x, p.y); var base = trans.baseVal; @@ -5463,11 +5484,27 @@ evtt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null); _tar.targetElement.dispatchEvent(evtt); trans.baseVal = base; - evtt = base = trans = st = tgsd = p = null; - } else { + evtt = base = trans = st = p = null; + } else if (tar._valueList) { + var total = 0; + for (var i=1, tav=tar._valueList, tvli=tav.length;i<tvli;i+=2) { + total += Math.sqrt(Math.pow(tav[i][1] - tav[i][0], 2) + Math.pow(tav[i-1][1] - tav[i-1][0], 2)); + } + var st = (total / tgsd) * _tar.getCurrentTime() / 125 * 0.8, + p = tar.ownerDocument.documentElement.createSVGPoint(), + trans = _tar.targetElement.transform; + p = p.matrixTransform(_tar.targetElement.getScreenCTM()); + trans.animVal.getItem(trans.animVal.numberOfItems-1).setTranslate(p.x, p.y); + var base = trans.baseVal; + trans.baseVal = trans.animVal; + var evtt = _tar.ownerDocument.createEvent("MutationEvents"); + evtt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null); + _tar.targetElement.dispatchEvent(evtt); + trans.baseVal = base; + evtt = base = trans = st = p = null; } } - evt = trans = null; + evt = trans = tpn = tgsd = null; }, false); this.addEventListener("endEvent", function(evt) { var tar = evt.target, trans = tar.targetElement.transform;