ブラウザでSVGを表示するSIEの開発 (SIE - to display SVG on legacy browsers)
| リビジョン | 5a93340a7c3aed9f8d49f1a67e762f18372c7157 (tree) |
|---|---|
| 日時 | 2015-10-23 23:25:50 |
| 作者 | dhrname <dhrname@user...> |
| コミッター | dhrname |
Support a detail property of the SVGEvent object
| @@ -320,8 +320,7 @@ base("$frame").mix ( { | ||
| 320 | 320 | this.eventOffset = this.begin; |
| 321 | 321 | if (this.repeat > 0) { |
| 322 | 322 | ele && ele.addEventListener("repeatEvent", (function(evt) { |
| 323 | - /*evt.detailをIE11では0となり使えないので、代用としてevt.targetを活用*/ | |
| 324 | - if (evt.target.detail === this.repeat) { | |
| 323 | + if (evt.detail === this.repeat) { | |
| 325 | 324 | this.listener(evt); |
| 326 | 325 | } }).bind(this), true); |
| 327 | 326 | } else if (this.accessKey) { |
| @@ -1288,18 +1287,16 @@ base("$frame").up("$svgEvent").mix( { | ||
| 1288 | 1287 | floor = Math.floor; |
| 1289 | 1288 | while(obj) { |
| 1290 | 1289 | var frame = obj.frame, |
| 1291 | - target = obj.target; | |
| 1290 | + target = obj.target | |
| 1291 | + detail = 0; | |
| 1292 | 1292 | if (frame <= num) { |
| 1293 | 1293 | /*IE11ではSVGEventsやDOMEventsを使うと問題が起きるため、MouseEventsで代用する*/ |
| 1294 | 1294 | var evt = target.ownerDocument.createEvent("MouseEvents"); |
| 1295 | - evt.initMouseEvent(obj.eventType+"Event" ,true, true, window, 0, 0, 0, 0, 0, false, false, false, false,0, target); | |
| 1296 | 1295 | if ( (obj.eventType === "repeat") && (obj.count < obj.limit) ) { |
| 1297 | 1296 | /*リピートイベントが、リピート制限内である場合 |
| 1298 | 1297 | *numの段階で、何回リピートしたかを求める*/ |
| 1299 | 1298 | obj.count += floor( (num - frame) / obj.simpleDuration); |
| 1300 | - /*IE 11では、evt.detailは書き換えても必ず0となる | |
| 1301 | - * begin属性などで、repeat文法を使いたいので、やむを得ず、targetにdetailプロパティを追加*/ | |
| 1302 | - evt.detail = target.detail = obj.count; | |
| 1299 | + detail = obj.count; | |
| 1303 | 1300 | cobj = obj; |
| 1304 | 1301 | } else { |
| 1305 | 1302 | /*ポインタの連結を変更することで、リストからobj を除去*/ |
| @@ -1308,6 +1305,7 @@ base("$frame").up("$svgEvent").mix( { | ||
| 1308 | 1305 | cobj = this.first = obj.next; |
| 1309 | 1306 | } |
| 1310 | 1307 | } |
| 1308 | + evt.initMouseEvent(obj.eventType+"Event" ,true, true, window, detail, 0, 0, 0, 0, false, false, false, false, 0, target); | |
| 1311 | 1309 | target.dispatchEvent(evt); |
| 1312 | 1310 | } else { |
| 1313 | 1311 | /*next プロパティを書き換えるためのobj オブジェクトのキャッシュ*/ |
| @@ -4398,11 +4398,10 @@ describe("SMIL Animation Spec", function() { | ||
| 4398 | 4398 | frame.setFrame(5); |
| 4399 | 4399 | a.count = 1; |
| 4400 | 4400 | expect(frame.first).toEqual(a); |
| 4401 | - | |
| 4401 | + | |
| 4402 | 4402 | ele.addEventListener("repeatEvent", function(evt) { |
| 4403 | 4403 | expect(evt.target).toBe(ele); |
| 4404 | - /*IE 11では、書き換えても必ず、evt.detailが0となることに注意*/ | |
| 4405 | - expect(evt.target.detail).toBe(2); | |
| 4404 | + expect(evt.detail).toBe(2); | |
| 4406 | 4405 | } ); |
| 4407 | 4406 | frame.timelines = []; |
| 4408 | 4407 | frame.first = null; |
| @@ -4410,11 +4409,13 @@ describe("SMIL Animation Spec", function() { | ||
| 4410 | 4409 | timelines: [], |
| 4411 | 4410 | begin: 1, |
| 4412 | 4411 | simpleDuration: 4, |
| 4413 | - activeTime: 10, | |
| 4412 | + activeTime: 15, | |
| 4414 | 4413 | target: ele |
| 4415 | 4414 | }) ); |
| 4416 | 4415 | frame.setFrame(9); |
| 4417 | 4416 | a.count = 2; |
| 4417 | + a.limit = 3; | |
| 4418 | + a.next.frame = 16; | |
| 4418 | 4419 | expect(frame.first).toEqual(a); |
| 4419 | 4420 | } ); |
| 4420 | 4421 | } ); |