1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
  
     | 
    
      <!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>offset-distance interpolation</title>
    <link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
    <link rel="help" href="https://drafts.fxtf.org/motion-1/#offset-distance-property">
    <meta name="assert" content="offset-distance supports animation.">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/css/support/interpolation-testcommon.js"></script>
  </head>
  <style>
    .parent {
      offset-path: ray(30deg closest-side);
    }
    .target {
      offset-path: ray(10deg closest-side);
    }
  </style>
  <body>
    <script>
      'use strict';
      test_no_interpolation({
        property: 'offset-path',
        from: "path('M 0 0 L 100 100 M 100 200 L 200 200 Z L 200 100 Z')",
        to: "ray(0deg closest-side)",
      });
      test_no_interpolation({
        property: 'offset-path',
        from: "ray(0deg closest-corner)",
        to: "none",
      });
      // Neutral keyframes use the inline style.
      test_interpolation({
        property: 'offset-path',
        from: neutralKeyframe,
        to: 'ray(20deg closest-side)',
      }, [
        {at: -0.3, expect: 'ray(7deg closest-side)'},
        {at: 0, expect: 'ray(10deg closest-side)'},
        {at: 0.3, expect: 'ray(13deg closest-side)'},
        {at: 0.6, expect: 'ray(16deg closest-side)'},
        {at: 1, expect: 'ray(20deg closest-side)'},
        {at: 1.5, expect: 'ray(25deg closest-side)'},
      ]);
      // No interpolation to a ray from the initial value 'none'.
      test_no_interpolation({
        property: 'offset-path',
        from: 'initial',
        to: 'ray(20deg closest-side)',
      });
      // 'inherit' keyframes use the parent style.
      test_interpolation({
        property: 'offset-path',
        from: 'inherit',
        to: 'ray(20deg closest-side)',
      }, [
        {at: -0.3, expect: 'ray(33deg closest-side)'},
        {at: 0, expect: 'ray(30deg closest-side)'},
        {at: 0.3, expect: 'ray(27deg closest-side)'},
        {at: 0.6, expect: 'ray(24deg closest-side)'},
        {at: 1, expect: 'ray(20deg closest-side)'},
        {at: 1.5, expect: 'ray(15deg closest-side)'},
      ]);
      // No interpolation to a ray from the initial value 'none'.
      test_no_interpolation({
        property: 'offset-path',
        from: 'unset',
        to: 'ray(20deg closest-side)',
      });
      // No interpolation to a ray from the initial value 'none'.
      test_no_interpolation({
        property: 'offset-path',
        from: 'none',
        to: 'ray(20deg closest-side)',
      });
      // Interpolation between rays.
      test_interpolation({
        property: 'offset-path',
        from: 'ray(10deg sides contain)',
        to: 'ray(50deg sides contain)'
      }, [
        {at: -1, expect: 'ray(-30deg sides contain)'},
        {at: 0, expect: 'ray(10deg sides contain)'},
        {at: 0.125, expect: 'ray(15deg sides contain)'},
        {at: 0.875, expect: 'ray(45deg sides contain)'},
        {at: 1, expect: 'ray(50deg sides contain)'},
        {at: 2, expect: 'ray(90deg sides contain)'},
      ]);
      test_interpolation({
        property: 'offset-path',
        from: 'ray(-10deg farthest-corner)',
        to: 'ray(-50deg farthest-corner)'
      }, [
        {at: -1, expect: 'ray(30deg farthest-corner)'},
        {at: 0, expect: 'ray(-10deg farthest-corner)'},
        {at: 0.125, expect: 'ray(-15deg farthest-corner)'},
        {at: 0.875, expect: 'ray(-45deg farthest-corner)'},
        {at: 1, expect: 'ray(-50deg farthest-corner)'},
        {at: 2, expect: 'ray(-90deg farthest-corner)'},
      ]);
      // No interpolation between different sizes and/or different containment.
      test_no_interpolation({
        property: 'offset-path',
        from: 'ray(200deg farthest-side)',
        to: 'ray(300deg sides)'
      });
      test_no_interpolation({
        property: 'offset-path',
        from: 'ray(200deg sides contain)',
        to: 'ray(300deg sides)'
      });
      test_no_interpolation({
        property: 'offset-path',
        from: 'ray(200deg farthest-side contain)',
        to: 'ray(300deg sides)'
      });
    </script>
  </body>
</html>
 
     |