| <html> | |
| <head> | |
| <style> | |
| svg * { | |
| -webkit-transition-property: fill, stroke, fill-opacity, stroke-opacity, stroke-width, stroke-dasharray, stroke-dashoffset, stroke-miterlimit, kerning, baseline-shift, flood-color, flood-opacity, stop-color, stop-opacity, lighting-color; | |
| -webkit-transition-duration: 2s; | |
| -webkit-transition-timing-function: linear; | |
| } | |
| #rect1 { | |
| fill: rgb(0, 0, 255); | |
| stroke: red; | |
| fill-opacity: 1; | |
| stroke-opacity: 1; | |
| stroke-width: 2; | |
| stroke-dashoffset: 0; | |
| stroke-dasharray: 10 10; | |
| } | |
| .animating #rect1 { | |
| fill: rgb(0, 255, 0); | |
| stroke: black; | |
| fill-opacity: 0.2; | |
| stroke-opacity: 0.2; | |
| stroke-width: 4; | |
| stroke-dashoffset: 10; | |
| stroke-dasharray: 20 20; | |
| } | |
| #rect2 { | |
| fill: rgb(0, 0, 255); | |
| stroke: rgb(255, 0, 0); | |
| stroke-dasharray: 10; | |
| } | |
| .animating #rect2 { | |
| fill: rgb(0, 255, 0); | |
| stroke: rgb(0, 0, 0); | |
| stroke-dasharray: 20 20; | |
| } | |
| #rect3 { | |
| fill: url(#gradient1); | |
| } | |
| .animating #rect3 { | |
| fill: url(#gradient2); | |
| } | |
| #stop1 { | |
| stop-color: rgb(255,0,0); | |
| stop-opacity: 1; | |
| } | |
| .animating #stop1 { | |
| stop-color: rgb(0,255,0); | |
| stop-opacity: 0.5; | |
| } | |
| #rect4 { | |
| stroke: red; | |
| stroke-width: 1px; | |
| } | |
| .animating #rect4 { | |
| stroke-width: 4mm; | |
| } | |
| #rect5 { | |
| stroke: black; | |
| stroke-width: 0; | |
| stroke-dasharray: none; | |
| } | |
| .animating #rect5 { | |
| stroke-width: 10px; | |
| stroke-dasharray: 20; | |
| } | |
| #rect6 { | |
| stroke: black; | |
| stroke-width: 10%; | |
| stroke-dasharray: 20 15; | |
| } | |
| .animating #rect6 { | |
| stroke-width: 20%; | |
| stroke-dasharray: 10 15 20; | |
| } | |
| #rect7 { | |
| fill: url(#invalid) black; | |
| stroke-dasharray: 20; | |
| } | |
| .animating #rect7 { | |
| fill: url(#invalid) blue; | |
| stroke-dasharray: none; | |
| } | |
| #polyline1 { | |
| fill: none; | |
| stroke: black; | |
| stroke-width: 4; | |
| stroke-miterlimit: 12; | |
| } | |
| .animating #polyline1 { | |
| stroke-miterlimit: 10; | |
| } | |
| #text1 { | |
| kerning: 0; | |
| baseline-shift: 0; | |
| } | |
| .animating #text1 { | |
| kerning: 10px; | |
| baseline-shift: 10px; | |
| } | |
| #flood1 { | |
| flood-opacity: 1; | |
| flood-color: rgb(255, 0, 0); | |
| } | |
| .animating #flood1 { | |
| flood-opacity: 0; | |
| flood-color: rgb(0, 255, 0); | |
| } | |
| #light1 { | |
| lighting-color: rgb(255, 0, 0); | |
| } | |
| .animating #light1 { | |
| lighting-color: rgb(0, 255, 0); | |
| } | |
| </style> | |
| <script src="resources/transition-test-helpers.js"></script> | |
| <script> | |
| const expectedValues = [ | |
| // [time, element-id, property, expected-value, tolerance] | |
| [1, "rect1", "fill-opacity", 0.6, 0.1], // 1 -> 0.2 | |
| [1, "rect1", "stroke-width", 3, 0.5], // 2 -> 4 | |
| [1, "rect1", "stroke-opacity", 0.6, 0.1], // 1 -> 0.2 | |
| [1, "rect1", "stroke-dasharray", [15, 15], 1], // 10 -> 20 | |
| [1, "rect1", "stroke-dashoffset", 5, 1], // 0 -> 10 | |
| [1, "rect2", "stroke-dasharray", [15, 15], 1], // 10 -> 20 | |
| [1, "rect4", "stroke-width", 8, 1], // 1px to 4mm | |
| [1, "rect5", "stroke-width", 5, 1], // 0 to 10px | |
| [1, "rect5", "stroke-dasharray", [20], 1], // 20 at half time | |
| [1, "rect6", "stroke-width", 15, 2], // 10% to 20% | |
| [1, "rect6", "stroke-dasharray", [15, 15, 20, 12.5, 17.5, 17.5], 1], // 20 -> 10, 15 -> 15, 20 -> 20, 15 -> 10, 20 -> 15, 15 -> 20 | |
| [1, "rect7", "stroke-dasharray", "none", 1], // none at half time | |
| [1, "stop1", "stop-color", [127, 127, 0], 20], // rgb(255,0,0) -> rgb(0, 255, 0) | |
| [1, "stop1", "stop-opacity", 0.75, 0.1], // 1 -> 0.5 | |
| [1, "polyline1", "stroke-miterlimit", 11, 0.5], // 12 -> 10 (this is an abrupt change in rendering even though the property animation is smooth) | |
| [1, "text1", "kerning", 5, 1], // 0 -> 10px | |
| [1, "text1", "baseline-shift", 5, 1], // 0 -> 10px | |
| [1, "flood1", "flood-opacity", 0.5, 0.1], // 1 -> 0 | |
| [1, "flood1", "flood-color", [127, 127, 0], 20], // rgb(0, 255, 0) -> rgb(255, 0, 0) | |
| [1, "light1", "lighting-color", [127, 127, 0], 20], // rgb(255, 0, 0) -> rgb(0, 255, 0) | |
| ]; | |
| function setupTest() | |
| { | |
| document.getElementById('container').className = 'animating'; | |
| } | |
| runTransitionTest(expectedValues, setupTest, usePauseAPI); | |
| </script> | |
| </head> | |
| <body> | |
| <div id="container"> | |
| <svg viewBox="0 0 160 120" width="400px" height="300px"> | |
| <defs> | |
| <linearGradient id="gradient1"> | |
| <stop id="stop1" offset="5%"/> | |
| <stop offset="95%" stop-color="rgb(0,0,255)" /> | |
| </linearGradient> | |
| <linearGradient id="gradient2"> | |
| <stop offset="10%" stop-color="rgb(0,255,255)" /> | |
| <stop offset="95%" stop-color="rgb(255, 0,255)" /> | |
| </linearGradient> | |
| <filter id="filter1"> | |
| <feFlood id="flood1"/> | |
| <feDiffuseLighting id="light1"/> | |
| </filter> | |
| </defs> | |
| <rect id="rect1" x="10" y="10" width="30" height="30"/> | |
| <rect id="rect2" x="90" y="10" width="30" height="30"/> | |
| <rect id="rect3" x="90" y="60" width="30" height="20"/> | |
| <rect id="rect4" x="10" y="100" width="10" height="10"/> | |
| <rect id="rect5" x="50" y="100" width="10" height="10"/> | |
| <rect id="rect6" x="90" y="100" width="10" height="10"/> | |
| <rect id="rect7" x="130" y="100" width="10" height="10"/> | |
| <polyline id="polyline1" points="10,70 60,75 10,80"/> | |
| <text id="text1" x="100" y="60">Example</text> | |
| </svg> | |
| </div> | |
| <div id="result"></div> | |
| </body> | |
| </html> |