svnno****@sourc*****
svnno****@sourc*****
2011年 6月 17日 (金) 23:44:32 JST
Revision: 2778 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2778 Author: dhrname Date: 2011-06-17 23:44:32 +0900 (Fri, 17 Jun 2011) Log Message: ----------- SVGAnimateMotionElementの修正 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-17 14:27:37 UTC (rev 2777) +++ branches/08x/080/org/w3c/dom/svg.js 2011-06-17 14:44:32 UTC (rev 2778) @@ -5471,13 +5471,13 @@ d = tgsd * 0.8, n = _tar._valueList.length - 1, tg = _tar.getCurrentTime(), - ii, di, ti; + ii; if (tgsd === 0) { tgsd = null; return; } if (tpn) { //path属性が指定されていた場合、tpnは属性値となる - var st = tpn.getTotalLength() * tg / d, //stは現在の距離 + var st = tpn.getTotalLength() * tg / d, //stは現在に至るまでの距離 p = tpn.getPointAtLength(st), trans = _tar.targetElement.transform; p = p.matrixTransform(_tar.targetElement.getScreenCTM()); @@ -5490,7 +5490,9 @@ trans.baseVal = base; evtt = base = trans = st = p = null; } else if (tar._valueList) { - var total = 0; + var total = 0, //totalは総距離 + st = 0, //stは現在にいたるまでの距離 + tav = tar._valueList; if ((n !== -1) && (d !== 0) && (tg <= d)) { ii = Math.floor((tg*n) / d); if (ii === n) { //iiが境い目のときは、n-2を適用 @@ -5499,19 +5501,17 @@ } else { return; } - if (tar._keyTimes) { - di = (tar._keyTimes[ii+1] - tar._keyTimes[ii]) * d; - ti = tar._keyTimes[ii]; - } else { - di = d / n; //keyTimesがなければ均等に時間を配分しておく - ti = ii / n; - } - for (var i=1, tav=tar._valueList, tvli=tav.length;i<tvli;i+=2) { + for (var i=1, 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, + for (var i=1;i<ii;i+=2) { + st += Math.sqrt(Math.pow(tav[i][1] - tav[i-1][1], 2) + Math.pow(tav[i][0] - tav[i-1][0], 2)); + } + var st = (st / total) * d, p = tar.ownerDocument.documentElement.createSVGPoint(), trans = _tar.targetElement.transform; + p.x = tav[ii][0] + (tav[ii+1][0] - tav[ii][0]) * (tg - st) / d; + p.y = tav[ii][1] + (tav[ii+1][1] - tav[ii][1]) * (tg - st) / d; p = p.matrixTransform(_tar.targetElement.getScreenCTM()); trans.animVal.getItem(trans.animVal.numberOfItems-1).setTranslate(p.x, p.y); var base = trans.baseVal;